Если даны две строки, найдите таблицу перевода ( подстановочный шифр ) между ними, если перевод невозможен, выведите 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)
источник
Ответы:
JavaScript (ES6), 128 байт
источник
ass
иall
, должно бытьs,l
.JavaScript (ES6),
108107105106 байтРедактировать : Исправлено для поддержки входов, таких как
"22" / "a1"
это должно быть ложным.Возвращает либо
0
массив двух строк.Отформатировано и прокомментировано
Контрольные примеры
Показать фрагмент кода
источник
f('22')('a1')
тоже должен быть ложным.PHP> = 7.1, 130 байт
18 байтов сохранено @Titus
Testcases
расширенный
PHP> = 7,1, 148 байт
выводит 0 для false. Вывод true как строка
Testcases
расширенный
PHP> = 7.1, 131 байт
Второй ответ можно замкнуть на это, если разрешены ассоциативные массивы
выводит 0 для false. Вывод true как ассоциативный массив вместо строки
Testcases
PHP> = 7.1, 227 байт
печатает 0 для ложных
Testcases
расширенный
источник
array_values()
внутриjoin()
совершенно бесполезен и может быть отброшен.a1 22 => false
контрольный пример. Кроме того, ваша первая программа не работает в онлайн-тестере.($p=$x[$i])==$o?:$k[$c[$p]=$o]=$p;
в цикле и$y==strtr($x,$c)
для первого теста.Желе , 18 байт
Безымянная монадическая ссылка (функция с одним входом) принимает список, который возвращает:
пустой список в случаях фальси; или
список, содержащий два списка символов в истинных случаях.
Попробуйте онлайн! (нижний колонтитул разделяет список пробелом, чтобы избежать печати закрашенного представления)
... или увидеть набор тестов .
Как?
источник
Сетчатка ,
194191185229225241 байтПопробуйте онлайн!
Принимает входные данные
;
отдельно. Выход также;
разделен. Ложные входы обозначены пустыми выходами.Я знаю, что это мучительно многословно, я все еще пытаюсь сократить байты. Большая часть этих байтов используется для удаления ложных входных данных.
Правки
Оказывается, у меня был существенный недостаток в моей программе. Это исправлено сейчас, но стоимостью более 40 байт.
Другая ошибка была обнаружена, когда моя программа не объявила ввод
a1;22
ложным, но я смог сохранить программу до 250 байт после ее исправленияобъяснение
(более подробное объяснение будет в ближайшее время)
Сначала мы должны проверить, если длина строк
a
иb
являются одинаковыми или нет. Если это не так, мы удаляем все.Дублируем ввод, чтобы сохранить его, пока мы проводим некоторое тестирование длины.
Теперь в цикле мы удаляем первый символ
a
и первый символb
до тех пор, пока одна из строк не станет пустой.Теперь есть возможности для «пространства образца».
;;abc
Обе строки имеют одинаковую длинуdef;;abc
a
длиннее чемb
;def;abc
b
длиннее чемa
Теперь нам нужно очистить ввод, если строки не имеют одинаковую длину (сценарии 2 и 3). Это то, что делает эта замена ниже. Он удаляет текст, который соответствует сценариям 2 и 3.
Это удаляет символы, которые не транслитерируются в строках
a
иb
.abc;1b2
=>ac;12
После этого мы должны удалить дубликаты символов.
sese;1212
=>se;12
, но это сохраняет входные данные, такие какaba;123
Наконец, мы удаляем ввод, если есть повторяющиеся символы, которые отображаются на разные символы, такие как
aba;123
илиa1;22
.И, наконец, удалите повторяющиеся символы.
источник
(?(1)(?!))
я узнал из вашего ответа :);
.Желе ,
2826 байтПопробуйте онлайн!
источник
Рубин, 133 байта
Попробуйте онлайн!
Более читабельно:
Просто для удовольствия, вот версия на 84 байта в Goruby, которая является Ruby, но с флагом гольфа, установленным при компиляции интерпретатора. Помимо прочего, он позволяет сокращать вызовы методов до их кратчайшего уникального идентификатора.
источник
Python 2 ,
198,193,189,182,179,175,169,165 байтПопробуйте онлайн!
-4 байта! спасибо mbomb007 за предложение использовать вкладку вместо пробела.
изменил формат ввода, снова благодаря mbomb007.
источник
Python 3.6,
211185181178 байтВыход с ошибкой для ложных результатов.
Это требует Python 3.6, который вы можете запустить в оболочке здесь .
Вы можете проверить это без правильного порядка вывода на TIO здесь . (TIO не имеет 3,6).
Ungolfed:
Если бы только порядок не имел значения ...
источник
a1,12
вернутьсяa1,12
вместоFalse
? В разделе «Предостережения» говорится, что «a1» с таблицей перевода [a1,12] оценивается в 12 .False
.1a 21
также было бы неправильно, поскольку oeder должен быть сохранен.a1,12
вместоa1,22
.Röda ,
108119 байтПопробуйте онлайн!
Это функция, которая берет два списка символов из потока и помещает два списка в поток.
Это могло бы быть сортировщиком, если бы мне разрешили возвращать пары.
Объяснение (устаревшее):
Вот решение для подчеркивания, которое не содержит переменных (114 байт):
Это много подчеркиваний.
источник
<>
?a() <> b()
такой же какinterleave([a()], [b()])
(или простоinterleave(a, b)
, еслиa
иb
являются массивами).a1 22 => false
контрольный пример. «Все переводы происходят независимо друг от друга, то есть это ложно».AWK, 140 байт
Использование: Поместите код в
FILE
затем:Входные строки должны быть разделены пробелами.
Вывод будет пустым, если они не пройдены, или 2 строки разделены пробелом.
источник
к, 28 байтов
Объяснение:
источник
APL (Dyalog) с AGL , 22 байта
Попробуйте онлайн!
{
...}
Анонимная функция:Если…
⍺⍵
аргументы⍳⍨¨
когда самоиндексируется (т.е. первые вхождения их элементов в себя)≡/
эквивалентны:
тогда:⍺(
...)⍵
Применить следующую неявную функцию к аргументам:,¨
объединить соответствующие элементы (ошибки при несовпадении длин)é
затем фильтр по (é
это просто примитивная функция/
)≠
где строки разные∪
уникальный (удалить дубликаты)↓⍉↑
транспонировать список пар в пары списков (горит, смешивать в таблицу, транспонировать таблицу, разбивать на списки)иначе ничего не делать
источник
↓⍉↑
все еще меня немного смущает.CJam, 38 байт
Вход и выход - это массивы в стеке.
источник
PHP (> = 7.1), 165 байт
печатает
0
для ложных, ассоциативный массив еще. Запустите-r
или протестируйте его онлайн .сломать
источник
Output can be as an array or ...
, так что я бы сказал да. Текущая версия PHP неявна для всех моих сообщений; но если я найду что-то важное для редактирования, я добавлю версию.array_unique($r)!=$r
есть в каждом случае,array_unique($r)<$r
я буду голосовать только за ваш пост. В данный момент я ищу объяснениеarray_unique($t)<$t
(пришлось изменить это, потомуcan
чтоcnn
он недействителен) работает, потому что сравнение массивов (в отличие от сравнения строк) сравнивает длины раньше всего.can
наcnn
стоил мне 17 Bytes Забудь мое предложение