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