Если даны две строки, найдите таблицу перевода ( подстановочный шифр ) между ними, если перевод невозможен, выведите false. Ответ должен быть свернут и создан слева направо. Первый символ для перевода между словами должен быть первым в таблице перевода. В дополнение к этому, любое письмо, которое не переведено (в том же месте, где оно было изначально), НЕ должно быть в таблице перевода.
Вероятно, наиболее легко определить с помощью примеров:
Допустимые случаи
"bat", "sap" => ["bt","sp"]
Обратите внимание на порядок, вывод ["tb","ps"]
не действителен для этой задачи.
"sense", "12n12" => ["se","12"]
Обратите внимание, как n
не переводится, потому что это отношение 1 к 1.
"rabid", "snail" => ["rabd","snal"]
Обратите внимание, как i
не переводится, потому что это отношение 1 к 1.
"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
Если у вас есть вопросы по поводу функциональности двух незарегистрированных пар слов, обратитесь к этой реализации.
Правила ввода / вывода
- Вход может быть в виде массива из 2 элементов или в виде 2 отдельных входов.
- Вывод может быть в виде массива или новой строки / пробела, аналогично тому, как я это показал.
- Ложный вывод может быть 0, -1 или ложным. Ошибка / пустой вывод тоже в порядке.
- Вам гарантировано, что
a
не будет равныхb
иa
ниb
пустых. a
иb
являются печатными последовательностями букв только для ASCII.
Предостережения
- Переводы должны выполняться слева направо, см. Пример 1.
- Вы не должны выводить символы, которые остаются прежними.
- Ваша программа может принимать только две строки
a
иb
. - Каждый символ может использоваться только ОДИН РАЗ на каждой стороне перевода. Это то, что делает перевод с
snails
наanimals
невозможно. - Рекурсивных замен быть не должно. Пример рекурсивной замены:
"a1","22"->[a1,12]
где a сначала заменяется на 1, затем оба результирующих 1 заменяются на 2. Это не правильно, предположим, что все переводы происходят независимо друг от друга, то есть это ложно. Значение: «a1» с таблицей перевода [a1,12] оценивается как 12 (не 22)