두 개의 문자열이 주어지면, 둘 사이 의 변환 표 ( 대체 암호 )를 찾으십시오 . 변환이 불가능하면 false를 출력하십시오. 답을 최소화하고 왼쪽에서 오른쪽으로 만들어야합니다. 단어 사이에서 번역 될 첫 번째 문자는 번역 표에서 첫 번째 문자 여야합니다. 이 외에도 번역되지 않은 (원래와 같은 장소에있는) 문자는 번역 표에 없어야합니다.
아마도 예제를 통해 가장 쉽게 정의 할 수 있습니다.
유효한 사례
"bat", "sap" => ["bt","sp"]
순서에 주목하십시오. 출력은 ["tb","ps"]
이 챌린지에 유효하지 않습니다.
"sense", "12n12" => ["se","12"]
n
이 관계가 일대일 관계이기 때문에 어떻게 번역되지 않는지 주목하십시오 .
"rabid", "snail" => ["rabd","snal"]
i
이 관계가 일대일 관계이기 때문에 어떻게 번역되지 않는지 주목하십시오 .
"ass", "all" => ["s","l"]
A는 포함되지 않고 동일하게 유지 되며 패턴 일치 s
로 l
인해 매핑 될 수 있습니다 .
"3121212", "ABLBLBL" => ["312","ABL"]
패턴과 완벽하게 일치합니다.
허위 사례
"banana", "angular" => false
(같은 길이가 아니고 불가능합니다).
"animal", "snails" => false
(각 문자는 번역 양쪽에서 한 번만 사용할 수 있습니다).
"can","cnn" => false
(n은 번역에 내재적으로 사용되므로 n-> a로 번역 테이블을 정의하는 것은 유효하지 않습니다)
따라서 [aimal,sails]
잘못된 답변이며,이를 허위로 만듭니다.
"a1", "22" => false
"캐비티"를 참조하십시오. 이것은 허위로 표시됩니다. 때문에이 경우의 a
및 1
모두에 매핑 할 수 없습니다 2
. (각 문자는 번역 양쪽에서 한 번만 사용할 수 있습니다).
이 답변은 좋은 벤치 마크 인 것 같습니다 : /codegolf//a/116807/59376
나열되지 않은 두 단어 쌍의 기능에 대한 질문이있는 경우이 구현을 연기하십시오.
I / O 규칙
- 입력은 2 요소 배열 또는 2 개의 개별 입력일 수 있습니다.
- 출력은 배열 방식 또는 줄 바꿈 / 공백으로 구분할 수 있으며 표시 된 방식과 비슷합니다.
- 거짓 출력은 0, -1 또는 false 일 수 있습니다. 오류 / 빈 출력도 좋습니다.
- 당신은
a
같지 않으며 비어b
있지a
않을b
것입니다. a
그리고b
문자의 인쇄-ASCII 전용 시퀀스입니다.
경고
- 번역은 왼쪽에서 오른쪽으로 이루어져야합니다 (예 1 참조).
- 동일하게 유지되는 문자를 출력해서는 안됩니다.
- 귀하의 프로그램은 두 개의 문자열에 걸릴 수 있습니다
a
와b
. - 각 문자는 번역의 양쪽에서 한 번만 사용할 수 있습니다. 이것이 번역
snails
을animals
불가능 하게 만드는 것 입니다. - 재귀 교체가 발생하지 않아야합니다. 재귀 대체의 예 :
"a1","22"->[a1,12]
a가 먼저 1로 대체되고 결과로 생성 된 1이 모두 2로 대체됩니다. 이것은 정확하지 않습니다. 모든 번역이 서로 독립적으로 발생한다고 가정합니다. 이는 잘못된 것입니다. 의미 : [a1,12]의 번역 표가있는 "a1"은 12 (22 아님)로 평가됩니다.