Inspirado por Tuvimos una prueba de unidad una vez que solo falló los domingos , escribimos un programa o función que no hace nada más que arrojar un error cuando es domingo y salir con gracia cualquier otro día.
Reglas:
- No use la entrada o muestre la salida a través de los métodos de E / S habituales , excepto para imprimir en STDERR o el equivalente de su idioma. Puede imprimir en STDOUT si es un subproducto de su error.
- Una función puede devolver un valor los no domingos siempre que no imprima nada
- Su programa puede usar un domingo desde cualquier zona horaria, o la zona horaria local, siempre que sea consistente.
- Un error es algo que hace que el programa finalice de manera anormal , como un error de división por cero o el uso de una variable no inicializada. Esto significa que si se agregara un código después de la parte que contiene errores, no se ejecutará el domingo.
- También puede usar declaraciones que creen manualmente un error, equivalente al de Python
raise
. - Esto incluye errores de tiempo de ejecución, errores de sintaxis y errores durante la compilación (¡buena suerte con eso!)
- También puede usar declaraciones que creen manualmente un error, equivalente al de Python
- En un error debe haber algún signo que lo distinga de no tener error
- Este es el código de golf , por lo que gana el bytecount más corto en cada idioma.
Tendré que esperar hasta el domingo para verificar las respuestas;)
code-golf
date
error-message
Jo King
fuente
fuente
print "error"
un error? El párrafo agregado realmente no aclara nada.Respuestas:
Bash + coreutils,
1514 bytesPruébalo en línea!
fuente
PHP 7, 12 bytes
En PHP 7 arroja una excepción de tipo
DivisionByZero
los domingos. Lo mismo sucede si se interpreta con HHVM .En PHP 5 muestra una advertencia (activada
stderr
) los domingos:En cualquier versión de PHP, no muestra nada los otros días de la semana.
Ejecutar usando la CLI:
o pruébalo en línea!
Dos bytes más pueden ser exprimidos por extracción de las comillas (
1%date(w);
), pero esto provoca un aviso (que puede ser suprimida por estar adecuadamente ajustadoerror_reporting = E_ALL & ~E_NOTICE
enphp.ini
).fuente
1%date("w");echo "Alive!"
, se detendrá en PHP7 + y HHVM, pero no en todas las otras versiones desde PHP 4.PHP, 15 bytes
Asume la configuración predeterminada .
Salida los domingos
Pruébalo en línea!
fuente
||\n
lugar de?:\n
.Java 8,
694334 bytes-26 bytes gracias a @ OlivierGrégoire .
-9 bytes gracias a @Neil .
Explicación:
Pruébalo aquí
v->{...}
( parámetro no utilizadoVoid
null
) es un byte más corto que()->{...}
(sin parámetro).new java.util.Date().getDay()
devolverá 0-6 de domingo a sábado, por1/...
lo que dará unjava.lang.ArithmeticException: / by zero
error si el valor es 0, lo que solo ocurre los domingos.fuente
v->{int i=1/new java.util.Date().getDay();}
(43 bytes).java.util.Date()
tiene un método para obtener el día de la semana ... Y es incluso 0 para el domingo ... No estoy seguro de cómo me perdí eso. : SPython 3 , 33 bytes
Pruébalo en línea!
Python 3 , 50 bytes
Pruébalo en línea!
Guardado ~ 3 bytes gracias a Rod .
fuente
"Su"in time.ctime()>q
(estaba editando con este)?"Su"in time.ctime()
comprueba si el día actual es domingo. Si esto es falso, la>q
parte no se evalúa en absoluto y todo sale sin problemas. Pero si eso es cierto, entonces se evalúa la segunda parte de la desigualdad, y comoq
no está definida, esto arrojaría unNameError
.("Su" in time.ctime()) and (time.ctime() > q)
.Pyth ,
87 bytesPruébalo en línea!
Explicación
fuente
1.0
no se genera por el error ). El OP dijo explícitamente que no lo permiten. Sin embargo, puede arreglar eso anteponiendo un solo espacio a su códigoHaskell + Data . Fechas , 55 bytes
Pruébalo en línea!
Esto utiliza el hecho de que el domingo es el último día de la semana.
dateWeekDay
devuelve el día de la semana como unWeekDay
tipo, que simplemente se define comoWeekDay
es una instancia deEnum
, por lo tanto, podemos usarsucc
ypred
para obtener el sucesor o predecesor de un día de la semana, por ejemplo,succ Monday
rendimientosTuesday
.Sin embargo,
Sunday
es la última entrada de enumeración, por lo que llamarsucc Sunday
produce el siguiente error:Edición 1: ¡Gracias a nimi por -3 bytes!
Edición 2: -11 bytes ahora que las funciones están permitidas.
Programa completo:
8881746966 bytesPruébalo en línea!
pure
es necesario para levantar el resultado deWeekDay
nuevo a la Mónada IO. Sin embargo, Haskell ve que el programa no genera el valor de ninguna manera, por flojo que sea, la expresión no se evalúa, por lo que incluso los domingos el programa no fallará. Esta es la razón por$!
se necesita, lo que obliga a la evaluación incluso si Haskell normalmente no evaluaría la expresión.Enfoque previo con
Data.Time
:127124bytesPruébalo en línea! Estas son algunas importaciones impresionantes. Cambie
d<7
a, por ejemplo,d/=5
para probar el fracaso un viernes Falla con la siguiente excepción:Non-exhaustive patterns in function c
.fuente
main=pure$!succ.dateWeekDay<$>getCurrentDateTime
. Y, como las funciones están permitidas, puede soltar elmain=
.No using input or showing output through the usual IO methods
regla. Por lo que veo, el uso de una función daría como resultado una salida para no domingos, aunque esté envuelto en una acción IO.05AB1E ,
4544 bytesComo 05AB1E no tiene incorporado el día de la semana, he usado la regla de Zeller para calcularlo.
Imprime una nueva línea en stderr en caso de un domingo (observable en la vista de depuración en TIO)
Pruébalo en línea!
Explicación
La fórmula general utilizada es
DoW = d + [(13*(m+1))/5] + y + [y/4] + [c/4] - 2*c
Donde
DoW=day of week
,d=day
,m=month
,y=last 2 digits of year
,c=century
y y la expresión entre paréntesis ([]
) es hacia abajo redondeado.Cada mes usado en la fórmula corresponde a un número, donde
Jan=13,Feb=14,Mar=3,...,Dec=12
Como tenemos el mes actual en el formato más común
Jan=1,...,Dec=12
, convertimos el mes usando la fórmulam = (m0 + 11) % 14 + 1
Como un biproducto de marzo es el primer mes, enero y febrero pertenecen al año anterior, por lo que el cálculo para determinar se
y
convierte eny = (year - (m0 < 3)) % 100
El valor final para
DoW
obtener es un int donde0=Sat,1=Sun,...,6=Fri
.Ahora podemos arrojar explícitamente un error si el resultado es verdadero.
fuente
JavaScript, 23 bytes
Programa completo
La variable
k
no debe definirse.JavaScript, 20 bytes por Rick Hitchcock
JavaScript, 19 bytes por apsillers
fuente
_=>
; sin él, este es un fragmento que no está permitido por defecto. 2) Estofalse
sale en días alternos cuando no debería generar nada./Su/.test(Date())&&k
por 20 bytes.new Date
versión 25 bytes(new Date/864e5%7|0)-3||p
match
lugar:Date().match`Su`&&k
VBA / VBScript,
2220 bytesGuardado 2 bytes gracias a Taylor Scott.
Esto debe ejecutarse en la ventana Inmediato.
Weekday()
devuelve 1 (domingo) a 7 (sábado) por lo que esto crea un error de división por cero el domingo. De lo contrario, no hay salida.fuente
?1/(Weekday(Now)-1)
Now
es válido sin el()
VBA pero no puedo usar print porque creo que no se permite la salida a menos que se produzca un error.No using input or showing output through the usual IO methods, except to print to STDERR
. Aún así, guardado 2 bytes.Rubí, 15 bytes
wday
devolverá 0 el domingo causando un error ZeroDivisionError: dividido por 0. Por ejemplo:1/Time.new(2018,1,7).wday
.fuente
Perl 5 , 13 bytes
Pruébalo en línea!
Portado @ biketire's answerj
eliminado 3 bytes con el recordatorio de @ mik
fuente
gmtime
en lugar delocaltime
, cubrirán también las reglas, y es de 3 bytes más cortojq, 42 caracteres
(Código de 39 caracteres + opción de línea de comando de 3 caracteres)
Intentando un enfoque diferente aquí: analizar el número del día de la semana (0..6) como el número del día del mes (1..31).
Ejecución de muestra:
Tenga en cuenta que jq solo maneja fechas UTC.
Pruébalo en línea!
fuente
C,
35, 3427 bytes-7 bytes con agradecimiento a @MartinEnder y @Dennis
Pruébalo en línea!
fuente
VBA 18 bytes
Esto se basa en la función incorporada que
date()
devuelve un número de día que queda 1 si se divide entre 7, por lo que puede ser específico del sistema operativo y / o de la CPU.Se ejecuta en la ventana Inmediato del proyecto VBA.
fuente
R ,
31 bytes30 bytesPruébalo en línea!
No hay salida en no domingos,
Error: object 'a' not found
los domingos.format(Sys.Date(),'%u')
fue la forma más corta que pude encontrar para obtener el día de la semana, emite un número de clase de personaje para el día de la semana, con 7 para los domingos. Podemos compararlo con un 7 numérico, y si es verdadero intento de usar un objeto indefinido.¡Ahorré un byte gracias a Giuseppe!
fuente
>6
Es un byte más corto.Ocaml, 46 bytes
y en el ocaml REPL, podemos lograr mejores eliminando el
let
y el final:()
:que es de 41 bytes (incluido 1 byte para el retorno de carro).
fuente
SAS, 36 bytes
fuente
TI-Basic 84+, 23 bytes
Necesita comandos de fecha y hora, que son 84+ y superiores solamente.
fuente
MATL , 12 bytes
El error producido los domingos es:
Corriendo en Octave:
Corriendo en Matlab:
Para invertir el comportamiento (error en cualquier día excepto los domingos), agregue
~
después>
.Pruébalo en línea!
Explicación
Esto explota el hecho de que
la indexación en una matriz vacía con el índice lógico
false
es válida (y el resultado es una matriz vacía, que no produce salida); mientrasindexar con
true
causa un error porque la matriz carece de una primera entrada.Código comentado:
fuente
Q, 20 bytes
.zd devuelve la fecha actual. mod hace el módulo de la fecha actual, que devuelve un int. Si la fecha es un domingo, .zd mod 7 devuelve 1. Si 1 = 1, (el domingo), y el error se genera utilizando el operador 'Por brevedad, el error es solo el carácter e.
fuente
C # (.NET Core) ,
555448 bytesPruébalo en línea!
Guardado 1 byte gracias a Shaggy
Guardado 5 bytes gracias a Emigna
Guardado 1 byte gracias a Kevin Cruijssen
Afortunadamente ese domingo está indexado 0 en enumeración o de lo contrario habría sido necesario
(System.DayOfWeek)7
fuente
using System
gratis en C #? Si es así, creo que podrías hacerlo()=>{var k=1/(int)DateTime.Now.DayOfWeek;}
por 42 . De lo contrario 49 con lo explícitoSystem.
()=>{var k=1/(int)System.DateTime.Now.DayOfWeek;}
Es más corto. Y puede guardar un byte más utilizando un parámetro vacío no utilizado en lugar de ningún parámetro (es decir, env->{...}
lugar de()->{...}
)()=>1/(int)System.DateTime.Now.DayOfWeek
. Pruébalo aquí .Groovy , 16 bytes
Pruébalo en línea!
fuente
C,
6855 bytes¡Gracias a @Ken YN por guardar 13 bytes!
Pruébalo en línea!
fuente
d
para obtenern/=gmtime(&n)->tm_wday;
54 bytes (pero no estoy seguro de que me gusten todas estas advertencias del compilador ...)R , 40 bytes
Pruébalo en línea!
weekdays
devuelve el día de la semana de la fecha, con un argumento opcionalabbreviate
, que acortaSunday
aSun
, el ahorro de un solo byte.stopifnot
arroja un error si, para cada argumento, noall
sonTRUE
, y arroja un error con un mensaje que indica que el primer elemento no esTRUE
, entonces el error esError: "Sun" is not TRUE
fuente
APL (Dyalog) , 23 bytes
Pruébalo en línea!
fuente
Gema , 40 personajes
Tenía que especificar un mensaje de error, así que elija uno corto: "S".
Ejecución de muestra:
fuente
Funky , 21 bytes
os.date"%w"
devuelve el día actual de la semana en formato 0-6, donde 0 es domingo. Obtener el no lógico de eso solo es cierto cuando el día de la semana es 0, entonces el domingo. Entonces solo un básicoif(a){error()}
asegurará que este programa solo produzca errores el domingoPruébalo en línea!
fuente
Perl 6 ,
2921 bytesIntentalo
Intentalo
fuente
Julia 0.5 , 28 bytes
Pruébalo en línea!
Esto no funciona con 0.6, pero sí con 0.4.
fuente