Головоломка
Маленькая головоломка, которую я услышал, когда учился в старшей школе, выглядела примерно так ...
- Спрашивающий просил меня дать ему номер;
- Услышав число, вопрошающий неоднократно производил на нем некую трансформацию (например, он мог сказать, что десять - это три ), пока, в конце концов, не достигал числа 4 (в этот момент он закончил с четырьмя - это магия ).
- Кажется, что любое число в конце концов превратится в четыре, несмотря ни на что.
Цель состояла в том, чтобы попытаться вычислить функцию трансформации, а затем самому надежно проанализировать эту головоломку.
Решение
Функция преобразования на любом этапе заключалась в том, чтобы
- Возьмите номер, о котором идет речь,
- Подсчитайте количество букв в его представлении английского слова, игнорируя дефис, пробелы или «и» (например, «десять» состоит из 3 букв, «тридцать четыре» - из 10 букв, «сто сорок три». в нем 20 букв).
- Верните это количество букв.
Для всех чисел, которые мне когда-либо приходилось проверять, это сходится к 4. Поскольку «четыре» также содержит четыре буквы, здесь будет бесконечный цикл; вместо этого по соглашению это просто называется магией завершения последовательности.
Соревнование
Ваша задача состоит в том, чтобы создать фрагмент кода, который будет считывать число от пользователя, а затем печатать строки, показывающие многократно применяемую функцию преобразования, пока не будет достигнуто выражение «четыре - это волшебство».
В частности:
- Решения должны быть законченными программами сами по себе. Они не могут быть просто функциями, которые принимают на вход числовой фактор.
- Ввод должен быть прочитан из стандартного ввода. (Канал из "echo" или использование перенаправления ввода нормально, поскольку это также идет из стандартного ввода)
- Ввод должен быть в числовой форме.
- Для каждого применения функции преобразования должна быть напечатана строка:,
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.
Победителем становится самая короткая заявка по количеству символов в исходном коде, что тоже верно .
БОНУС
Вы также можете попробовать написать версию кода, которая выводит АНГЛИЙСКИЕ ИМЕНА для чисел при каждом применении функции преобразования. Исходный ввод по-прежнему числовой, но строки вывода должны иметь форму слова числа.
(Двойной бонус за рисование фигур вашим кодом)
(РЕДАКТИРОВАТЬ) Некоторые пояснения:
- Я хочу, чтобы слово появлялось с обеих сторон во всех применимых случаях, например
Nine is four. Four is magic.
- Однако меня не волнует капитализация. И меня не волнует, как вы разделяете токены слова, хотя они должны быть разделены:
ninety-nine
хорошо,ninety nine
хорошо,ninetynine
не хорошо.
Я рассматриваю их как отдельную категорию для бонусных соревнований в отношении задачи, поэтому, если вы пойдете на это, не беспокойтесь о том, что ваш код будет длиннее, чем числовая версия.
Не стесняйтесь отправлять по одному решению для каждой версии.