Головоломка
Маленька загадка, яку я почув, коли навчався в середній школі, виглядала приблизно так ...
- Той, хто питає, попросить мене дати йому номер;
- Почувши число, допитувач повторював би його якусь трансформацію неодноразово (наприклад, він міг би сказати, що десять - це три ), поки врешті не дійшов до цифри 4 (в цей момент він закінчив би з чотирма - це магія ).
- Здається, будь-яке число зрештою перетворюється на чотири, незважаючи ні на що.
Метою було спробувати з’ясувати функцію перетворення, а потім мати можливість надійно спроектувати цю головоломку самостійно.
Рішення
Функція перетворення на будь-якому кроці повинна була
- Візьміть номер, про який йде мова,
- Підрахуйте кількість букв у поданні англійського слова, ігноруючи дефіс або пробіли або "і" (наприклад, "десять" містить 3 літери, "тридцять чотири" має 10 букв, "сто сорок три") містить 20 букв).
- Поверніть цю кількість літер.
Для всіх чисел, які я коли-небудь піклувався про тестування, це сходиться до 4. Оскільки в "чотири" також є чотири літери, тут буде нескінченний цикл; натомість це просто згадується як магія за домовленістю для завершення послідовності.
Змагання
Ваше завдання полягає у створенні шматка коду, який зчитує число від користувача, а потім друкує рядки, що відображають функцію перетворення, яка застосовується багаторазово, доки не буде досягнуто значення "чотири - це магія".
Зокрема:
- Рішення повинні бути повноцінними програмами самі по собі. Вони не можуть бути просто функціями, які приймають число - коефіцієнт на вході.
- Введення потрібно зчитувати зі стандартного вводу. (Конвеєр з "ехо" або використання перенаправлення вводу - це добре, оскільки це також йде від stdin)
- Введення має бути в цифровій формі.
- Для кожного застосування функції перетворення слід надрукувати рядок:,
a is b.
де a і b - числові форми чисел у перетворенні. - Потрібні повні зупинки (періоди)!
- Останній рядок повинна природно сказати,
4 is magic.
. - Код повинен видавати правильний вивід для всіх чисел від 0 до 99 .
Приклади:
> 4
4 is magic.
> 12
12 is 6.
6 is 3.
3 is 5.
5 is 4.
4 is magic.
> 42
42 is 8.
8 is 5.
5 is 4.
4 is magic.
> 0
0 is 4.
4 is magic.
> 99
99 is 10.
10 is 3.
3 is 5.
5 is 4.
4 is magic.
Переможцем є найкоротша подача за кількістю символів вихідного коду, що також є правильним .
БОНУС
Ви також можете спробувати написати версію коду, яка друкує АНГЛІЙСЬКІ НАЗВИ для чисел з кожним додатком функції перетворення. Початкове введення все ще є числовим, але рядки виводу повинні мати слово у вигляді числа.
(Подвійний бонус за малювання фігур за допомогою коду)
(EDIT) Деякі роз’яснення:
- Я дійсно хочу, щоб слово відображалося з обох сторін у всіх відповідних випадках, наприклад
Nine is four. Four is magic.
- Однак я не дбаю про капіталізацію. І мені байдуже, як ви розділяєте лексеми слів, хоча їх слід розділяти:
ninety-nine
це добре,ninety nine
це добре,ninetynine
це не добре.
Я розглядаю їх як окрему категорію для бонусного змагання щодо виклику, тому, якщо ви вирішите це зробити, не хвилюйтеся, що ваш код довший за числову версію.
Не соромтеся подавати одне рішення для кожної версії.