Inspiré par Nous avons eu une fois un test unitaire qui n’a échoué que le dimanche , écrivez un programme ou une fonction qui ne fait que renvoyer une erreur le dimanche et sortez gracieusement un autre jour.
Règles:
- Aucune utilisation ou affichage de la sortie à l'aide des méthodes IO habituelles , sauf pour imprimer sur STDERR ou l'équivalent dans votre langue. Vous êtes autorisé à imprimer sur STDOUT s'il s'agit d'un sous-produit de votre erreur.
- Une fonction peut renvoyer une valeur les jours autres que le dimanche à condition de ne rien imprimer.
- Votre programme peut utiliser un dimanche de n’importe quel fuseau horaire ou le fuseau horaire local, à condition qu’il soit cohérent.
- Une erreur est quelque chose qui provoque une fin anormale du programme , telle qu'une erreur de division par zéro ou l'utilisation d'une variable non initialisée. Cela signifie que si du code devait être ajouté après la partie erronée, il ne serait pas exécuté le dimanche.
- Vous pouvez également utiliser des instructions qui créent manuellement une erreur, équivalente à celle de Python
raise
. - Cela inclut les erreurs d'exécution, les erreurs de syntaxe et les erreurs lors de la compilation (bonne chance avec ça!)
- Vous pouvez également utiliser des instructions qui créent manuellement une erreur, équivalente à celle de Python
- En cas d'erreur, il doit y avoir un signe qui le distingue de l'absence d'erreur
- C'est du code-golf , donc le compte le plus court dans chaque langue gagne!
Je vais devoir attendre dimanche pour vérifier les réponses;)
code-golf
date
error-message
Jo King
la source
la source
print "error"
une erreur? Le paragraphe ajouté ne clarifie vraiment rien.Réponses:
Bash + coreutils,
1514 octetsEssayez-le en ligne!
la source
PHP 7, 12 octets
Sur PHP 7, une exception de type est
DivisionByZero
lancée le dimanche. La même chose se produit si elle est interprétée avec HHVM .Sur PHP 5, un avertissement (activé
stderr
) est affiché le dimanche:Sur n'importe quelle version de PHP, il n'affiche rien les autres jours de la semaine.
Exécuter en utilisant le CLI:
ou essayez-le en ligne!
Deux autres octets peuvent être pressés par dépouillant les guillemets (
1%date(w);
) mais cela déclenche un avis (qui peut être supprimé par correctement définieserror_reporting = E_ALL & ~E_NOTICE
dansphp.ini
).la source
1%date("w");echo "Alive!"
, cela s'arrêtera dans PHP7 + et HHVM, mais pas dans toutes les autres versions depuis PHP 4.PHP, 15 octets
Suppose les paramètres par défaut .
Sortie le dimanche
Essayez-le en ligne!
la source
||\n
place de?:\n
.Java 8,
694334 octets-26 octets grâce à @ OlivierGrégoire .
-9 octets grâce à @Neil .
Explication:
Essayez ici.
v->{...}
( paramètre non utiliséVoid
null
) est un octet plus court que()->{...}
(pas de paramètre).new java.util.Date().getDay()
retournera 0-6 pour dimanche-samedi, donc1/...
donnera unejava.lang.ArithmeticException: / by zero
erreur si la valeur est 0, ce qui n'arrive que le dimanche.la source
v->{int i=1/new java.util.Date().getDay();}
(43 octets).java.util.Date()
a une méthode pour obtenir le jour de la semaine .. Et il est même 0 pour dimanche .. Je ne sais pas comment j'ai raté ça. : SPython 3 , 33 octets
Essayez-le en ligne!
Python 3 , 50 octets
Essayez-le en ligne!
Sauvegardé ~ 3 octets grâce à Rod .
la source
"Su"in time.ctime()>q
(je montais avec celui-ci)?"Su"in time.ctime()
vérifie si le jour actuel est le dimanche. Si c'est faux, la>q
pièce n'est pas du tout évaluée et tout se passe bien. Mais si cela est vrai, alors la deuxième partie de l'inégalité est évaluée et, comme elleq
n'est pas définie, cela produirait unNameError
.("Su" in time.ctime()) and (time.ctime() > q)
.Pyth ,
87 octetsEssayez-le en ligne!
Explication
la source
1.0
n'est pas générée par l'erreur ). Le PO a dit explicitement qu'il ne le permettait pas. Vous pouvez résoudre ce problème en ajoutant un espace à votre code, cependantHaskell + Data.Dates , 55 octets
Essayez-le en ligne!
Ceci utilise le fait que le dimanche est le dernier jour de la semaine.
dateWeekDay
renvoie le jour de la semaine en tant queWeekDay
type, qui est simplement défini commeWeekDay
est une instance deEnum
, nous pouvons donc utilisersucc
etpred
obtenir le successeur ou le prédécesseur d’un jour de la semaine, par exemple, lessucc Monday
rendementsTuesday
.Toutefois, il
Sunday
s’agit de la dernière entrée enum. L’appelsucc Sunday
entraîne donc l’erreur suivante:Edit 1: Merci à nimi pour -3 octets!
Edit 2: -11 octets maintenant que les fonctions sont autorisées.
Programme complet:
8881746966 octetsEssayez-le en ligne!
pure
est nécessaire pour lever le résultatWeekDay
ramener dans la Monad IO. Cependant, Haskell voit que le programme n'émet aucune valeur. Aussi paresseux qu'il soit, l'expression n'est pas évaluée. Ainsi, même le dimanche, le programme n'échoue pas. C'est pourquoi il$!
est nécessaire, ce qui force l'évaluation même si normalement Haskell n'évalue pas l'expression.Approche précédente avec
Data.Time
:127124 octetsEssayez-le en ligne! Ce sont des importations impressionnantes. Changez
d<7
par exempled/=5
pour tester l’échec un vendredi. Ne parvient pas à l'exception suivante:Non-exhaustive patterns in function c
.la source
main=pure$!succ.dateWeekDay<$>getCurrentDateTime
. Et, comme les fonctions sont autorisées, vous pouvez supprimer le fichiermain=
.No using input or showing output through the usual IO methods
règle. Autant que je sache, l'utilisation d'une fonction produirait une sortie pour les jours non dimanches, même si elle est encapsulée dans une action IO.05AB1E ,
4544 octetsComme 05AB1E n'est pas construit pour obtenir le jour de la semaine, j'ai utilisé la règle de Zeller pour le calculer.
Imprime une nouvelle ligne sur stderr en cas de dimanche (observable dans la vue de débogage sur TIO)
Essayez-le en ligne!
Explication
La formule générale est utilisé
DoW = d + [(13*(m+1))/5] + y + [y/4] + [c/4] - 2*c
où
DoW=day of week
,d=day
,m=month
,y=last 2 digits of year
,c=century
et et l' expression entre parenthèses ([]
) est arrondie vers le bas.Chaque mois utilisé dans la formule correspond à un nombre, où
Jan=13,Feb=14,Mar=3,...,Dec=12
Comme nous avons le mois en cours dans le format le plus courant,
Jan=1,...,Dec=12
nous convertissons le mois en utilisant la formulem = (m0 + 11) % 14 + 1
En tant que biproduit de Mars étant le premier mois, Janvier et Février appartiennent à l'année précédente, de sorte que le calcul pour la détermination
y
devienty = (year - (m0 < 3)) % 100
La valeur finale pour
DoW
nous obtenons est un int où0=Sat,1=Sun,...,6=Fri
.Maintenant, nous pouvons explicitement renvoyer une erreur si le résultat est vrai.
la source
JavaScript, 23 octets
Programme complet.
La variable
k
ne doit pas être définie.JavaScript, 20 octets par Rick Hitchcock
JavaScript, 19 octets par apsillers
la source
_=>
; sans cela, il s'agit d'un extrait qui n'est pas autorisé par défaut. 2) Cela sortfalse
tous les deux jours quand il ne devrait rien sortir./Su/.test(Date())&&k
pour 20 octets.new Date
version 25 octets(new Date/864e5%7|0)-3||p
match
:Date().match`Su`&&k
VBA / VBScript,
22 à20 octets2 octets sauvés grâce à Taylor Scott.
Cela devrait être exécuté dans la fenêtre immédiate.
Weekday()
renvoie 1 (dimanche) à 7 (samedi), ce qui crée une erreur de division par zéro le dimanche. Sinon, pas de sortie.la source
?1/(Weekday(Now)-1)
Now
c'est valide sans le()
dans VBA mais je ne peux pas utiliser print car je pense que toutes les sorties sont interdites sauf si elles sont erronées.No using input or showing output through the usual IO methods, except to print to STDERR
. Toujours, enregistré 2 octets.Ruby, 15 octets
wday
retournera 0 dimanche causant une erreur ZeroDivisionError: divisée par 0. Par exemple:1/Time.new(2018,1,7).wday
.la source
Perl 5 , 13 octets
Essayez-le en ligne!
Ported @ biketire's answerj
supprimé 3 octets avec le rappel de @ mik
la source
gmtime
au lieu delocaltime
sera également conforme aux règles, et est de 3 octets plus courtjq, 42 caractères
(Option de ligne de commande code 39 caractères + 3 caractères)
Essayez simplement une approche différente ici: analysez le numéro du jour de la semaine (0..6) en tant que numéro du jour du mois (1..31).
Échantillon échantillon:
Notez que jq ne gère que les dates UTC.
Essayez-le en ligne!
la source
C,
35, 3427 octets-7 octets avec merci à @MartinEnder et @Dennis
Essayez-le en ligne!
la source
VBA 18 octets
Cela repose sur la fonction intégrée
date()
renvoyant un numéro de jour restant pour 1 si divisé par 7. Cela peut donc être spécifique au système d'exploitation et / ou à la CPU.Il s'exécute dans la fenêtre Immédiate du projet VBA.
la source
R ,
31 octets30 octetsEssayez-le en ligne!
Pas de sortie en dehors des dimanches,
Error: object 'a' not found
les dimanches.format(Sys.Date(),'%u')
C’est le moyen le plus rapide que j’ai trouvé d’obtenir un jour de la semaine. Il donne un numéro de classe de caractères pour le jour de la semaine et 7 pour le dimanche. Nous pouvons comparer à un nombre numérique 7, et si vrai tenter d'utiliser un objet non défini.Enregistré un octet grâce à Giuseppe!
la source
>6
est un octet plus court.Ocaml, 46 octets
et dans l’ocaml REPL, nous pouvons obtenir de meilleurs résultats en supprimant le
let
et le final:()
:soit 41 octets (y compris 1 octet pour le retour de transport).
la source
SAS, 36 octets
la source
TI-Basic 84+, 23 octets
Nécessite des commandes de date et d’heure, à partir de 84 ans seulement.
la source
MATL , 12 octets
L'erreur produite le dimanche est la suivante:
Courir sur Octave:
Courir sur Matlab:
Pour inverser le comportement (erreur chaque jour sauf le dimanche), ajoutez
~
après>
.Essayez-le en ligne!
Explication
Cela exploite le fait que
l'indexation dans un tableau vide avec l'index logique
false
est valide (et le résultat est un tableau vide, qui ne produit aucune sortie); tandis quel'indexation avec
true
provoque une erreur car il manque une première entrée dans le tableau.Code commenté:
la source
Q, 20 octets
.zd renvoie la date actuelle. mod fait le modulo de la date actuelle, ce qui retourne un int. Si la date est un dimanche, .zd mod 7 renvoie 1. Si 1 = 1, (le dimanche) et si une erreur est générée à l'aide de l'opérateur 'Par souci de brièveté, l'erreur est simplement le caractère e.
la source
C# (.NET Core),
555448 bytesTry it online!
Saved 1 byte thanks to Shaggy
Saved 5 byte thanks to Emigna
Saved 1 byte thanks to Kevin Cruijssen
Lucky that Sunday is indexed 0 in enum or else it would've needed to be
(System.DayOfWeek)7
la source
using System
for free in C#? If so I think you could do()=>{var k=1/(int)DateTime.Now.DayOfWeek;}
for 42. Otherwise 49 with the explicitSystem.
()=>{var k=1/(int)System.DateTime.Now.DayOfWeek;}
is shorter. And you can save one more byte by using an empty unused parameter instead of no parameter (i.e.v->{...}
instead of()->{...}
)()=>1/(int)System.DateTime.Now.DayOfWeek
. Try it here.Groovy, 16 bytes
Try it online!
la source
C,
6855 bytesThanks to @Ken Y-N for saving 13 bytes!
Try it online!
la source
d
to getn/=gmtime(&n)->tm_wday;
for 54 bytes (but I'm not sure I like all these compiler warnings...)R, 40 bytes
Try it online!
weekdays
returns the weekday of the date, with an optional argumentabbreviate
, which shortensSunday
toSun
, saving a single byte.stopifnot
throws an error if, for each argument, notall
areTRUE
, and throws an error with a message indicating the first element of which isn'tTRUE
, so the error isError: "Sun" is not TRUE
la source
APL (Dyalog), 23 bytes
Try it online!
la source
Gema, 40 characters
Had to specify an error message, so choose a short one: “S”.
Sample run:
la source
Funky, 21 bytes
os.date"%w"
returns the current day of the week in 0-6 format, where 0 is sunday. Getting the logical not of that is only true when the weekday is 0, so Sunday. Then just a basicif(a){error()}
will assure that this program only errors on sundayTry it online!
la source
Perl 6,
2921 bytesTry it
Try it
la source
Julia 0.5, 28 bytes
Try it online!
This does not work with 0.6, but it does with 0.4.
la source