Вдохновленный тем, что у нас был модульный тест, который не удался только по воскресеньям , напишите программу или функцию, которая ничего не делает, кроме как выдает ошибку, когда наступает воскресенье, и завершите работу в любой другой день.
Правила:
- Не использовать ввод или показывать вывод с помощью обычных методов ввода-вывода , кроме как для печати в STDERR или эквивалент вашего языка. Вам разрешено печатать в STDOUT, если это побочный продукт вашей ошибки.
- Функция может возвращать значение не по воскресеньям, если она ничего не печатает
- Ваша программа может использовать воскресенье из любого часового пояса или местного часового пояса, если это не противоречит.
- Ошибка - это то, что приводит к аварийному завершению программы , например, ошибка деления на ноль или использование неинициализированной переменной. Это означает, что если какой-либо код будет добавлен после той части, которая содержит ошибки, он не будет выполнен в воскресенье.
- Вы также можете использовать операторы, которые вручную создают ошибку, эквивалентную Python
raise
. - Это включает ошибки времени выполнения, синтаксические ошибки и ошибки при компиляции (удачи в этом!)
- Вы также можете использовать операторы, которые вручную создают ошибку, эквивалентную Python
- На ошибке должен быть какой-то признак, который отличает ее от отсутствия ошибки
- Это код-гольф , поэтому выигрывает самый короткий счет на каждом языке!
Я буду ждать до воскресенья, чтобы проверить ответы;)
code-golf
date
error-message
Джо Кинг
источник
источник
print "error"
ошибки? Добавленный абзац ничего не проясняет.Ответы:
Bash + coreutils,
1514 байтПопробуйте онлайн!
источник
PHP 7, 12 байт
В PHP 7 он генерирует исключение типа
DivisionByZero
по воскресеньям. То же самое происходит, если он интерпретируется с использованием HHVM .В PHP 5 он отображает предупреждение (включено
stderr
) по воскресеньям:В любой версии PHP ничего не отображается в другие дни недели.
Запустите с помощью CLI:
или попробуйте онлайн!
Еще два байта может быть сжат отгонкой кавычки (
1%date(w);
) , но это вызывает уведомление (которое может быть подавлено правильно установитьerror_reporting = E_ALL & ~E_NOTICE
вphp.ini
).источник
1%date("w");echo "Alive!"
, он остановится в PHP7 + и HHVM, но не во всех других версиях, начиная с PHP 4.PHP, 15 байт
Предполагает настройки по умолчанию .
Выходной по воскресеньям
Попробуйте онлайн!
источник
||\n
вместо?:\n
.Ява 8,
694334 байта-26 байт благодаря @ OlivierGrégoire .
-9 байт благодаря @Neil .
Объяснение:
Попробуй это здесь.
v->{...}
( неиспользуемыйVoid
null
параметр ) на один байт короче()->{...}
(без параметра).new java.util.Date().getDay()
вернет 0-6 для воскресенья-субботы, поэтому1/...
выдаетjava.lang.ArithmeticException: / by zero
ошибку, если значение равно 0, что происходит только по воскресеньям.источник
v->{int i=1/new java.util.Date().getDay();}
(43 байта).java.util.Date()
у меня есть метод для определения дня недели ... И даже 0 для воскресенья ... Не знаю, как я это пропустил. : SPython 3 , 33 байта
Попробуйте онлайн!
Python 3 , 50 байт
Попробуйте онлайн!
Сохранено ~ 3 байта благодаря Роду .
источник
"Su"in time.ctime()>q
(я редактировал с этим)?"Su"in time.ctime()
проверяет, является ли текущий день воскресеньем. Если это неверно,>q
деталь вообще не оценивается и все выходит гладко. Но если это так, то вычисляется вторая часть неравенства, и, посколькуq
она не определена, будет выброшено aNameError
.("Su" in time.ctime()) and (time.ctime() > q)
.Pyth ,
87 байтовПопробуйте онлайн!
объяснение
источник
1.0
не генерируется ошибкой ). ФП прямо сказал, что этого не позволяют. Вы можете исправить это, добавив в код один пробелHaskell + Data.Dates , 55 байтов
Попробуйте онлайн!
Здесь используется тот факт, что воскресенье - последний день недели.
dateWeekDay
возвращает день недели какWeekDay
тип, который просто определяется какWeekDay
является экземпляромEnum
, таким образом, мы можем использоватьsucc
иpred
получить преемника или предшественника дня недели, например,succ Monday
доходностиTuesday
.Тем не менее,
Sunday
это последняя запись enum, поэтому вызовsucc Sunday
приводит к следующей ошибке:Редактировать 1: Спасибо Ними за -3 байта!
Редактировать 2: -11 байт теперь, когда функции разрешены.
Полная программа:
8881746966 байтПопробуйте онлайн!
pure
необходимо поднять получившийсяWeekDay
обратно в монаду IO. Тем не менее, Haskell видит, что это значение никак не выводится программой, так что ленивое выражение не вычисляется, поэтому даже по воскресеньям программа не завершится с ошибкой. Вот почему$!
это необходимо, что вызывает оценку, даже если Хаскель обычно не оценивает выражение.Предыдущий подход с
Data.Time
:127124 байтовПопробуйте онлайн! Это впечатляющий импорт. Перейдите,
d<7
например,d/=5
для проверки неудачи в пятницу. Сбой за исключением следующего:Non-exhaustive patterns in function c
.источник
main=pure$!succ.dateWeekDay<$>getCurrentDateTime
, И, поскольку функции разрешены, вы можете удалитьmain=
.No using input or showing output through the usual IO methods
правила. Насколько я вижу, использование функции может привести к выводу данных, не относящихся к воскресеньям, даже если оно заключено в IO-действие.05AB1E ,
4544 байтаПоскольку 05AB1E не имеет встроенной функции для определения дня недели, я использовал правило Целлера для его вычисления.
Выводит новую строку в stderr в случае воскресенья (это можно увидеть в представлении отладки на TIO)
Попробуйте онлайн!
объяснение
Общая формула используется
DoW = d + [(13*(m+1))/5] + y + [y/4] + [c/4] - 2*c
где
DoW=day of week
,d=day
,m=month
,y=last 2 digits of year
,c=century
и , и выражение в скобках ([]
) округляется вниз.Каждый месяц, использованный в формуле, соответствует номеру, где,
Jan=13,Feb=14,Mar=3,...,Dec=12
поскольку у нас есть текущий месяц в более распространенном формате,
Jan=1,...,Dec=12
мы конвертируем месяц, используя формулуm = (m0 + 11) % 14 + 1
Как побочный продукт марта, являющегося первым месяцем, январь и февраль относятся к предыдущему году, поэтому расчет для определения
y
становитсяy = (year - (m0 < 3)) % 100
Окончательное значение, которое
DoW
мы получаем, - это int, где0=Sat,1=Sun,...,6=Fri
.Теперь мы можем явно выдать ошибку, если результат верен.
источник
JavaScript, 23 байта
Полная программа.
Переменная
k
не должна быть определена.JavaScript, 20 байт, Рик Хичкок
JavaScript, 19 байт по апсиллерам
источник
_=>
; без этого это фрагмент, который не разрешен по умолчанию. 2) Выводитсяfalse
через день, когда ничего не выводится./Su/.test(Date())&&k
для 20 байтов.new Date
версия 25 байт(new Date/864e5%7|0)-3||p
match
вместо этого:Date().match`Su`&&k
VBA / VBScript,
2220 байтовСохранено 2 байта благодаря Тейлор Скотт.
Это должно быть запущено в Immediate Window.
Weekday()
возвращает 1 (воскресенье) - 7 (суббота), поэтому это создает ошибку деления на ноль в воскресенье. В противном случае, нет вывода.источник
?1/(Weekday(Now)-1)
Now
это действительно без()
VBA, но я не могу использовать печать, потому что я думаю, что весь вывод запрещен, если он не выдает ошибку.No using input or showing output through the usual IO methods, except to print to STDERR
, Тем не менее, сохранено 2 байта.Рубин, 15 байт
wday
вернет 0 в воскресенье, что приведет к ошибке ZeroDivisionError: делится на 0. Например:1/Time.new(2018,1,7).wday
.источник
Perl 5 , 13 байт
Попробуйте онлайн!
Ported @ biketire's answerj
удалил 3 байта с напоминанием @ мика
источник
gmtime
вместо того,localtime
чтобы также будет соответствовать правилам, и на 3 байта корочеJQ, 42 символа
(39 символов кода + 3 символа командной строки)
Просто попробуйте другой подход: проанализируйте номер дня недели (0..6) как номер дня месяца (1..31).
Образец прогона:
Обратите внимание, что jq обрабатывает только даты UTC.
Попробуйте онлайн!
источник
C,
35, 3427 байтов-7 байт благодаря @MartinEnder и @Dennis
Попробуйте онлайн!
источник
VBA 18 байт
Это зависит от встроенной функции,
date()
возвращающей номер дня, который остается 1, если он разделен на 7, поэтому может зависеть от ОС и / или ЦП.Он запускается в непосредственном окне проекта VBA.
источник
R ,
31 байт30 байтПопробуйте онлайн!
Нет выходных по воскресеньям,
Error: object 'a' not found
по воскресеньям.format(Sys.Date(),'%u')
Это был самый короткий способ найти день недели, он выводит номер класса персонажа для дня недели, с 7 для воскресенья. Мы можем сравнить с цифрой 7, и если истина, попытаться использовать неопределенный объект.Сохранил байт благодаря Джузеппе!
источник
>6
на байт короче.Окамль, 46 байт
и в ocaml REPL мы можем добиться большего, удалив
let
и финал:()
:что составляет 41 байт (включая 1 байт для возврата каретки).
источник
SAS, 36 байт
источник
TI-Basic 84+, 23 байта
Требуются команды даты и времени, которые старше 84 лет.
источник
MATL , 12 байт
Ошибка, полученная по воскресеньям:
Бег на Октаве:
Бег на Matlab:
Чтобы изменить поведение (ошибка в любой день, кроме воскресенья), добавьте
~
после>
.Попробуйте онлайн!
объяснение
Это использует тот факт, что
false
допустимо индексирование в пустой массив с логическим индексом (и в результате получается пустой массив, который не выводит); в то время какИндексирование с помощью
true
вызывает ошибку, поскольку в массиве отсутствует первая запись.Код комментария:
источник
Q, 20 байт
.zd возвращает текущую дату. мод делает модуль по текущей дате, который возвращает int. Если дата - воскресенье, .zd mod 7 возвращает 1. Если 1 = 1, (в воскресенье), и ошибка возникает с помощью оператора 'Для краткости ошибка - это просто символ e.
источник
C # (.NET Core) ,
555448 байтПопробуйте онлайн!
Сохранено 1 байт благодаря Shaggy
Сохранено 5 байт благодаря Emigna
Сохранено 1 байт благодаря Кевину Круйссену
К счастью, воскресенье имеет индекс 0 в перечислении, иначе это должно было быть
(System.DayOfWeek)7
источник
using System
бесплатно в C #? Если это так, я думаю, вы могли бы сделать()=>{var k=1/(int)DateTime.Now.DayOfWeek;}
для 42 . В противном случае 49 с явнымSystem.
()=>{var k=1/(int)System.DateTime.Now.DayOfWeek;}
короче И вы можете сохранить еще один байт, используя пустой неиспользуемый параметр вместо какого-либо параметра (т.е.v->{...}
вместо()->{...}
)()=>1/(int)System.DateTime.Now.DayOfWeek
. Попробуй это здесь .Groovy , 16 байт
Попробуйте онлайн!
источник
C
6855 байтовСпасибо @Ken YN за сохранение 13 байтов!
Попробуйте онлайн!
источник
d
чтобы получитьn/=gmtime(&n)->tm_wday;
54 байта (но я не уверен, что мне нравятся все эти предупреждения компилятора ...)R , 40 байт
Попробуйте онлайн!
weekdays
возвращает день недели с необязательным аргументомabbreviate
, который сокращаетсяSunday
доSun
сохранения одного байта.stopifnot
выдает ошибку, если для каждого аргумента notall
areTRUE
, и выдает ошибку с сообщением, указывающим на первый элемент, которого нетTRUE
, поэтому ошибкаError: "Sun" is not TRUE
источник
APL (Dyalog) , 23 байта
Попробуйте онлайн!
источник
Гема , 40 знаков
Пришлось указать сообщение об ошибке, поэтому выберите короткое: «S».
Образец прогона:
источник
Фанки , 21 байт
os.date"%w"
возвращает текущий день недели в формате 0-6, где 0 - воскресенье. Правильно понять, что это не так, только когда день недели равен 0, поэтому воскресенье. Тогда просто основнойif(a){error()}
будет гарантировать, что эта программа только ошибки в воскресеньеПопробуйте онлайн!
источник
Perl 6 ,
2921 байтПопытайся
Попытайся
источник
Юлия 0,5 , 28 байт
Попробуйте онлайн!
Это не работает с 0,6, но это работает с 0,4.
источник