Вы космический турист на своем пути на планету Флооптония! Полет займет еще 47,315 лет, поэтому, чтобы скоротать время до криогенного замерзания, вы решили написать программу, которая поможет вам понять флоптонский календарь.
Вот 208-дневный Флооптонский календарь:
Month Days Input Range
Qupu 22 [0-22)
Blinkorp 17 [22-39)
Paas 24 [39-63)
Karpasus 17 [63-80)
Floopdoor 1 [80]
Dumaflop 28 [81-109)
Lindilo 32 [109-141)
Fwup 67 [141-208)
Вызов
Ваша программа, учитывая целочисленный день в году (диапазон [0-208)
), должна выводить соответствующий день месяца и название месяца (например 13 Dumaflop
).
Однако есть исключение: Floopdoor - это особое время для Flooptonians, которое, очевидно, заслуживает отдельной страницы календаря. По этой причине, Floopdoor не записывается с днем (то есть, вывод Floopdoor
не 1 Floopdoor
).
Тестовые случаи
0 => 1 Qupu
32 => 11 Blinkorp
62 => 24 Paas
77 => 15 Karpasus
80 => Floopdoor
99 => 19 Dumaflop
128 => 20 Lindilo
207 => 67 Fwup
правила
- Вы должны написать полную программу.
- Вы можете предположить, что ввод всегда действителен.
- Ваш вывод может содержать завершающий символ новой строки, но в противном случае он не должен содержать лишних символов. Случай также должен соответствовать приведенным примерам.
- Вы можете использовать функции даты / времени.
- Длина кода измеряется в байтах.
o
, а на других экземплярах имени нет.Ответы:
Pyth -
1051039088 байтИспользует базовое преобразование. Две простые таблицы поиска, одна для имен и одна для дат начала, и троичная в конце для Floopdoor.
Сжимает строку не как базу 128, а как базу 23. Сначала она переводит ее в индексы алфавита. Для этого требуется разделитель,
c
который не указан ни в одном из названий месяцев. Затем он кодирует это в основание десять из числа 23 основания (наибольшее значение, которое появилосьw
), а затем преобразует в основание 256.Даты начала - это их кодовые точки в юникоде, без базового преобразования.
Попробуйте это онлайн здесь .
Тестовый пакет .
источник
Python 3,
159156152151150148 байтОбъект bytes в
zip
содержит непечатаемые символы:(Спасибо @xnor за предложение
for/zip
цикла для -3 байтов)источник
b
напрямую с помощьюfor
вместо, с чем-то вродеfor c in b"...":i+=n>0;n-=c
.n
чтобы тоже перестать падать. Все еще должно быть возможно с чем-то вроде,x=n>c;n-=c*x;i+=x
но не знаю, стоит ли это того.Пит 2125 байт
Это ни в коем случае не самый короткий, но это красиво и красочно ...
Каждый пиксель размещается вручную. Чтобы запустить его, перейдите сюда в FireFox (Chrome не будет работать) и загрузите его с шириной кодека 1 (он будет выглядеть черным, не волнуйтесь), введите число и нажмите кнопку запуска!
Малая программа:
Увеличено (ширина Codel 10):
источник
dead chex
добавляет к количеству байтов?Пит
178156153147 байтПостоянная ссылка
Второй в истории гольф, любая обратная связь с Питом будет очень полезна.
объяснение
источник
J=...
в троичное состояние.CJam,
989693 байтаВыше приведен обратимый hexdump, так как исходный код содержит непечатаемые символы.
Большинство непечатаемых символов не являются проблемой для онлайн-переводчика, но нулевой байт в первой строке является прерывателем сделки.
За счет одного байта мы можем исправить это, добавив 1 к входу и 1 к каждой точке кода первой строки. Вы можете попробовать эту версию в интерпретаторе CJam .
Если постоянная ссылка не работает в вашем браузере, вы можете скопировать код из этой вставки .
Контрольные примеры
Как это работает
источник
SWI-Пролог,
237232213 байтПри этом мы используем механизм поиска с возвратом Пролога повторно обратиться
nth1/3
к спискуL
, чтобы получить первый элементLastDay+1:MonthName
из ,L
для которогоX < LastDay+1
имеет место. Затем мы ищем месяц непосредственно перед этим в списке, чтобы оценить день месяца.источник
Q,
134146 байтвторой срез - программа (146 байт)
first cut - функция (134 байта)
тестирование
источник
Юлия,
231216184175 байтовЭто читает строку из STDIN и преобразует ее в целое число, находит первый элемент обращенного списка дней начала месяца, где ввод больше или равен началу, а затем печатает соответственно.
источник
Swift 1.2, 256 байт
Для запуска поместите один код в
.swift
файл и запустите его, используяswift <filename> <inputNumber>
источник
Ява,
357339 байтЭто не самый эффективный, но мне нравится, как это работает. Он создает весь календарь Flooptonia и затем ищет, какая дата число.
Ввод, вывод:
77 --> 15 Karpasus 80 --> Floopdoor
Разметка и табуляция:
источник
Джава,
275269266257256252246244243 байтаотформатирован:
Интересно, что это на несколько байтов короче
источник
JavaScript использует ES6
171164163 байтаЯ не лучший программист JavaScript, но я старался изо всех сил и получил следующий код
Чтобы увидеть результат, вам нужно сослаться на приведенный выше код в HTML-файл и использовать аналогично приведенному ниже коду
В приведенном выше коде файл fp.js содержит код javascript.
Объединенный код HTML и JavaScript с отступом
Редактировать:
Я хотел бы поблагодарить Vihan за помощь в удалении оператора return и уменьшении моего кода на 17 байт.
@ipi, спасибо, что помог мне сэкономить 7 байт
источник
"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)
и сэкономить 7 байт.You must write a complete program
Я думаю, что это должно выполняться в одиночку, возможно, вам придется использовать что-то вроде prompt ().Python 2, 168 байт
Это обрабатывает день
80
внутренне как18 Karpasus
, но затем игнорирует его, когда вызывается для печати. Кроме того,input()
функция Python 2 (в отличие отraw_input()
) была удобна здесь.источник
Perl 5, 140
Требуется запуск через
perl -E
:Тестовый вывод (украденный тестовый код из @Dennis):
источник
Haskell,
171167 байтПрограмма читает входные данные из стандартного ввода, которые не должны заканчиваться на NL. Завершите ввод с помощью EOF / ^ D или используйте что-то вроде
echo -n 80 | ./what-day-is-it
. (Некоторыеecho
не понимают-n
переключения и по умолчанию пропускают NL).Как это работает:
main
функция читает входные данные, преобразует их вInteger
и вызывает,f
который возвращает литералFloopdoor
в случае ввода80
или создает список всех возможных дат, т. Е.["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]
Из которого она выбираетn
элемент th. Я делаюKarpasus
это на один день дольше.18 Karpasus
находится в позиции80
и исправляет отсутствующиеFloopdoor
в списке.Изменить: @MtnViewMark был идея
18 Karpasus
трюк и сохранил 4 байта.источник
,1
и `x` - так как 80 будет поймано совпадением шаблона.Swift 2.0, 220 байт
Ничего умного, только фильтры из коллекции кортежей ...
Отредактировано, чтобы исправить ошибку, убрал пробел
источник
JavaScript (ES6 на Node.js), 196 байт
Принимает один аргумент командной строки:
демонстрация
Поскольку
process.argv
в браузере нет аргумента командной строки ( ), код во фрагменте был помещен в функцию, которая принимает аргумент:источник
Swift 2.0,
215204Это полная программа, которая просит пользователя ввести число в STDIN.
источник
Matlab, 187 байт
Расширенная версия:
Читает строку из консоли (
stdin
), находит первый элемент обращенного списка дней начала месяца, где входные данные больше или равны элементу массива, а затем печатает соответственно.Это почти идентично
Julia
ответу, за исключением этапа отображения. ( Мы не можем победить их троичного оператора, недоступного в Matlab ). Чтобы придумать необходимость явного полногоif
утверждения, мы используем небольшую хитрость ( Backspaceсимвол в формате печати), чтобы «стереть» число 1 для особого дня / месяца.Floopdoor
В сотрудничестве с участниками чата Matlab и Octave .
источник
Javascript ES5 использует 168 байт
Ungolfed:
источник
C 241 байт
Ничего особенного. Мог бы побрить 27 байт, если бы это требовало полной программы.
источник