No está restringido a ningún lenguaje de programación.
Lo que digo es que le pasas 1 y regresa el lunes, 7 corresponde al domingo y así sucesivamente.
He logrado que una declaración de 146 bytes en Java haga lo mismo.
return (n<1?"invalid":(n<2?"monday":(n<3?"tuesday":(n<4?"wednesday":(n<5?"thursday":(n<6?"friday":(n<7?"saturday":(n<8?"sunday":"invalid"))))))));
Tu programa debe:
- salida de palabras completas (STDOUT)
- no bloquearse si la entrada es menor que 1 o mayor que 7
invalid
si la entrada no es válida? La pregunta no dice eso, pero el ejemplo lo sugiere.Respuestas:
Ruby, 69 o 38 bytes.
Aquí hay una manera simple de mejorar su código (escrito en Ruby pero funciona de manera similar en Java):
n
como índice.day
.Puede hacerlo aún más corto si importa los nombres de los días de la semana desde una biblioteca, como Ruby's:
Tenga en cuenta que ahora ya no disminuye
n
sino que tomo módulo 7 para asignar7
a0
. Esto es porqueDAYNAMES
comienza con el domingo.fuente
Bash: 47 bytes
Todavía no hay entrada bash? Estoy decepcionado ...
Utiliza los días de la semana actual y simplemente sustituye el último dígito (11-17 de agosto de 2014 - 11 es lunes, 12 es martes, etc.).
fuente
date -d $1sept +%A
también funciona (aunque solo este año; reduce los bytes a 6 * 9). GNUdate
es realmente flexible en ese asunto, por lo que debería haber posibilidades adicionales.date
lugar de Bash, ¡sería solo14-08-1$1
9 bytes!Marbelous
192191185181Código de salida distinto de cero si la entrada no es válida
Uso:
fuente
Javascript,
9588 bytes7 en binario es 0111, lo que significa que puede eliminar algunos caracteres con una operación bit a bit en lugar de
x>0&&x<8
.Editar: se eliminó la
s
matriz con la ayuda de edc65 .fuente
x=prompt();alert("Invalid 0Mon0Tue0Wednes0Thurs0Fri0Satur0Sun".split(0)[x&~7?0:x]+"day")
C # - 26 bytes
Espera que el día se almacene en el interior
n
.No se bloquea, como se esperaba.
Desarrollado por LINQPad ™
Un agradecimiento especial a bmarks y Stephan Schinkel por guardar bytes y doblar reglas, respectivamente
fuente
C #, 95 bytes
En C # puedes hacer algo como esto:
fuente
i<1
y puede guardar 2 bytes utilizando en|
lugar de||
(no en cortocircuito) y eliminando los corchetes alrededor de la condición. También es más corto crear y dividir una cadena de manera" mon tues wednes thurs fri satur sun".Split()[i]
que crear una matriz de cadena de este tamaño (observe el espacio al comienzo de la cadena, lo que ahorra restando 1 de i)BrainFuck extendido : 104
Sin Golf (Idiomático)
fuente
T-SQL 36
Asume que la variable se almacena en @. Si es una entrada no válida (@> 7 o @ <1), entonces no selecciona nada.
Editar: Aparentemente, una fecha puede ser un número. Se eliminaron 5 caracteres con eso.
Edición 2: Basado en la primera edición. Como es un int, no tengo que usar DATEADD (); Puedo usar la suma normal en su lugar.
fuente
Javascript 93 :(
fuente
q
es así-5
?Lua - 57 bytes
Lua tiene os.date () en su biblioteca estándar y tiene formato. Por lo tanto, puede pasar un tiempo (en este caso, "9e4 * (n + 3)") y solicitar la devolución del formato "% A", que son los nombres de los días de la semana. Además, muy útil en Lua es "a y b o c". Si a es verdadero (en el código a es "n> 0 yn <8") devuelve b, si a es falso (o nulo) devuelve c.
fuente
%A
sea necesarioMathematica
1916 bytesComo señaló el Dr. Rebmu, el 1 de enero de 1 AD es un buen lugar para comenzar. (Presumiblemente) cayó un lunes.
fuente
Golpe -
2119Suponiendo que la entrada está en variable
D
:HTML + PHP - 26
Dejar
$d
ser un texto de entradaLa marca de tiempo 86400 * 3 es el primer domingo desde el comienzo del mundo UNIX.
Puede probarlo ejecutando:
fuente
Perl, 60 bytes
Algo como esto:
Si desea devolver un mensaje y le preocupan los índices negativos, puede usar este (8 caracteres más):
fuente
Lua
13411911510098Básicamente el mismo pensamiento que MartinButtner tenía, excepto alrededor de
4.54.11.71.4 veces más. Asume quen
se almacena como una variable en otro lugar.fuente
n
ser almacenado en una variable, como en el fragmento del OP.Pitón (84)
Supongo que es una solución interesante. Toma una idea de otra respuesta que leí en alguna parte (no puedo encontrarla, sé que estaba en este sitio, así que si alguien sabe no dudes en decirme). La cadena se generó con el siguiente programa J:
Tomando algunas sugerencias sutiles de esta respuesta:
fuente
Bash
7448 + mensaje de errorUn enfoque diferente ya que todas las demás respuestas se centran en almacenar las cadenas de alguna forma.
fuente
sh
respuesta POSIX . Enbash
usted puede usar la evaluación aritmética.read x;((0<x&&x<8))&&date -d2007010$x +%A||echo out of range
Es más corto.||echo out of range
. Teniendo en cuenta que la solución aceptada no sigue las reglas (imprimir en stdout) ... Pero si desea seguir el ejemplo del OP, puede usar eninvalid
lugar deout of range
.Perl, 54
De STDIN a STDOUT, sin funciones de fecha, sin bloqueo.
fuente
PHP (56 bytes)
fuente
Clojure - 99 caracteres
Claro y simple, a pesar de mis mejores intentos (novato):
fuente
JS: 58
Suponiendo que n ya está almacenado como una variable.
Como una función ES6 (mismos supuestos): 67
Esto solo imprimirá "día" para 0 y recorrerá n> 7
fuente
day
para8
y comienza de nuevo desdeMonday
al9
.Rebmu : 21 caracteres
Correr:
Los números no válidos devolverán "ninguno".
Para aquellos que no están familiarizados con Rebmu, utiliza transiciones de casos para eliminar la necesidad de espaciado, dentro de los límites de lo que es legalmente analizable. En lugar de usar InitialCapsToBreak, usa CASEtransitionsTObreak, porque eso permite asignar un significado diferente a una ejecución inicial de mayúsculas si la ejecución inicial inicial está en minúsculas.
Por lo tanto, es equivalente al programa Rebol
pick system/locale/days a
. (Rebmu por convención nombra su parámetro de script como "a").Guarda un personaje sobre
system/locale/days/(a)
:-)fuente
Haskell - 62
Envuelve alrededor;
0
es domingo,8
es lunes, etc.Si se requiere imprimir en stdout ( 68 bytes , la salida está entre comillas dobles):
fuente
LiveScript - 49
Devuelve
undefinedday
si la entrada no es válida. ;)Si se requiere imprimir en stdout ( 60 bytes ):
fuente
Befunge-93 (
206208)Este fue divertido de escribir. Estoy seguro de que se puede hacer de una mejor manera, pero ... ¡funciona! =) Se puede probar aquí .
#
Hubiera sido aún más corto si saltara sobre cadenas enteras en lugar de solo la celda individual.La idea básica detrás de esto: obtener el número y seguir disminuyendo. Cada vez que lo disminuimos, el cursor se mueve hacia la derecha, se envuelve y se envía un nivel más bajo. Una vez que lleguemos a cero, muévete a la izquierda y presiona el (primera parte del) nombre del día. A partir de ese momento, el cursor se moverá directamente hacia la parte inferior donde se imprime la cadena y se agrega "día".
Puede ver cómo funciona utilizando la función "Paso" en el enlace al intérprete en línea.
Editar: logré eliminar dos bytes haciendo en
>:#,_
lugar de>,,,,,,
, que también es pretter.fuente
MATLAB: 33
MATLAB: 71
Haskell: 75
Haskell: 97
Python 3.4.1: 81
fuente
(0<n<8)
es más corto entonces(n in range(8))
.split()
también cuerda divididaJava 8 -
6964 caracteresAquí hay una expresión en Java 8, incluida la importación. Ahora mejorado (gracias a Tomáš Dvořák ):
Simplemente imprime
MONDAY
para valores falsos dei
fuente
Python - 87
No estoy viendo suficiente amor para dict's .get () Este espera
a
ser el númerofuente
day
su lista y agregarlas+"day"
al final de su código."mon,tues,...".split(",")
Python, 95 bytes
fuente
%
formatear, creando la lista a partir de una cadena usandosplit()
y eliminando espacios en blanco innecesarios."mon tues wednes thurs fri satur sun".split()[n-1]+"day"if 0<n<8else"invalid"
Pitón 2,
848364Suponiendo que n ya está almacenado como una variable.
fuente
Cobra - 43
fuente