Дано два рядки, знайдіть таблицю перекладу ( шифр заміни ) між ними, якщо переклад неможливий, виведіть помилково. Відповідь потрібно мінімізувати та створювати зліва направо. Перший символ, який потрібно перекласти між словами, повинен бути першим у таблиці перекладу. На додаток до цього, будь-який лист, який не перекладений (там же, де він був спочатку), НЕ повинен бути в таблиці перекладу.
Напевно, найлегше визначитись через приклади:
Дійсні справи
"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
Якщо у вас виникли питання щодо функціональності двох пар, які не є в списку, перейдіть до цієї реалізації.
Правила вводу / виводу
- Вхід може бути двома елементами або як два окремі входи.
- Вихід може бути як обмежений масив, так і новий рядок / простір, аналогічно тому, як я показав.
- Неправдивий вихід може бути 0, -1 або помилковим. Помилка / Порожній вихід також добре.
- Вам гарантовано, що
a
не буде рівнимb
і ні,a
іb
не буде порожнім. a
іb
є послідовностями літер лише для друку.
Коваджі
- Переклади повинні відбуватися зліва направо (див. Приклад 1).
- Ви не повинні виводити символи, які залишаються однаковими.
- Ваша програма може мати лише два рядки
a
таb
. - Кожен символ може використовуватися лише ОКНЕ з кожної сторони перекладу. Це те , що робить переклад з ,
snails
щобanimals
неможливо. - Рекурсивні заміни не повинні відбуватися. Приклад рекурсивної заміни:
"a1","22"->[a1,12]
де a спочатку замінюється на 1, тоді обидва результуючі 1 замінюються на 2. Це невірно, припустимо, що всі переклади відбуваються незалежно один від одного, тобто це хибність. Значення: "a1" з таблицею перекладу [a1,12] оцінює до 12 (не 22)