Я не проверял «песочницу» до публикации этого задания - похоже, что это предложение было предложено Cᴏɴᴏʀ O'Bʀɪᴇɴ .
С учетом целочисленного ввода напишите программу, которая печатает загадку «четыре - магическое число»
- Четыре магическое число
- Пять четыре и четыре магическое число
- Шесть - это три, и три - это пять, и пять - это четыре, и четыре - это магическое число.
- Одиннадцать - шесть, шесть - три, три - пять, пять - четыре, четыре - магическое число.
- Пятьсот - одиннадцать, одиннадцать - шесть, шесть - три, три - пять, пять - четыре, четыре - магическое число
Если вы уже знаете загадку или слишком ленивы, чтобы ее разгадать, стремясь узнать, что это за загадка, вот объяснение
Следующее число - это количество букв в предыдущем номере. Так, например, пять имеет четыре буквы, поэтому следующее число - четыре .
шесть имеет три буквы, поэтому следующее число - 3 , а три - пять букв, поэтому следующее число - 5 , а пять - четыре буквы, поэтому следующее число - 4.
Причина, по которой загадка заканчивается на четыре, состоит в том, что четыре имеют четыре буквы и четыре - это четыре, а четыре - это четыре, а четыре - это четыре ... (четыре - это магическое число)
Тестовые случаи
0 =>
Zero is four and four is the magic number
1 =>
One is three and three is five and five is four and four is the magic number
2 =>
Two is three and three is five and five is four and four is the magic number
3 =>
Three is five and five is four and four is the magic number
4 =>
Four is the magic number
5 =>
Five is four and four is the magic number
6 =>
Six is three and three is five and five is four and four is the magic number
7 =>
Seven is five and five is four and four is the magic number
8 =>
Eight is five and five is four and four is the magic number
9 =>
Nine is four and four is the magic number
10 =>
Ten is three and three is five and five is four and four is the magic number
17 =>
Seventeen is nine and nine is four and four is the magic number
100 =>
One Hundred is ten and ten is three and three is five and five is four and four is the magic number
142 =>
One Hundred Forty Two is eighteen and eighteen is eight and eight is five and five is four and four is the magic number
1,000 =>
One Thousand is eleven and eleven is six and six is three and three is five and five is four and four is the magic number
1,642 =>
One Thousand Six Hundred Forty Two is twenty nine and twenty nine is ten and ten is three and three is five and five is four and four is the magic number
70,000 =>
Seventy Thousand is fifteen and fifteen is seven and seven is five and five is four and four is the magic number
131,072 =>
One Hundred Thirty One Thousand Seventy Two is thirty seven and thirty seven is eleven and eleven is six and six is three and three is five and five is four and four is the magic number
999,999 =>
Nine Hundred Ninety Nine Thousand Nine Hundred Ninety Nine is fifty and fifty is five and five is four and four is the magic number
правила
- Входные данные могут быть взяты из функции
STDIN
или в качестве аргумента функции - На входе будет положительное число от 0 до 999 999
- Вход будет содержать только цифры (будет следовать регулярному выражению
^[0-9]+$
) - Входные данные могут быть приняты как целое число или строка
- При преобразовании в строку слова пробелы и дефисы не должны учитываться при подсчете (100 [Сто] - это 10 символов, а не 11. 1,742 [Одна тысяча семьсот сорок два] - это 31 символ, а не 36).
- При преобразовании в строку 100 должно быть сто, а не сто или сто, 1000 должно быть тысяча, а не тысяча или тысяча.
- При преобразовании в строку 142 должна быть сто сорок две, а не сто и сорок два
- Выходные данные нечувствительны к регистру и должны соответствовать формату « N - это K, а K - это M, а M - это ... и четыре - это магическое число» (если не введено значение 4, в этом случае на выходе просто должно быть «четыре это волшебное число ")
- Выходные данные могут использовать числа вместо букв («5 - это 4, а 4 - это магическое число» вместо «пять - это четыре, а четыре - это магическое число»), если ваша программа всегда соответствует
- Вывод может быть либо возвращаемым значением функции, либо распечатан в
STDOUT
- Применяются стандартные лазейки
- Это код-гольф , поэтому выигрывает самая короткая программа в байтах. Удачи!
бонус
-30 байт, если программа работает, когда ввод находится в диапазоне от -999,999 до 999,999.
Отрицательные числа при преобразовании в слова просто имеют «отрицательные» перед ними. Например -4
, «Негативная четверка», Негативная четверка - двенадцать, двенадцать - шесть, шесть - три, три - пять, пять - четыре, четыре - магическое число
-150 байт, если программа не использует встроенные функции для генерации строкового представления числа
Leaderboard
Это фрагмент стека, который генерирует как таблицу лидеров, так и обзор победителей по языкам.
Чтобы убедиться, что ваш ответ появляется, пожалуйста, начните свой ответ с заголовка, используя следующий шаблон уценки
## Language Name, N bytes
Где N - размер вашего сообщения в байтах
Если вы хотите включить в заголовок несколько чисел (например, пролистать старые оценки или включить флаги в счетчик байтов), просто убедитесь, что фактическая оценка является последней цифрой в заголовке.
## Language Name, <s>K</s> X + 2 = N bytes
Ответы:
Bash + общие утилиты (включая bsd-игры), 123 - 30 = 93 байта
К счастью, вывод утилиты bsd-games
number
- это почти то, что нам нужно. Все выходные числа записаны численно, а не словами, как указано в восьмом пункте:источник
C
263261 байт - 180 = 81Вдохновлен ответ от Коул Камерон . Я думал, что смогу добиться большего успеха без определения макроса. Хотя в конце концов мне это удалось, потребовалось некоторое сжатие, чтобы достичь!
Для этого требуется набор символов хоста с последовательными буквами (поэтому ASCII в порядке, но EBCDIC не будет работать). Это для пары таблиц поиска. Я выбрал
j
в качестве нулевого символа и воспользовался преимуществом необходимости двух поисков, чтобы я мог вычесть один из другого, а не вычитать свой ноль из обоих.Комментируемая версия:
Существует очевидное расширение для поддержки миллионов, заменив
f(n/1000,8)
наf(n/1000000,7)+f(n/1000%1000,8)
.Тестовый вывод
источник
Mathematica, 156 - 30 = 126 байт
Я просто удивлен, что это использует строки и не смешно долго.
источник
Swift 2 ,
408419 - 30 = 389 байтЯ бы смог избавиться от 176 байт, если бы Swift не был таким многословным с регулярными выражениями (без дефисов и пробелов) * бросает взгляд на Apple *
Это можно проверить на swiftstub.com, здесь
Я немного побежал за цикл, и получается, что
100003
число от 0 до 999999 имеет самый длинный строковый результат, который имеет 6 итераций, иUngolfed
источник
NSStringCompareOptions.RegularExpressionSearch
И я думал, что JSString.fromCharCode
были многословны. : Pstring.replace
. Свифт:String.stringByReplacingOccurrencesOfString
Haskell, 285 - 180 = 105 байт
На самом деле, нет встроенного для отображения номера. Я все еще недоволен счетом. Не стесняйтесь комментировать. Я буду экспериментировать дальше, хотя. Тем не менее, оценка лучше, чем оценка Свифта
использование
Объяснение.
m
достаточно тривиально, однако,c
нет.c
это функция для подсчета количества символов английского имени числа.источник
C 268 - 180 = 88 байт
Попробуй это здесь .
Ungolfed
источник
Java, 800 - 150 = 650 байтов
Де-golfed
источник
==0
на<1
. Итак:return P<1?_>0?d:e:P<R?f[P]+Q:P<Y?(f[R+(P/X)]+" "+a(P%X,0,e)).trim()+Q:P<Z?a(P/Y,0,O)+a(P%Y,0,e)+Q:a(P/Z,0," thousand ")+a((P/Y)%X,0,O)+a(P%Y,0,e)+Q;
( - 10 байт )QC, 265 - 30 - 150 = 85 байт
Тестирование
Ungolfed:
источник
JavaScript, 382 - 150 - 30 = 202 байта
Входные данные задаются в качестве параметра выражения немедленного вызова функции.
Тестовый ввод:
Де-golfed:
источник
Python 641-150 = 501 байт
По крайней мере, это не дольше, чем Java! Это основано на этом, за исключением использования строк.
РЕДАКТИРОВАТЬ : я забыл о 0 и что мне нужно сказать «5 это 4», а не перейти к «4 магическое число» - это добавило немного к счету.
Попробуй это здесь!
источник
i(5)
печатает4 is the magic number
вместо5 is 4 and 4 is the magic number
.Му,
182176/192188 байт - 30 = 146/158188-байтовая версия:
176-байтовая версия, зависящая от реализации :
Оба являются функциями.
источник
PHP, 168 - 30 = 138 байт
источник