Dado un número 1≤n≤365, muestra el enésimo día del año en formato "Día-mes número". Por ejemplo, dado 1, debe generar "1 de enero", sin "de".
Se utilizará el calendario gregoriano y el programa no debe tener en cuenta los años bisiestos, por lo que su programa nunca debería salir "29 de febrero" en ninguna circunstancia. Se puede utilizar cualquier método, siempre que siga el formato "Día-mes-mes" mencionado anteriormente. Su programa también debe generar ordinales correctamente, lo que significa que siempre debe generar 1º, 2º, 3º, 1, 2 o 3, respectivamente, deben ser los números de día para cualquier entrada. Se permiten espacios iniciales u otras sangrías.
Este es el código de golf, por lo que gana la solución más corta por personajes.
Casos de prueba:
1 gives 1st January
2 gives 2nd January
3 gives 3rd January
365 gives 31st December
60 gives 1st March
11 gives 11th January
11
(11 º de enero) y21
(21 st enero) a los casos de prueba.123=
era parte de la producción requerida. O simplemente edite sus casos de prueba para leer algo como:365
da31st December
Respuestas:
PHP ,
38403028 bytesPruébalo en línea!
Ejecutar con
php -nF
entrada es deSTDIN
. Ejemplo (script anterior nombradoy.php
):Explicación
Construya una marca de tiempo de época para el día deseado en 1970 (convenientemente no un año bisiesto) multiplicando el
day number * number of seconds per day
(86400). Sin embargo, esto produciría un día más, por lo tanto, multiplique pornumber of seconds in a day - 1
(86399) que para el rango de números de entrada (1≤n≤365) dará como resultado la marca de tiempo del final de cada día correcto. Luego, solo use el formato de fecha incorporado de PHP para la salida.fuente
-n
necesario?Jalea ,
79 7877 bytes-1 arreglando un error :) (no debería pre-transponer para encontrar el índice, debería post-revertir, pero luego podemos seguir la cola en lugar de la cabeza)
-1 usando la reflexión (
⁽©ṅB+30_2¦2
->⁽0ṗb4+28m0
)Un programa completo que imprime el resultado.
Pruébalo en línea!
¿Cómo?
actualizará esto más tarde ...
fuente
"thstndrd"
dividida en partes de tamaño 2 (.•oθ2(w•2ô
), así que gracias. :)C # (compilador interactivo de Visual C #) ,
11511310998 bytesGracias a @someone por guardar 9 bytes
Pruébalo en línea!
fuente
.code.tio(2,22): error CS0165: Use of unassigned local variable 'p'
Parece que la estructura no funciona.var g=new DateTime().AddDays(n-1)
funcionaPython 3.8 (prelanzamiento) , 112 bytes
Pruébalo en línea!
Por extraño que parezca, no tengo que poner entre paréntesis
d:=(t:=gmtime(~-x*86400)
, probablemente porque el intérprete solo verifica si hay()
caracteres alrededor de la expresión de asignación y no porque la expresión en sí está entre paréntesis.-2 gracias a gwaugh .
-5 gracias a xnor .
fuente
Perl 6 ,
166161 bytesPruébalo en línea!
Codifica todos los nombres de los meses, lo que ocupa la mayor parte del espacio. Hombre, Perl 6 realmente necesita un formateador de fecha adecuado.
fuente
Hack,
1155939 bytesComo @gwaugh llegó a la misma solución que la mía mientras jugaba al golf, en su lugar publico esto en Hack :).
fuente
mktime()
llamada; de lo contrario, devolverá la salida incorrecta si se ejecuta en un año bisiesto. (tuvo que hacer a mi respuesta).Javascript (ES6),
117113 bytesGuardado 4 bytes gracias a @tsh
Pruébalo en línea!
Comentado
Sin fecha incorporada, 188 bytes
Pruébalo en línea!
fuente
0
funcionaría como usar"en"
. Y cambiar atoLocaleString
ahorraría 4 bytes. 110 bytestoLocaleString
está usando la configuración predeterminada del sistema cuando se pasa una cadena no reconocida o un valor numérico. Entonces, puede ser cualquier cosa. Este parámetro es básicamente ineficaz en una instancia TIO, porque de todos modos solo se instalan configuraciones regionales en inglés .Smalltalk, 126 bytes
fuente
11th,12th,13th
? Si leí correctamente, divide el número entero por 10, pero eso significaría que resultaría11st,12nd,13rd
, a menos que algo más en el código solucione esto mientras no lo sepa.C # (compilador interactivo de Visual C #) ,
141139133124122 bytesGracias a Arnauld por el método más rápido de eliminar 11,12,13º ahorro de 4 bytes
Pruébalo en línea!
fuente
a=>{var d=s.AddDays(a-1);int x=d.Day,m=x%30%20;return x+"thstndrd"[(m<4?m*2:0)..2]+$" {d:MMMM}";};DateTime s
Sin embargo, el compilador interactivo no parece admitir el cambio de su nivel de lenguaje para "vista previa" en este momento.DataTime s
R ,
158134bytes-24 bytes @Nick Kennedy para jugar al golf 'st', 'nd', 'rd' y 'th'. ¡Gracias!
Pruébalo en línea!
fuente
`if`
mejor. Gracias.MySQL,
474542 bytes1901 se puede reemplazar por cualquier año que haya sido / no sea bisiesto.
Editar: ahorró dos bytes eliminando espacios y otros tres bytes cambiando el año a 1, gracias a @Embodyment of Ignorance .
fuente
1901, n
y la cadena?05AB1E ,
81797876757473717069 bytes-9 bytes gracias a @Grimy .
-1 byte gracias al
standard the
truco de @ JonathanAllan parath,st,nd,rd
, que utilizó en su respuesta de Jelly .Pruébelo en línea o verifique todos los casos de prueba posibles .
Explicación:
Vea este consejo 05AB1E mío para entender por qué:
”……‚應…ä†ï€¿…Ë…ê†Ä…æ…Ì…Í”
es"December January February March April May June July August September October November"
…thŠØ
es"th standards"
•ΘÏF•
es5254545
fuente
•EË7Óæ•S₂+
, pero tu golf -3 no funciona desafortunadamente. La indexación se ajusta automáticamente en 05AB1E, por lo5st,6nd,7rd,25st,26nd,27rd,29st
que estará mal. PD: si hubiera funcionado,<Ā
podría haber sido≠
por un -1 adicional. :)Á
).•C.ñÒā•
a•ΘÏF•º
, los dígitos adicionales no importan)bash,
8280 bytes-2 bytes gracias a @ ASCII-only
TIO
bash + fecha GNU, 77 bytes
fuente
Shell + coreutils,
11290 bytesPruébalo en línea! El enlace incluye casos de prueba. Editar: Guardado 22 bytes gracias a @NahuelFouilleul. Explicación:
Calcule el número de días después del primer día anterior a un año no bisiesto. (Lamentablemente, no puede hacer cálculos de fechas relativas
@-1
).Salida del día del mes (sin cero a la izquierda)
th
, y el nombre completo del mes.Arreglar
1st
,2nd
,3rd
,21st
,22nd
,23rd
y31st
.Restaurar
11th
a13th
.fuente
s
en eldays
se puede quitar, y19
en1969
Jalea ,
11511410197 bytesPruébalo en línea!
Largo para los estándares de Jelly, pero hecho desde los primeros principios.
Gracias a @JonathanAllan por guardar 13 bytes a través de una mejor comprensión de la compresión de cadenas.
fuente
“£ṢtẒ⁽ẹ½MḊxɲȧėAṅ ɓaṾ¥D¹ṀẏD8÷ṬØ»Ḳ¤
ahorraría 13 (Compress.dictionary busca un espacio líder y tiene un manejo especial para ello).Hojas de Google,
11810386 bytesNo puedo editar mi comentario , así que aquí hay una versión funcional del código de Google Sheets.
Pruébalo en línea!
fuente
Rojo , 124 bytes
Pruébalo en línea!
Agrega
n
: 1 días a 1-1-1 (1 de enero de 2001) para formar una fecha, que utiliza el método de Arnauld para indexar en sufijos de mes. Lástima que el rojo esté indexado en 1, esto requiere ajustes adicionales. Lo bueno es que Red sabe los nombres de los meses :)fuente
APL (NARS), 235 caracteres, 470 bytes
13561787 es el número que en la base 4 se puede sumar (12⍴28) para obtener la duración de cada mes ... prueba:
fuente
C (gcc) ,
174155bytesPruébalo en línea!
fuente
Python 3 , 95 bytes
Fecha y hora: P
from datetime import *;f=lambda s:(datetime(2019,1,1)+timedelta(days=s-1)).strftime("%d of %B")
Pruébalo en línea!
fuente
of
también es innecesario