Так как я видел первый несколько лет назад, я всегда был покорен этим типом словесных часов, где время фактически прописано словами, подсвеченными или не значащими предложение.
Текст, отображаемый на этих часах, следующий.
IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK
Ваша задача написать такие рабочие часы. Слова загораются тогда и только тогда, когда они имеют отношение к печати текущего времени. В противном случае они загорелись. Слова «подсвечиваются» при печати и «подсвечиваются», когда их заменяет количество пробелов, равное длине слова.
Пример: если текущее время 17:23, напечатанный текст должен быть точно таким:
IT IS
TWENTY
FIVE MINUTES
PAST
FIVE
правила
- Напечатанное время - 12-часовой вариант, но без AM / PM.
- Округление выполняется только на основе минут (секунды абсолютно не имеют значения). Округление выполняется до ближайшего кратного 5. Таким образом, например, хотя 17:52:38 действительно ближе к 17:55, но поскольку секунды не имеют значения, 17:52 фактически округляется до 17:50, и напечатанный текст "ДЕСЯТЬ МИНУТ ДО ШЕСТИ" (с соответствующим интервалом). Таким образом, если
XX
кратно пяти,XX
будет использоваться с ЧЧ: (XX-2): 00 до ЧЧ: (XX + 2): 59. СловоMINUTES
должно появиться , еслиFIVE
,TEN
илиTWENTY
освещены в разделе минут (до «до» или «ПОСЛЕДНИЙ»). - Все нерелевантные слова заменяются на столько пробелов, сколько необходимо, чтобы текст находился в приведенном выше шаблоне. Задние пробелы могут быть обрезаны. Пробелы, относящиеся к сохранению текста в ожидаемой позиции, должны быть сохранены.
Задние линии также могут быть обрезаны. Соответствующие пустые строки все еще должны появиться. Пример:
IT IS TEN MINUTES PAST TWO
Не загорайтесь
TEN
в первой илиFIVE
третьей строке, когда эти значения относятся к часам.- Вы можете принять ввод. Если вы принимаете ввод, то вводом будет время для печати в любом допустимом формате (строка, список целых чисел, тип собственной поддержки вашего языка, ...), но никакие параметры не допускаются, если они не связаны ко времени для печати. Если вы не поддерживаете ввод, вы должны использовать текущее время. Если вы поддерживаете оба, это лучше, но нет бонуса;)
- Ваш код может быть программой, функцией, лямбда, но не фрагментом.
- Если ваш язык поддерживает печать каким-либо образом, он должен напечатать результат (в файле, на стандартном выводе, я не против). Если ваш язык никак не поддерживает печать, разрешается просто «вернуть» ожидаемый текст. Результат может быть либо прописным, либо строчным, а не сочетанием обоих.
- Применяются стандартные лазейки.
- Это код-гольф, поэтому выигрывает самый короткий код!
- В меру возможного, пожалуйста, предоставьте ссылку на онлайн переводчика вашего языка.
Контрольные примеры
Input: <no input> (the current local time is 19:20)
Output:
IT IS
TWENTY
MINUTES
PAST
SEVEN
Input: 13:15
Output: (empty line is being printed)
IT IS
QUARTER
PAST
ONE
Input: 13:58
Output: (rounding)
IT IS
TWO
O'CLOCK
Input: 14:30
Output: (half is always a edge-case)
IT IS HALF
PAST TWO
Input: 15:35
Output: (light up "TO")
IT IS
TWENTY
FIVE MINUTES TO
FOUR
Input: 10:00
Output: (do not use the TEN or FIVE on the first line when referring to the hours)
IT IS
TEN
O'CLOCK
Input: 12:00
Output: (O'CLOCK and a lot of empty lines)
IT IS
TWELVE O'CLOCK
Ответы:
PHP,
387384353352342323310306298293291 байтСпасибо @Christoph за игру в гольф вместе с его отличными результатами!
На его счету не менее 45 байт; 16 или более вдохновлены им.
Команда Marvel Up!
циклически просматривает данные и проверяет, находится ли текущий индекс в сгенерированной строке, которая содержит индексы слов, которые должны загореться (сопоставленные с буквами); добавляет перевод строки или пробел в зависимости от индекса.
Может выдавать уведомления, если вы не используете значение по умолчанию для
error_reporting
(22519).Проверьте это онлайн.
сломать
Гольфы :
$x/5+.5|0
на два байта корочеround($x/5)
.date(h)
один байт короче, чем присвоениеdate
результата переменной.$w<A
на три байта короче$w=="\n"
- убедитесь, что после разделителя нет пробелов!abs
сэкономил 8 байтов на слове минут.Использование подчеркивания в качестве первого индекса позволило включить его в альтернативы «оно есть»; и это сделало цитату для часов устаревшими.
1
значения на карте часов делает модуль устаревшим, а при дополнительном гольфе экономится 10 байтов. Вдохновленный @Christoph.str_pad("",strlen($w))
->$w^$w^" "
. (Кристоф)strtr
второй параметр не является строкой, он будет интерпретирован как код ascii. экономит 5 байтов.источник
$i++%3^($i<3)
до$i++%3^$i<3
. Я официально полностью впустую сейчас. Я сделаю перерыв, пока кто-нибудь не сравнится с нами. Это было действительно весело. Спасибо Титус за вашу командную работу!TI-Basic,
335334 байтаВ значительной степени идеально, так как калькуляторы TI-84 имеют 8x16 буквенных дисплеев, а это 8x15. Дата берется в качестве входных данных для поддержки вычислений, предшествующих TI-84, которые не имеют внутренних часов. Без аргументов,
Input
получает ввод по умолчанию вX
иY
, аналогичноPrompt X,Y
. Так чтоX
будьте часами (все>=0
будет работать правильно) иY
будьте минутами.Примечание 1: для TI-84 + вы можете заменить
Input
что-то вродеgetTime:Ans(1->X:getTime:Ans(2->Y
. Кроме того,int(Y/5-5.6
эквивалентноround(Y/5,0)-6
. И нет, в этом случаеint(
нельзя было поменять местамиiPart(
.Примечание 2: Это печатает входные данные очень хорошо, но по причинам, которые вы, вероятно, хотите
Pause
в конце программы, чтобы избежатьDone
сообщения после завершения программы.Редактировать: Количество байтов уменьшено из-за токенизации (см. Примечание к предыдущей ревизии), также исправлена ошибка благодаря @Neil. В-третьих, я обнаружил, что исправил ошибку, которая стоила бы 2 байта, но оптимизация фактически сэкономила 1 байт в целом, и я также понял, что получаю ввод, поэтому мне не нужно вызывать
getTime
(да?). Наконец, для тех, кто хочет подтвердить это количество байтов, есть только два байтаsub(
.источник
O'CLOCK
кода будет продолжаться и выводPAST
...x+(y>32) mod 12
если сравнение даст 1 или 0, как в TI-Basic.JavaScript (ES6),
291303295 байтПринимает ввод как два целых числа с синтаксисом карри
(h)(m)
Как это устроено
Все часы можно увидеть как 23 светодиода, которые либо включены, либо выключены. Итак, состояние часов - это 23-разрядное целое число.
Минут логика, нам необходимо реализовать для того, чтобы правильные слова не так просто , как можно было бы думать , на первый взгляд. Может существовать волшебная формула игры в гольф, но я пошел простым путем и решил просто жестко закодировать каждую возможную конфигурацию:
Контрольные примеры
Показать фрагмент кода
источник
Пакетный, 789 байт
Примечание. Пробел после
PAST
и 5 пробелов в каждой из следующих двух строк.источник
call:c
например)! Я, наверное, должен выучить какую-нибудь партию :)JavaScript,
567 564 551 542 529 527519 байтПоказать фрагмент кода
Я не знаю, можно ли считать часы и минуты аргументами. Вы сказали "список целых чисел". Это все еще считается?
Кстати, я впервые играю в гольф. Как вы думаете?
Изменить: Сохранение нескольких байтов путем деления минут. Спасибо, Оливье!
источник
c
в свою функцию. Я полагаю, что при этом не следует терять ни одного байта, но это делает его больше похожим на фрагмент, чем на функцию (по крайней мере, мне, может быть, гуру JS скажут иначе).JavaScript (ES6) 360
Функция с входными параметрами час (0..23) и минута (0..59).
Использование
alert
для вывода, так как это стандартная функция вывода в JavaScript, даже если это неудобно. (И это коротко)Тестовое примечание: для вашего спокойствия в тестовом фрагменте выходные данные оповещения перенаправляются на текст страницы
источник
i
? Я вижу, как вы получаете все непробельные группы («светодиоды»), и вы заменяете их пробельными символами в зависимости от условий, которые вы написали для каждой из них. Например,h-2
это ложно только тогдаh == 2
, когда , я полагаю, вы куда-то инвертируете это? Можете ли вы объяснить немного, как это работает? Возможно, как редактирование вашего ответа? Я был бы очень благодарен!i
ссылку на правильный, увеличивая его после каждого совпадения с регулярным выражением. Если это правда, вы заменяете соответствующую строку пробелами, иначе вы оставляете ее как есть. Я не понимаю одну вещь, хотя.replace()
использует возвращаемое значение указанной функции (функция стрелки в этом случае). Где вы возвращаете значение? Я просто вижу троичного оператора.(a,b)=>{ return a+b }
такой же как(a,b)=>a+b
Python 2,
466,460,449,452,459449 байтПоскольку это может быть функция, принимающая h и m как целые числа, мы можем сохранить несколько байтов. Попробуйте онлайн .
У меня было несколько ошибок (исправлено) с логикой для
TO
/PAST
противO'CLOCK
. Также сохранено несколько байтов дляenumerate
, изменяяimport
, и19<m<26
вместоm in [20,25]
. Сохранено еще 8 для работы в 5-минутных чанках чаще чем минуты. Род указал на еще несколько ошибок, которые стоили мне совсем немного, но я немного поправился с более эффективными заданиями и исправлением, которое работало в мою пользу.источник
==
h
print c
на последней линии,c
уже держитa[i]
должныйenumerate
print
добавляйте новую строку после каждого отпечатка, вы можете подавить его, добавив,
послеc
. Кроме того, он должен печатать пробелы, когда слово не печатается, вы можете исправить с помощью else в последнем ifelse:print' '*len(c),
Perl 6 ,
308296293 байтаПопробуйте онлайн!
объяснение
Основная структура выглядит следующим образом:
Выражение, исключенное, как
...|...|...|...
указано выше, представляет собой соединение целых чисел, представляющих индексы слов на основе 1, и состоит из следующего:источник
Python3, (569 байт)
Этот ответ требует времени в формате чч мм (целые числа, разделенные пробелами). Мне удалось напечатать '\ n', вдохновленный методом Криса. Спасибо, Крис! Любая помощь по сокращению кода приветствуется.
Попробуйте онлайн
источник
.split(',')
? Следует сохранить несколько.H,M=input()
где ввод H, M. В правилах допускается последовательность из двух целых чисел. Не уверен, что это работает так, как задумано в Python 3. Я все еще 2 парня :-)H,M=input()
не работал, как вы сомневались.Python 2 ,
443440 байтПопробуйте онлайн!
Возможно, он еще выиграет от игры в гольф. Ввод представляет собой список целых чисел, например, 7,23 = 7:23
источник
SimpleTemplate ,
737708 байтДа, многословие и отсутствие «настоящей» математики сильно повредили счету.
Это ожидает час и минуты как 1-й и 2-й параметр в классе.
Ungolfed:
Как запустить:
Запустите следующий код:
Готово!
источник
Java (OpenJDK 9) , 437 байт
Попробуйте онлайн!
Я думал, что я, наконец, дать шанс на мой вызов;)
источник
Perl 5 ,
487449 байтПопробуйте онлайн!
источник