Всем Рождество, и вот соревнование по коду для игры в гольф. Вам нужно составить программу для распечатки подарка. В частности, слова "Счастливого Рождества". НО, есть загвоздка: эта программа должна работать, только если это 25 декабря. Если код запускается в любой другой день, то программа должна аварийно завершить работу.
Это Code-Golf, поэтому выигрывает ответ с наименьшим количеством байтов.
Счастливого Рождества!
Ответы:
Пайк, 21 байт
Попробуй это здесь!
Или 18 байтов неконкурентоспособны.
Точно так же, за исключением этого раздела:
Попробуй это здесь!
источник
30 * (10+1)
= 330, а не 325JavaScript,
555346 байтПримечание: это было проверено только в Google Chrome, программа может вести себя по-разному от браузера к браузеру (или от устройства к устройству)
2 байта сохранены благодаря @ ConorO'Brien
7 байтов сохранено благодаря @ETHProductions
Выход с,
Uncaught ReferenceError: a is not defined
если дата неDec 25
. Я не совсем уверен, если это считается сбойисточник
.slice(6,10)=="c 25"
?c
(Oct
подходит близко, но все еще не удовлетворяет регулярному выражению). Спасибо за совет!Date()
полностью зависит от реализации. Например, я ожидаю, что это будет зависеть от языка и местоположения машины.Python 3,
6663 байтаБлагодаря идеям из ответов JavaScript / ES здесь мне удалось сжать несколько байтов. Индексируйте словарь - несуществующие ключи будут вызывать
KeyError
. Следующий код работает в местном часовом поясеВыходной формат для
ctime
не зависит от локали - формат всегда ~'Sun Dec 25 19:23:05 2016'
. Поскольку только в декабре заканчивается трехбуквенное сокращениеc
, его можно использовать'c 25'in time.ctime()
здесь.Предыдущая версия:
Это работает в часовом поясе UTC. Для местного часового пояса требуется еще
s/gm/local
3 байта. Для Python 2 можно удалить круглые скобки из-print
за 65 байтов.Конструкция выбрасывает
KeyError
на другие даты:источник
import time;print{'2512':'Merry Christmas'}[time.strftime("%d%m")]
и пометите его как Python 2, он все равно будет 66 байтов и вылетает с KeyError в даты, отличные от 25 декабря1:3
, я случайно скопировал свой тестовый кодgmtime()
идею для моего ответа. Надеюсь, вы не возражаете :-)PHP,
3938 байт, не конкурирует (не вылетает)или
или
источник
date(Lz)%1001-358
? : D""
в первом коде, который экономит 2 байта. Если бы не было чертовски високосных лет, вы могли бы сэкономить 2 байта больше, заменивmd
наz
и1225
по количеству день года 25 декабря.eval((date(md)^TQZZ).'"Merry Christmas";');
(43 байта)1
. Это напечатало бы результат вычисления. и0104-1225
1121.Python 2 ,
686765 байт-1 благодаря @muddyfish
Спасибо @AnttiHaapala за идею, которая спасла еще одну пару.
Попробуйте онлайн!
Выдает ошибку IndexEr, если не 25 декабря
Неконкурентная версия для 59 байт, так как она работает только для високосных лет (использует день года, который в этом году равен 360, а в високосных - 361)
источник
gmtime()
чтобы сбрить пару. Я должен признать, я хотел бы, чтобы было больше, что я мог сделать с идеей дня года, хотя.R,
52 6158 байтЕсли текущая дата не 25 декабря, возвращается ошибка, поскольку третий аргумент не передается
if
.Редактировать: Исправлена глупая ошибка
источник
Мой первый раз здесь ... Начатый с лучшим языком для этой работы:
Java,
200188байт (благодаря @Daniel Grey), 186 байт, удаляющих «ln» из печати.Попробуй это здесь!
источник
Calendar
для*
и сохранить несколько байтов. Вы также можете сократить имяargs
параметра в основном методе, я думаю ...MATL ,
3433 байтаЭто работает в текущей версии (19.7.0) языка. Чтобы вызвать ошибку, следующий код использует тот факт, что логарифм строки дает ошибку (это может измениться в будущих версиях).
Попробуйте онлайн!
объяснение
источник
QBIC , 48 байтов
Объяснение:
Это предполагает американскую
MM-DD
запись даты. Это было бы короче, если бы я наконец сделал функцию Substring в QBIC.источник
05AB1E ,
3221 байтСохранено 11 байт благодаря сжатию строк Аднана :).
объяснение
Попробуйте онлайн!
Сначала я сделал то, что пришло в голову, так что, возможно, для этого найдутся лучшие подходы. Но PPCG заслуживает Счастливого Рождества и в 05AB1E;).
источник
x
это сокращение от дубликатов и двойных :).C # / CS Script
10610099 байт99-байтовое решение
Попробуй это здесь!
100-байтовое решение (предпочитаю это ... немного другое)
Разъяснение:
DateTime.Now.AddDays(7).DayOfYear==1
на один байт короче,DateTime.Now.ToString("ddMM")=="2512"
но на 1 байт длиннееDateTime.Now.ToString("dM")=="2512"
источник
$"{DateTime.Now:dM}"=="2512"
.dM
неоднозначно, но не для "2512".$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":1/1-1+""
55 байт) =)int i
и не справедливо1/0
?$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":"".Remove(1)
(59 байт)C # / CS Script, 96 байт, в основном плагиат от Erresen
Удаляет
int i
декларацию в пользу жесткого кодирования деления. Я бы оставил это как комментарий, но у меня нет репутации.источник
утилиты bash + Unix,
514947 байт* Спасибо @ KenY-N за указание на то, что кавычки в эхе могут быть удалены, и @IporSircer за уменьшение размера условия на 2 байта.
источник
bash: ${}: bad substitution
ошибку. Также вы можете сбросить цитаты с Рождеством, чтобы сохранить два байта. Кроме того,[ `date +%m%d` = 1225 ]&&echo Merry Christmas
у меня работает, равный моим 45 байтов .${}
с!-
меня бить на один байт. Я буду голосовать за тебя, когда ты выиграешь.Groovy, 57 байт
Сбои в даты, отличные от 25.12. с
groovy.lang.MissingPropertyException
потому чтоb
не определено.источник
С накоплением , 42 байта
Попробуй это здесь!
Это создает одноэлементный массив, содержащий именно
'Merry Christmas!'
. После этого он помещает дату в строку с месяцем, за которым следует день. Он проверяет равенство с'1225'
(Рождество), инвертирует его¬
, затем получает этот член из предыдущего массива. Если это не Рождество, это приведет к ошибке индексации. В противном случае он печатаетMerry Christmas
. (Измените дату в строке, чтобы увидеть, как она работает в другие дни.)источник
Пакетный, 66 байт
Конечный символ новой строки важен, так как он приводит
if
к сбою оператора. Возможно, вам придется настроить проверку даты в соответствии с вашим локальным форматом даты.источник
Python 2,
69 7775 или7270 байтЕсли это не имеет значения, если он выходит с ошибкой, когда это Рождество, то:
РЕДАКТИРОВАТЬ:
Спасибо @ Flp.Tkc за указание на то, что мне нужно поднять ошибку
-2 байта из @Max для указания на удаление двоеточий из функции strftime
источник
CJam, 28
Попробуйте онлайн
Объяснение:
источник
C # .NET,
180172171 байтСохранено 8 байт благодаря Kritixi Lithos
Сохранено 1 байт благодаря Kritixi Lithos, опять же;)
Альтернативный, негольфированный вариант:
источник
NotChristmasException
только в негольфированном варианте.if(d.Day==25&&d.Month>11)Console.Write(...);else throw new Exception()
Обратите внимание, если заявление и удаление скобок вокругConsole.Write
и заменитьreturn
наelse
. Кроме того,var d=DateTime.Now
вы можете избавиться от броска исключения, возможно,args[-1];
после переименования аргументов вa
soa[-1];
(это не идентично делению на нули, используемые в других местах)Mathematica, 46 байтов
источник
Now
экономит 2 байта большеToday
Quit[]
или1/0
должно быть достаточно.Common Lisp, 140
Сбой с неопределенной функцией, если дата не верна.
источник
awk, 29 байт (+ длина ("веселое рождество"))
Запуск это:
Приветствие сезона передается по трубопроводу
awk
.strftime
возвращает месяц + день (например1226
), и если он совпадает,1225
$0
запись выводится. Результат сравнения1225==1226
помещается вv
переменную, которая используется для деления 1 в случае неудачного сравнения дат.источник
Хаскелл, 116
Сбой с «Неисчерпывающими шаблонами в функции f», если это не Рождество.
К сожалению, нет функции, которая позволяет вам сразу же получать время в удобном формате, поэтому большая часть этого - конвертация форматов даты.
источник
C #,
122104 байта18 байтов сохранено благодаря @raznagul
Он добавляет 7 дней к текущему дню и проверяет, является ли это первым днем года, если да, он отображает «Счастливого Рождества», в противном случае он делится на ноль.
источник
return
не обязательно. Используйтеi
вместо()
.Рубин, 69 байт
Работает в 2016 году. Не делает различий между нормальными и високосными годами, возможно, потребуется скорректировать для не високосных лет.
источник
ForceLang, 180 байт
(Помните, что
datetime.toDateString
это зависит от локали, поэтому это может не работать в зависимости от вашей локали)источник
C #, 90 байт
Выдает IndexOutOfRangeException, если это не Рождество.
Попробуй это здесь!
источник
командная строка bash,
454849 48 байтАналогичен Митчеллу Спектору , но используется
grep
в режиме без вывода сообщений для проверки на совпадение, затем&&
гарантирует, что он печатает только при успехе, и||
заставляет его просматривать историю!-
, что дает мне следующее:И это останавливает выполнение, как
!- ; echo foo
демонстрирует. Вbash
документации говорится, что это!-n
относится к текущей команде минусn
, поэтому, возможно, она интерпретируется как!-0
, которая выдает идентичное (и не локализованное) сообщение об ошибке.источник
;
instead of||
.