문자가 다른 문자에 맞습니까?


23

내 매트를 색상별로 올바르게 그룹화 한 것을 기억하십니까 ?

내 매트가 색상별로 올바르게 그룹화되었습니다.

어제 나는 그것을보고 있었고 어떤 글자들은 다른 글자들 안에 들어 맞는다는 것을 깨달았습니다. 예 : 글자 P가있는 장소에 글자가 맞습니다 R. 따라서 두 가지 문자가 주어지면 문자 중 하나가 다른 문자 안에 들어간 경우 (직접 또는 회전하지만 뒤집지 않은) 사실 값을 반환하거나 그렇지 않으면 거짓 값을 반환합니다. 즉, 입력이 [P,R]또는 [R,P]인 경우 두 문자 모두 한 문자가 다른 문자 안에 들어가기 때문에 진실성을 반환해야합니다. 당신이 얻을 경우 당신 [L,U]은 서로 맞지 않기 때문에 거짓을 반환해야합니다.

규칙

  • 매트에 숫자도 있기 때문에 입력은 [0-9A-Z] 범위에있는 두 개의 영숫자 문자 여야합니다 (두 개의 입력으로 두 개의 별도 문자, 두 개의 문자로 구성된 목록, 2 자)
  • 결과는 일관성이 있어야합니다 (진실성 및 거짓 성 값은 항상 동일해야 함).
  • 다음은 피팅 표입니다 (문자 [Y,Y]는 입력 과 같은 것을 얻을 수 있도록 항상 적절한 장소에 맞는다는 점에 유의하십시오 ).

    char fits inside chars
    --------------------------------------------------------
       C             G,O
       F             B,E,P,R
       G             O
       I             0,1,7,B,D,E,F,H,K,L,M,N,O,P,R,T,V,W,X,Z
       L             E
       M             W
       P             R
       S             O
       V             A
       W             M
       0             O
       1             B,E,L
       3             O
       6             9,O
       8             O
       9             6,O
    

나는 내 아이의 매트에있는 모든 피팅을 테스트했다고 엄숙히 맹세합니다. (이마에서 땀을 흘린다.)

이것은 이므로 각 언어마다 가장 짧은 코드가 이길 수 있습니다!

일부 테스트 사례

input  output
-------------
[C,G]  truthy (C fits inside G)
[G,C]  truthy (C fits inside G)
[F,R]  truthy (F fits inside R)
[M,W]  truthy (both fit inside the other)
[O,S]  truthy (S fits inside O)
[T,T]  truthy (T fits in its place)
[E,V]  falsey (no fit found)
[P,L]  falsey

샌드 박스 게시물 . 내가 놓친 더 많은 피팅을 발견하면 용서해주십시오. 많은 감사 Οurous 피팅 목록으로 저를 도와 주셔서.



1
1에 맞지 F않습니까?
user202729

@ user202729 아니오, 1에 맞게 뒤집기해야 F하지만 매트에는 허용되지 않습니다. :-)
Charlie

4
그림의 ASCII 기술의 그래프는 (물론 맞춤 인은 이적입니다)
user202729

1
@ Οorous 이미 두 가지 답변을 받았을 때이 다른 질문에 있었습니다 ... 게다가 도전에는 이미 테스트 할 많은 사례가 있으며 더 많은 사례는 아무것도 추가하지 않을 것입니다 (가장 창의적인 부분은 두 입력이 두 피팅을 모두 확인해야하므로 교체 가능).
Charlie

답변:




2

클린 , 276226 바이트

막연하게 골프 같은. 내일 닦을 것이다.

import StdEnv
i a b=isMember b a
t=True
f'C'b=i['GO']b
f'F'b=i['BEPR']b
f'O'b=i['GS03689']b
f'I'b=i['017BDEFHKLMNOPRTVWXZ']b
f'L''E'=t
f'P''R'=t
f'V''A'=t
f'M''W'=t
f'1'b=i['BEL']b
f'6''9'=t
f _ _=False
?a b=a==b||f a b||f b a

온라인으로 사용해보십시오!



2

자바 155 153 151 149 바이트

나는 이것이 모든 경우에 작동한다고 생각합니다.

(c,f,q=1)=>"CGO,FBEPR,GO,I017BDEFHKLMNOPRTVWXZ,LE,MW,PR,SO,VA,WM,0O,1BEL,3O,69O,8O,96O".split`,`.some((v=>v[0]==c&v.includes(f)))|c==f|(q?F(f,c,0):0)

설명:

