Ваш друг не слишком хорошо разбирается в компьютерах, так что в качестве практической шутки кто-то написал буквы (az) на своей клавиатуре. Когда он сел и попытался набрать свое имя, глядя на клавиатуру, он понял, что буквы зашифрованы и попросил вашей помощи.
Вы умны, так что вы знаете, что если он напечатает свое имя, а затем повторно напечатает то, что появляется на экране вместо своего имени, он в конечном итоге преуспеет, введя свое имя. Вы также любезны и переставляете ключи, но хотите знать, сколько ходов потребуется, чтобы добиться успеха.
Ваша задача - написать программу или функцию, которая при перемешивании букв и имени друга вычисляет количество ходов.
Входные данные:
- В качестве входных данных приводятся две строки в структуре, удобной для вашего языка.
- Первая строка - это список новых строчных букв в алфавитном порядке старых. (Первый символ - это тот, который находится в позиции
a
, последний - в позицииz
.) В строке всегда будут происходить некоторые изменения. - Вторая строка - это имя. Он может содержать любой печатный символ ascii, но перетасовываются только прописные и строчные буквы алфавита, если таковые имеются. Само имя не может быть перетасовано в al.
Выходные данные:
- Выходное значение представляет собой одно целое число, минимально необходимое число витков. Новая строка необязательна.
Примеры:
Ввод:
'abcfdeghijklmnopqrstuvwxyz' 'Mr. John Doe'
(d, e, f позиции изменены)
Вывод:
3
(Показанные имена: Mr. John Fod
=> Mr. John Eof
=> Mr. John Doe
)
Вход:
'nopqrstuvwxyzabcdefghijklm' 'Mr. John Doe'
( шифр ROT13 )
Вывод:
2
(Любое входное имя, содержащее буквы, будет 2
обходиться, чтобы создать оригинальное имя.)
Входные данные:
'aebcdjfghiqklmnopzrstuvwxy' 'John Doe'
Выход:
140
Это код-гольф, поэтому выигрывает самый короткий вход.
источник
aebcdjfghiqklmnopzrstuvwxy
(вывод 1260 дляMr John Doe
). Это максимально возможное значение - оно состоит из циклов порядка 4, 5, 7, 9 (и без измененийa
), и каждое имя, которое содержит хотя бы одну букву из каждого цикла, даст 1260. И я предполагаю, что в качестве входных данных взят сам алфавит или использование незатронутого имени также являются важными крайними случаями.EOF
совершенно потрясающий!Ответы:
Pyth, 16 байт
Попробуй это здесь.
Входные данные должны быть указаны в двух строках: имя и перестановка. Перестановка должна быть в кавычках. Имя может быть указано или без кавычек. Например:
Дает 140.
Объяснение:
источник
CJam,
31 27 2524 байтаПринимает вход в виде:
т.е. первая строка - алфавиты, вторая строка - имя.
Как это работает :
Попробуйте онлайн здесь
источник
Руби, 58
объяснение
Enumerable#find
(спасибо @Ventero!) ИString#tr!
заменяйте символы, пока заменяемое не совпадетString
с настоящим именем.источник
""+n
немного корочеn.dup
, и вы можете сохранить другой байт, творчески используяEnumerable#find
вместо явного счетчика:(1..1e4).find{t.tr!(...)==n}
n.downcase!
).A-Z
и+a.upcase
A-Z+a.upcase
иn.downcase!\n
имеют одинаковую длину :)CJam,
3231 байтПроверьте это здесь. Он принимает перестановку в первой строке и имя во второй строке ввода.
объяснение
источник
Пиф 26
Попробуйте это онлайн здесь.
Существует довольно много неприятных последствий, которые стоят этой программе в байтах, например, необходимость хранить G в K для использования в уменьшении, а также необходимость не использовать (не (J)) для запуска фильтра. Из-за этого я ожидаю, что это все еще можно сыграть в гольф.
Это программа, которая принимает данные как:
(Обратите внимание на отсутствие кавычек в первом аргументе)
Объяснение придет после сокрушительного истощения;)
источник
Haskell 131 байт
Позвоните
f
со строкой и именем перестановки, чтобы получить результатобъяснение
источник
GolfScript (33 байта)
Принимает ввод в виде двух (одинарных или двойных) строк в кавычках, разделенных любым количеством пробелов; например
Онлайн демо
рассечение
Транслитерации опираются на тот факт , что все символы затронуты (это
{'ABC'?'abc'=}%
с отсортированной строкойA$
замены'ABC'
и перестановкаA
замены'abc'
); более общие альтернативы не экономят достаточно, потому что фильтр к буквенным символам настолько дешев.Это также зависит от
-1$
доступа к нижней части стека, что является относительно редким трюком GS.источник