Inspiriert von Wir hatten einmal einen Unit-Test, der nur sonntags fehlgeschlagen ist. Schreiben Sie ein Programm oder eine Funktion, die nichts anderes tut, als einen Fehler zu werfen, wenn es Sonntag ist, und beenden Sie das Programm ordnungsgemäß an einem anderen Tag.
Regeln:
- Keine Verwendung von Eingaben oder Anzeigen von Ausgaben über die üblichen E / A-Methoden , außer zum Drucken in STDERR oder einer entsprechenden Sprache. Sie dürfen an STDOUT drucken, wenn dies ein Nebenprodukt Ihres Fehlers ist.
- Eine Funktion kann an Nicht-Sonntagen einen Wert zurückgeben, solange nichts gedruckt wird
- Ihr Programm kann einen Sonntag aus jeder Zeitzone oder der lokalen Zeitzone verwenden, sofern dies konsistent ist.
- Ein Fehler führt zu einer abnormalen Beendigung des Programms , z. B. durch einen Fehler beim Teilen durch Null oder durch die Verwendung einer nicht initialisierten Variablen. Dies bedeutet, dass Code, der nach dem fehlerhaften Teil hinzugefügt wird, am Sonntag nicht ausgeführt wird.
- Sie können auch Anweisungen verwenden, die manuell einen Fehler erzeugen, der dem von Python entspricht
raise
. - Dies beinhaltet Laufzeitfehler, Syntaxfehler und Fehler beim Kompilieren (viel Glück damit!)
- Sie können auch Anweisungen verwenden, die manuell einen Fehler erzeugen, der dem von Python entspricht
- Bei einem Fehler muss es ein Zeichen geben, das ihn von einem fehlerfreien unterscheidet
- Das ist Code-Golf , also gewinnt der kürzeste Bytecount in jeder Sprache!
Ich muss bis Sonntag warten, um die Antworten zu überprüfen;)
code-golf
date
error-message
Scherzen
quelle
quelle
print "error"
ein Fehler? Der hinzugefügte Absatz verdeutlicht eigentlich nichts.Antworten:
Bash + Coreutils,
15 bis14 BytesProbieren Sie es online!
quelle
PHP 7, 12 Bytes
Unter PHP 7 gibt es
DivisionByZero
sonntags eine Ausnahme vom Typ . Das gleiche passiert, wenn es mit HHVM interpretiert wird .In PHP 5 wird
stderr
sonntags eine Warnung (on ) angezeigt :In jeder PHP-Version wird an den anderen Wochentagen nichts angezeigt.
Führen Sie mit der CLI aus:
oder online ausprobieren!
Zwei weitere Bytes können durch Strippen der Anführungszeichen gequetscht werden (
1%date(w);
) , aber dies löst eine Mitteilung (die durch richtig eingestellt unterdrückt werden kannerror_reporting = E_ALL & ~E_NOTICE
inphp.ini
).quelle
1%date("w");echo "Alive!"
, stoppt es in PHP7 + und HHVM, aber nicht in allen anderen Versionen seit PHP 4.PHP, 15 Bytes
Übernimmt die Standardeinstellungen .
Ausgabe sonntags
Probieren Sie es online!
quelle
||\n
statt?:\n
.Java 8,
694334 Bytes-26 Bytes dank @ OlivierGrégoire .
-9 Bytes dank @Neil .
Erläuterung:
Probieren Sie es hier aus.
v->{...}
( unbenutzterVoid
null
Parameter ) ist ein Byte kürzer als()->{...}
(kein Parameter).new java.util.Date().getDay()
Gibt für Sonntag-Samstag 0-6 zurück1/...
und gibt einenjava.lang.ArithmeticException: / by zero
Fehler aus, wenn der Wert 0 ist, was nur sonntags der Fall ist.quelle
v->{int i=1/new java.util.Date().getDay();}
(43 Bytes).java.util.Date()
es gibt eine Methode, um den Wochentag zu ermitteln. Und es ist sogar 0 für Sonntag. Ich bin mir nicht sicher, wie ich das verpasst habe. : SPython 3 , 33 Bytes
Probieren Sie es online!
Python 3 , 50 Bytes
Probieren Sie es online!
Dank Rod ~ 3 Bytes gespart .
quelle
"Su"in time.ctime()>q
(ich habe mit diesem gearbeitet)?"Su"in time.ctime()
prüft, ob der aktuelle Tag Sonntag ist. Wenn dies falsch ist, wird das>q
Teil überhaupt nicht ausgewertet und alles wird reibungslos beendet. Wenn dies jedoch zutrifft, wird der zweite Teil der Ungleichung ausgewertet, und da diesq
nicht definiert ist, würde dies a auslösenNameError
.("Su" in time.ctime()) and (time.ctime() > q)
.Pyth ,
87 BytesProbieren Sie es online!
Erläuterung
quelle
1.0
wird nicht durch den Fehler generiert ). Das OP sagte ausdrücklich, dass sie das nicht zulassen. Sie können dies jedoch beheben, indem Sie Ihrem Code ein einzelnes LeerzeichenHaskell + Data.Dates , 55 Bytes
Probieren Sie es online!
Dies nutzt die Tatsache, dass Sonntag der letzte Tag der Woche ist.
dateWeekDay
Gibt den Wochentag alsWeekDay
Typ zurück, der einfach als definiert istWeekDay
Ist eine Instanz vonEnum
, so können wirsucc
und verwendenpred
, um den Nachfolger oder Vorgänger eines Wochentags zu erhalten, zBsucc Monday
ErträgeTuesday
.Dies
Sunday
ist jedoch der letzte Aufzählungseintrag. Daher führt der Aufrufsucc Sunday
zu folgendem Fehler:Edit 1: Danke an nimi für -3 Bytes!
Edit 2: -11 Bytes jetzt, da Funktionen erlaubt sind.
Volles Programm:
8881746966 BytesProbieren Sie es online!
pure
wird benötigt, um das resultierendeWeekDay
zurück in die IO-Monade zu heben . Haskell stellt jedoch fest, dass der Wert in keiner Weise vom Programm ausgegeben wird, so träge der Ausdruck auch ist und nicht ausgewertet wird, sodass das Programm auch sonntags nicht fehlschlagen würde. Dies ist der Grund$!
, weshalb die Auswertung erzwungen wird, auch wenn Haskell den Ausdruck normalerweise nicht auswerten würde.Vorheriger Ansatz mit
Data.Time
:127124 BytesProbieren Sie es online! Dies sind einige beeindruckende Importe. Wechseln Sie
d<7
beispielsweised/=5
zu Testfehler an einem Freitag. Schlägt mit folgenden Ausnahme:Non-exhaustive patterns in function c
.quelle
main=pure$!succ.dateWeekDay<$>getCurrentDateTime
. Und wenn Funktionen erlaubt sind, können Sie die fallen lassenmain=
.No using input or showing output through the usual IO methods
Regel handelt. Soweit ich sehe, würde die Verwendung einer Funktion zu einer Ausgabe für Nicht-Sonntage führen, obwohl sie in eine E / A-Aktion eingebunden ist.05AB1E ,
4544 BytesDa in 05AB1E keine Funktion zum Abrufen des Wochentags integriert ist, habe ich die Zeller-Regel verwendet, um sie zu berechnen.
Gibt bei einem Sonntag eine neue Zeile an stderr aus (beobachtbar in der Debug-Ansicht von TIO)
Probieren Sie es online!
Erläuterung
Die allgemeine Formel verwendet wird ,
DoW = d + [(13*(m+1))/5] + y + [y/4] + [c/4] - 2*c
Wo
DoW=day of week
,d=day
,m=month
,y=last 2 digits of year
,c=century
und und die Ausdrücke in Klammern ([]
) abgerundet sind.Jeder Monat, der in der Formel verwendet wird, entspricht einer Zahl.
Jan=13,Feb=14,Mar=3,...,Dec=12
Da wir den aktuellen Monat im allgemeineren Format
Jan=1,...,Dec=12
haben, konvertieren wir den Monat mithilfe der Formelm = (m0 + 11) % 14 + 1
Als biproduct März der erste Monat sein, Januar und Februar , gehören zum Vorjahr, so dass die Berechnung für die Bestimmung
y
wirdy = (year - (m0 < 3)) % 100
Der endgültige Wert für
DoW
das Ergebnis ist int where0=Sat,1=Sun,...,6=Fri
.Jetzt können wir explizit einen Fehler auslösen, wenn das Ergebnis wahr ist.
quelle
JavaScript, 23 Bytes
Volles Programm.
Die Variable
k
darf nicht definiert werden.JavaScript, 20 Bytes von Rick Hitchcock
JavaScript, 19 Bytes von Apsillern
quelle
_=>
; ohne es ist dies ein Ausschnitt, der standardmäßig nicht erlaubt ist. 2) Dies wirdfalse
an jedem zweiten Tag ausgegeben, an dem nichts ausgegeben werden soll./Su/.test(Date())&&k
für 20 Bytes.new Date
version 25 bytes(new Date/864e5%7|0)-3||p
match
Date().match`Su`&&k
VBA / VBScript,
22 bis20 Byte2 Bytes gespart dank Taylor Scott.
Dies sollte im Direktfenster ausgeführt werden.
Weekday()
Gibt 1 (Sonntag) bis 7 (Samstag) zurück, sodass am Sonntag ein Fehler durch Null entsteht. Ansonsten keine Ausgabe.quelle
?1/(Weekday(Now)-1)
Now
ohne()
VBA gültig ist, aber ich kann print nicht verwenden, da ich denke, dass alle Ausgaben unzulässig sind, es sei denn, es treten Fehler auf.No using input or showing output through the usual IO methods, except to print to STDERR
. Immer noch 2 Bytes gespeichert.Ruby, 15 Bytes
wday
wird am Sonntag 0 zurückgeben und einen ZeroDivisionError verursachen: dividiert durch 0 Fehler. Zum Beispiel:1/Time.new(2018,1,7).wday
.quelle
Perl 5 , 13 Bytes
Probieren Sie es online!
Ported @ biketire's answerj
3 Bytes mit @ miks Erinnerung entfernt
quelle
gmtime
stattlocaltime
will auch die regelnjq, 42 Zeichen
(39 Zeichen Code + 3 Zeichen Befehlszeilenoption)
Versuchen Sie hier einfach einen anderen Ansatz: Analysieren Sie die Wochentagsnummer (0..6) als Monatstagsnummer (1..31).
Probelauf:
Beachten Sie, dass jq nur UTC-Daten verarbeitet.
Probieren Sie es online!
quelle
C,
35, 34,27 Bytes-7 Bytes mit Dank an @MartinEnder und @Dennis
Probieren Sie es online!
quelle
VBA 18 Bytes
Dies hängt davon ab,
date()
dass die eingebaute Funktion eine Tageszahl zurückgibt, die 1 ergibt , wenn sie durch 7 geteilt wird. Dies kann betriebssystem- und / oder CPU-spezifisch sein.Es läuft im VBA-Projekt-Direktfenster.
quelle
R ,
31 Bytes30 BytesProbieren Sie es online!
Keine Ausgabe außer sonntags,
Error: object 'a' not found
sonntags.format(Sys.Date(),'%u')
war der kürzeste Weg, den ich finden konnte, um den Wochentag zu erhalten. Er gibt eine Zeichenklassennummer für den Wochentag aus, mit 7 für die Sonntage. Wir können es mit einer 7 vergleichen und versuchen, ein undefiniertes Objekt zu verwenden.Dank Giuseppe ein Byte gespart!
quelle
>6
ist ein Byte kürzer.Ocaml, 46 Bytes
und in der ocaml REPL können wir besser erreichen, indem wir das
let
und das Finale entfernen:()
:Das sind 41 Byte (einschließlich 1 Byte für den Wagenrücklauf).
quelle
SAS, 36 Bytes
quelle
TI-Basic 84+, 23 Bytes
Benötigt Datums- und Uhrzeitbefehle, die nur 84+ und höher sind.
quelle
MATL , 12 Bytes
Der am Sonntag erzeugte Fehler ist:
Laufen auf Oktave:
Laufen auf Matlab:
Um das Verhalten umzukehren (Fehler an jedem Tag außer sonntags), fügen Sie
~
nach>
.Probieren Sie es online!
Erläuterung
Dies nutzt die Tatsache aus, dass
Die Indizierung in ein leeres Array mit dem logischen Index
false
ist gültig (und das Ergebnis ist ein leeres Array, das keine Ausgabe erzeugt). wohingegenIndizieren mit
true
verursacht einen Fehler, da dem Array ein erster Eintrag fehlt.Kommentierter Code:
quelle
Q, 20 Bytes
.zd gibt das aktuelle Datum zurück. mod macht das Modulo des aktuellen Datums, das einen int zurückgibt. Wenn das Datum ein Sonntag ist, gibt .zd mod 7 1 zurück. Wenn 1 = 1, (am Sonntag), und der Fehler wird mit dem Operator 'ausgelöst. Der Kürze halber ist der Fehler nur das Zeichen e.
quelle
C # (.NET Core) ,
555448 BytesProbieren Sie es online!
1 Byte dank Shaggy gespeichert
5 Byte gespart dank Emigna
Dank Kevin Cruijssen 1 Byte gespeichert
Zum Glück hat der Sonntag den Index 0 in enum, sonst hätte es sein müssen
(System.DayOfWeek)7
quelle
using System
kostenlos in C #? Wenn ja, ich denke, Sie könnten()=>{var k=1/(int)DateTime.Now.DayOfWeek;}
für 42 tun . Ansonsten 49 mit der explizitenSystem.
()=>{var k=1/(int)System.DateTime.Now.DayOfWeek;}
ist kürzer. Und Sie können ein weiteres Byte speichern, indem Sie einen leeren unbenutzten Parameter anstelle von keinem Parameter (dhv->{...}
anstelle von()->{...}
) verwenden()=>1/(int)System.DateTime.Now.DayOfWeek
. Probieren Sie es hier aus .Groovy , 16 Bytes
Probieren Sie es online!
quelle
C
68.55BytesVielen Dank an @Ken YN für das Speichern von 13 Bytes!
Probieren Sie es online!
quelle
d
, umn/=gmtime(&n)->tm_wday;
54 Bytes zu erhalten (aber ich bin nicht sicher, ob ich all diese Compiler-Warnungen mag ...)R , 40 Bytes
Probieren Sie es online!
weekdays
Gibt den Wochentag des Datums mit einem optionalen Argument zurückabbreviate
, das sichSunday
auf dasSun
Speichern eines einzelnen Bytes verkürzt .stopifnot
wenn, wirft einen Fehler für jedes Argument, nichtall
istTRUE
, und wirft einen Fehler mit einer Meldung, die das erste Element davon ist nichtTRUE
, so ist der FehlerError: "Sun" is not TRUE
quelle
APL (Dyalog) , 23 Bytes
Probieren Sie es online!
quelle
Gema , 40 Zeichen
Musste eine Fehlermeldung angeben, so wählen Sie eine kurze: "S".
Probelauf:
quelle
Funky , 21 Bytes
os.date"%w"
Gibt den aktuellen Wochentag im 0-6-Format zurück, wobei 0 für Sonntag steht. Das logische Nicht davon zu bekommen, ist nur wahr, wenn der Wochentag 0 ist, also Sonntag. Dann nur noch ein Basicif(a){error()}
dafür sorgen, dass dieses Programm nur am Sonntag Fehler machtProbieren Sie es online!
quelle
Perl 6 ,
2921 BytesVersuch es
Versuch es
quelle
Julia 0,5 , 28 Bytes
Probieren Sie es online!
Dies funktioniert nicht mit 0.6, aber mit 0.4.
quelle