Твій друг не надто хороший з комп’ютерами, тому в якості практичного анекдоту хтось перебрав букви (аз) на його клавіатурі. Коли він сів і спробував набрати своє ім’я, дивлячись на клавіатуру, він зрозумів, що букви зашифровані, і попросив вашої допомоги.
Ви розумні, тож знаєте, що якщо він набере своє ім’я, а потім повторно повторить те, що з’являється на екрані замість свого імені, він зрештою вдасться ввести своє ім’я. Ви також добрі і переставляєте клавіші, але хочете знати, скільки поворотів пройде для досягнення успіху.
Ваше завдання - написати програму або функцію, яка з урахуванням перетасування букв та імені друга обчислює кількість витків.
Деталі введення:
- Дві рядки подаються як вхід у зручну для вашої мови структуру.
- Перший рядок - це список нових малих літер в алфавітному порядку старих. (Перший символ - це той, який знаходиться в положенні
a
, останній - в положенніz
.) У рядку завжди буде відбуватися деяка зміна. - Другий рядок - це ім'я. Він може містити будь-який символ для друку ascii, але тільки верхні та малі букви мають бути змішані, якщо такі є. Сама назва може не перетасуватись на ал.
Вихідні дані:
- Вихід - це ціле ціле число мінімально необхідних витків. Новий рядок необов’язковий.
Приклади:
Введення:
'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
Це код-гольф, тому найкоротший запис виграє.
EOF
абсолютно дивовижний!
aebcdjfghiqklmnopzrstuvwxy
(вихід 1260 дляMr John Doe
). Це максимально можливий варіант - він складається з циклів порядку 4, 5, 7, 9 (і без змінa
), і кожне ім'я, що містить хоча б одну літеру з кожного циклу, дасть 1260. І я думаю, якщо взяти сам алфавіт як вхідний або використання невпливового імені також є важливими крайніми випадками.