F=(
c, // input 1
f, // input 2
q=1 // variable used to execute F twice
)=>(
"CGO,FBEPR,GO,I017BDEFHKLMNOPRTVWXZ,LE,MW,PR,SO,VA,WM,0O,1BEL,3O,69O,8O,96O".split`,` 
                              // array of strings where [0] is input 1 and [>0] are the fittings
.some(                        // any element of the array meets:
(v=>v[0]==c&v.includes(f)))|  // input 1 equals [0] and input 2  exists in the lookup string OR
c==f|                         // input 1 equals input 2 OR
(q?F(f,c,0):0)                // input 2 fits inside input 1

let F=(c,f,q=1)=>"CGO,FBEPR,GO,I017BDEFHKLMNOPRTVWXZ,LE,MW,PR,SO,VA,WM,0O,1BEL,3O,69O,8O,96O".split`,`.some((v=>v[0]==c&v.includes(f)))|c==f|(q?F(f,c,0):0);
let tests = [
  ["C","G"],  //truthy (C fits inside G)
  ["G","C"],  //truthy (C fits inside G)
  ["F","R"],  //truthy (F fits inside R)
  ["M","W"],  //truthy (both fit inside the other)
  ["O","S"],  //truthy (S fits inside O)
  ["T","T"],  //truthy (T fits in its place)
  ["E","V"],  //falsey (no fit found)
  ["P","L"]   //falsey
];
tests.forEach((v)=>{console.log("F('"+v[0]+"','"+v[1]+"') = " + F(v[0],v[1]))});

변경 로그:

  • kamoroso94 덕분에 2 바이트 절약
  • Chris M 덕분에 2 바이트 절약
  • 조회 메소드를 .some ()로 변경하여 2 바이트를 절약했습니다.

c적합 f하거나 f적합 하면 true를 반환합니까 c? 하나의 사례 만 확인한 것 같습니다.
Charlie

f맞으면 true를 반환하도록 수정 된 코드c
Brian H.

누군가가 편집을 제안하기 위해 더 명확하게 느끼기를 원한다면 설명이별로 좋지 않습니다.
Brian H.

includes(f)대신 indexOf(f)>=02 바이트를 절약 할 수 있습니다 .
kamoroso94

대단한 일인지도 몰랐습니다 : D
Brian H.

1

Julia 0.6 , 139 바이트

(a,b)->(a==b)|any(map(x->all(in.((a,b),x))|all(in.((b,a),x)),zip("OCFILMPV16",split("CGS0368 G BEPR 017BDEFHKLMNOPRTVWXZ E W R A BEL 9"))))

온라인으로 사용해보십시오!

'O'에 맞는 문자를 그룹화하여 일부 바이트를 절약했습니다. 그러나 반전 된 입력을 테스트하면 너무 많은 코드가 사용됩니다 ...

설명:

  • zip(☐)일치하는 단일 문자 "OCFILMPV16"및 일치하는 문자열 에서 해당하는 단일 문자를 압축합니다 .
  • .in(☐) 예를 들어 요소 단위로 적용됩니다. (in(a,'O'),in(b,"OCFILMPV16"))
  • all(.in(☐)) 둘 다 발견되어야합니다 ...
  • |에 대한 하나 a,b또는 b,a...
  • any(map(☐)) 압축 목록의 하나 이상의 요소에 대해.

1

코 틀린 , 147 139 바이트

fun p(s:String)=setOf(s,s.reversed()).any{it.matches(Regex("(.)\\1|F[BEPR]|I[017BDEFHKLMNOPRTVWXZ]|1[BEL]|69|CG|LE|MW|PR|VA|O[CG69038S]"))}

온라인으로 사용해보십시오!

Try It Online 의 예 에는 모든 긍정적 조합과 일부 부정적인 조합에 대한 테스트 사례가 포함되어 있습니다.

reg.ex를 최적화하지 않았습니다. 너무 많아서 필요 이상으로 길어질 수 있습니다

편집 : reg.ex에 몇 바이트를 저장했습니다 .


1

C (gcc) , 211 바이트

첫 번째 시도. 매우 간단합니다.

i;char*c="CFGILMPSVW013689",*x[]={"GO","BEPR","O","017BDEFHKLMNOPRTVWXZ","E","W","R","O","A","M","O","BEL","O","9O","O","6O"};h(a,b){return(i=strchr(c,a)-c)>=0&&strchr(x[i],b);}f(a,b){return a==b|h(a,b)|h(b,a);}

온라인으로 사용해보십시오!


0

PHP , 204 바이트

내 코드에 몇 가지 버그와 사용되지 않은 변수가 있음을 찾기 위해 2 바이트 만 제거하기 위해 다시 캠백하기 때문에 -147 바이트! 내 코드는 훨씬 짧아졌습니다.

<?php $a=fgets(STDIN);for($w=0;$w<2;$w++){if(strpos(explode(',','GO,BEPR,O,017BDEFHKLMNOPRTVWXZ,E,W,R,O,A,M,O,BEL,O,9O,O,6O')[strpos(CFGILMPSVW013689,$a[0])],$a[1])!==false){echo"t";break;}$a=strrev($a);}

온라인으로 사용해보십시오!


0

루비, 140 바이트

->c,t{x='CFGILMPSVW013689'.chars.zip('GO BEPR O 017BDEFHKLMNOPRTVWXZ E W R O A M O BEL O 9O O 6O'.split).to_h;p x.key?(c)&&x[c].include?(t)}

python 3 답변과 거의 동일하지만 실행이 다릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.