Zainspirowany Mieliśmy raz test jednostkowy, który nie powiódł się tylko w niedziele , napisz program lub funkcję, która nie robi nic poza rzuceniem błędu, gdy jest niedziela, i wyjdź z gracją każdego innego dnia.
Zasady:
- Nie używaj danych wejściowych ani nie wyświetlaj danych wyjściowych zwykłymi metodami We / Wy, z wyjątkiem drukowania do STDERR lub odpowiednika twojego języka. Możesz drukować do STDOUT, jeśli jest to produkt uboczny twojego błędu.
- Funkcja może zwracać wartość w niedziele, o ile nic nie drukuje
- Twój program może używać niedzieli z dowolnej strefy czasowej lub lokalnej strefy czasowej, o ile jest ona spójna.
- Błąd to coś, co powoduje nieprawidłowe zakończenie programu , na przykład błąd dzielenia przez zero lub użycie niezainicjowanej zmiennej. Oznacza to, że jeśli po części, która zawiera błąd, zostanie dodany kod, nie zostanie wykonany w niedzielę.
- Można także użyć instrukcji, które ręcznie tworzą błąd, równoważny z pytaniami Pythona
raise
. - Obejmuje to błędy środowiska wykonawczego, błędy składniowe i błędy podczas kompilacji (powodzenia!)
- Można także użyć instrukcji, które ręcznie tworzą błąd, równoważny z pytaniami Pythona
- W przypadku błędu musi być jakiś znak, który odróżnia go od braku błędu
- To jest golf golfowy , więc wygrywa najkrótsza bajt w każdym języku!
Będę musiał czekać do niedzieli, aby sprawdzić odpowiedzi;)
code-golf
date
error-message
Jo King
źródło
źródło
print "error"
błąd? Dodany akapit tak naprawdę niczego nie wyjaśnia.Odpowiedzi:
Bash + coreutils,
1514 bajtówWypróbuj online!
źródło
PHP 7, 12 bajtów
W PHP 7 generuje wyjątek typu
DivisionByZero
w niedziele. To samo dzieje się, jeśli zostanie zinterpretowane przy użyciu HHVM .W PHP 5 wyświetla ostrzeżenie (włączone
stderr
) w niedziele:W żadnej wersji PHP nie wyświetla niczego w pozostałe dni tygodnia.
Uruchom używając CLI:
lub wypróbuj online!
Dwa kolejne bajty mogą być ściśnięte przez odpędzenie cytaty (
1%date(w);
), ale to wyzwala zawiadomienie (które mogą być tłumione przez prawidłowo ustawioneerror_reporting = E_ALL & ~E_NOTICE
wphp.ini
).źródło
1%date("w");echo "Alive!"
, zatrzyma się w PHP7 + i HHVM, ale nie we wszystkich innych wersjach od PHP 4.PHP, 15 bajtów
Zakłada ustawienia domyślne .
Wyjście w niedziele
Wypróbuj online!
źródło
||\n
zamiast?:\n
.Java 8,
694334 bajty-26 bajtów dzięki @ OlivierGrégoire .
-9 bajtów dzięki @Neil .
Wyjaśnienie:
Wypróbuj tutaj.
v->{...}
( nieużywanyVoid
null
parametr ) jest o jeden bajt krótszy niż()->{...}
(brak parametru).new java.util.Date().getDay()
zwróci 0-6 dla niedzieli-soboty, więc1/...
dajava.lang.ArithmeticException: / by zero
błąd, jeśli wartość wynosi 0, co zdarza się tylko w niedziele.źródło
v->{int i=1/new java.util.Date().getDay();}
(43 bajty).java.util.Date()
ma metodę, aby uzyskać dzień tygodnia .. I jest nawet 0 w niedzielę .. Nie jestem pewien, jak mi tego brakowało. : SPython 3 , 33 bajty
Wypróbuj online!
Python 3 , 50 bajtów
Wypróbuj online!
Oszczędność ~ 3 bajtów dzięki Rod .
źródło
"Su"in time.ctime()>q
(edytowałem z tym)?"Su"in time.ctime()
sprawdza, czy bieżącym dniem jest niedziela. Jeśli to nieprawda,>q
część nie jest w ogóle oceniana i wszystko kończy się płynnie. Ale jeśli to prawda, wówczas druga część nierówności jest oceniana, a ponieważq
nie jest zdefiniowana, rzuciłaby onaNameError
.("Su" in time.ctime()) and (time.ctime() > q)
.Pyth ,
87 bajtówWypróbuj online!
Wyjaśnienie
źródło
1.0
nie są generowane przez błąd ). PO stwierdził wyraźnie, że nie pozwala na to. Możesz to naprawić, przygotowując jedną spację do swojego koduHaskell + Data.Dates , 55 bajtów
Wypróbuj online!
Wykorzystuje to fakt, że niedziela jest ostatnim dniem tygodnia.
dateWeekDay
zwraca dzień tygodnia jakoWeekDay
typ, który jest po prostu zdefiniowany jakoWeekDay
jest przykłademEnum
, więc możemy wykorzystaćsucc
ipred
uzyskać następcę lub poprzednika dnia tygodnia, np .succ Monday
zyskiTuesday
.Jednakże,
Sunday
jest to ostatni wpis enum, więc nazywającsucc Sunday
wyniki w następujący błąd:Edycja 1: Dzięki nim za -3 bajty!
Edytuj 2: -11 bajtów teraz, gdy funkcje są dozwolone.
Pełny program:
8881746966 bajtówWypróbuj online!
pure
jest potrzebny, aby podnieść wynikowyWeekDay
powrót do Monady IO. Jednak Haskell widzi, że wartość nie jest w żaden sposób wyprowadzana przez program, tak leniwe, że wyrażenie nie jest analizowane, więc nawet w niedziele program nie zawiedzie. Dlatego$!
jest potrzebny, co wymusza ocenę, nawet jeśli Haskell normalnie nie oceniałby wyrażenia.Poprzednie podejście z
Data.Time
:127124 bajtamiWypróbuj online! To imponujący import. Zmień
d<7
np.d/=5
Na test awarii w piątek. Nie z następującym wyjątkiem:Non-exhaustive patterns in function c
.źródło
main=pure$!succ.dateWeekDay<$>getCurrentDateTime
. A ponieważ funkcje są dozwolone, możesz upuścićmain=
.No using input or showing output through the usual IO methods
reguły. O ile widzę, użycie funkcji dałoby wynik w niedziele, nawet jeśli jest zawinięty w akcję IO.05AB1E ,
4544 bajtówPonieważ 05AB1E nie ma wbudowanej funkcji określania dnia tygodnia, skorzystałem z reguły Zellera, aby ją obliczyć.
Drukuje nową linię do stderr w przypadku niedzieli (obserwowalne w widoku debugowania na TIO)
Wypróbuj online!
Wyjaśnienie
O wzorze ogólnym stosuje się
DoW = d + [(13*(m+1))/5] + y + [y/4] + [c/4] - 2*c
przypadku
DoW=day of week
,d=day
,m=month
,y=last 2 digits of year
,c=century
i i wyrażenie w nawiasach ([]
) jest zaokrąglone w dół.Każdy miesiąc użyty w formule odpowiada liczbie, przy czym
Jan=13,Feb=14,Mar=3,...,Dec=12
Ponieważ mamy bieżący miesiąc w bardziej popularnym formacie
Jan=1,...,Dec=12
, konwertujemy miesiąc za pomocą formułym = (m0 + 11) % 14 + 1
Ponieważ dwuprodukt z marca jest pierwszym miesiącem, styczeń i luty należą do roku poprzedniego, więc obliczenia do ustalenia
y
stają sięy = (year - (m0 < 3)) % 100
Ostateczną wartością,
DoW
którą otrzymujemy, jest int gdzie0=Sat,1=Sun,...,6=Fri
.Teraz możemy jawnie zgłosić błąd, jeśli wynik jest prawdziwy.
źródło
JavaScript, 23 bajty
Pełny program
Zmienna
k
nie może być zdefiniowana.JavaScript, 20 bajtów autorstwa Ricka Hitchcocka
JavaScript, 19 bajtów wg apsillerów
źródło
_=>
; bez niego jest to fragment, który domyślnie nie jest dozwolony. 2) Danefalse
wyjściowe są wysyłane co drugi dzień, kiedy nic nie powinno być wysyłane./Su/.test(Date())&&k
na 20 bajtów.new Date
wersja 25 bajtów(new Date/864e5%7|0)-3||p
match
zamiast tego szablon-tag :Date().match`Su`&&k
VBA / VBScript,
2220 bajtówZaoszczędź 2 bajty dzięki Taylor Scott.
Powinno to zostać uruchomione w oknie natychmiastowym.
Weekday()
zwraca od 1 (niedziela) do 7 (sobota), więc w niedzielę powstaje błąd dzielenia przez zero. W przeciwnym razie brak danych wyjściowych.źródło
?1/(Weekday(Now)-1)
Now
jest poprawny bez()
VBA, ale nie mogę użyć print, ponieważ uważam, że wszystkie dane wyjściowe są niedozwolone, chyba że wystąpią błędy.No using input or showing output through the usual IO methods, except to print to STDERR
. Mimo to zapisano 2 bajty.Rubin, 15 bajtów
wday
zwróci 0 w niedzielę powodując błąd ZeroDivisionError: podzielony przez błąd 0. Na przykład:1/Time.new(2018,1,7).wday
.źródło
Perl 5 , 13 bajtów
Wypróbuj online!
Odpowiedź Ported @ biketirej
usunięto 3 bajty z przypomnieniem @ mik
źródło
gmtime
zamiastlocaltime
spełni również zasady i jest 3 bajty krótszyjq, 42 znaki
(39 znaków kod + 3 znaki opcja wiersza poleceń)
Próbuję tutaj innego podejścia: parsuj numer dnia tygodnia (0..6) jako numer dnia miesiąca (1..31).
Przykładowy przebieg:
Pamiętaj, że jq obsługuje tylko daty UTC.
Wypróbuj online!
źródło
C,
35, 3427 bajtów-7 bajtów dzięki dzięki @MartinEnder i @Dennis
Wypróbuj online!
źródło
VBA 18 bajtów
Zależy to od wbudowanej funkcji
date()
zwracającej liczbę dni, która jest równa 1, jeśli jest podzielona przez 7, więc może być specyficzna dla systemu operacyjnego i / lub procesora.Działa w oknie Natychmiastowe projektu VBA.
źródło
R ,
31 bajtów30 bajtówWypróbuj online!
Brak wyników w niedziele,
Error: object 'a' not found
w niedziele.format(Sys.Date(),'%u')
był najkrótszym sposobem, w jaki udało mi się uzyskać dzień powszedni, wyświetla liczbę klas postaci na dzień tygodnia, z liczbą 7 na niedziele. Możemy porównać do liczby 7 i jeśli prawdziwa próba użycia niezdefiniowanego obiektu.Oszczędność bajtu dzięki Giuseppe!
źródło
>6
jest bajt krótszy.Ocaml, 46 bajtów
i w ocaml REPL, możemy osiągnąć lepiej, usuwając
let
i końcowy:()
:czyli 41 bajtów (w tym 1 bajt na powrót karetki).
źródło
SAS, 36 bajtów
źródło
TI-Basic 84+, 23 bajty
Wymaga poleceń daty i godziny, które są w wersji 84+ i wyższej.
źródło
MATL , 12 bajtów
Błąd występujący w niedziele to:
Uruchamianie na Octave:
Uruchamianie na Matlabie:
Aby odwrócić zachowanie (błąd w dowolnym dniu oprócz niedziel), dodaj
~
po>
.Wypróbuj online!
Wyjaśnienie
Wykorzystuje to fakt, że
indeksowanie do pustej tablicy z indeksem logicznym
false
jest poprawne (a wynikiem jest pusta tablica, która nie generuje danych wyjściowych); natomiastindeksowanie za pomocą
true
powoduje błąd, ponieważ w tablicy brakuje pierwszego wpisu.Skomentowany kod:
źródło
Q, 20 bajtów
.zd zwraca bieżącą datę. mod robi modulo bieżącej daty, która zwraca wartość int. Jeśli data jest niedziela, .zd mod 7 zwraca 1. Jeśli 1 = 1, (w niedzielę), a błąd jest zgłaszany za pomocą operatora „Dla zwięzłości błąd jest tylko znakiem e.
źródło
C # (.NET Core) ,
555448 bajtówWypróbuj online!
Zaoszczędził 1 bajt dzięki Kudłatemu
Zaoszczędź 5 bajtów dzięki Emignie
Zaoszczędził 1 bajt dzięki Kevinowi Cruijssenowi
Na szczęście niedziela jest indeksowana w enum 0, bo inaczej by tak było
(System.DayOfWeek)7
źródło
using System
za darmo w C #? Jeśli tak, myślę, że możesz zrobić()=>{var k=1/(int)DateTime.Now.DayOfWeek;}
za 42 . W przeciwnym razie 49 z wyraźnymSystem.
()=>{var k=1/(int)System.DateTime.Now.DayOfWeek;}
jest krótszy. I możesz zaoszczędzić jeszcze jeden bajt, używając pustego nieużywanego parametru zamiast żadnego parametru (tj.v->{...}
Zamiast()->{...}
)()=>1/(int)System.DateTime.Now.DayOfWeek
. Wypróbuj tutaj .Groovy , 16 bajtów
Wypróbuj online!
źródło
C,
6855 bajtówDzięki @Ken YN za oszczędność 13 bajtów!
Wypróbuj online!
źródło
d
aby uzyskaćn/=gmtime(&n)->tm_wday;
54 bajty (ale nie jestem pewien, czy podoba mi się te wszystkie ostrzeżenia kompilatora ...)R , 40 bajtów
Wypróbuj online!
weekdays
zwraca dzień tygodnia daty, z opcjonalnym argumentemabbreviate
, który skracaSunday
sięSun
, oszczędzając jeden bajt.stopifnot
zgłasza błąd, jeśli dla każdego argumentu nieall
maTRUE
, i zgłasza błąd z komunikatem wskazującym, że pierwszy element nie jestTRUE
, więc błąd jestError: "Sun" is not TRUE
źródło
APL (Dyalog) , 23 bajty
Wypróbuj online!
źródło
Gema , 40 znaków
Musiałem podać komunikat o błędzie, więc wybierz krótki: „S”.
Przykładowy przebieg:
źródło
Funky , 21 bajtów
os.date"%w"
zwraca bieżący dzień tygodnia w formacie 0–6, gdzie 0 oznacza niedzielę. Zrozumienie tego nie jest prawdą tylko wtedy, gdy dniem tygodnia jest 0, czyli niedziela. Wtedy tylko podstawowaif(a){error()}
zapewni, że ten program będzie zawierał błędy tylko w niedzielęWypróbuj online!
źródło
Perl 6 ,
2921 bajtówSpróbuj
Spróbuj
źródło
Julia 0,5 , 28 bajtów
Wypróbuj online!
To nie działa z 0.6, ale działa z 0.4.
źródło