Escriba un programa corto que tome un número positivo de segundos que represente una edad y genere una estimación de ese tiempo en inglés.
Su programa debe generar la cantidad de tiempo menos precisa que haya pasado, entre las siguientes métricas y sus duraciones en segundos:
second = 1
minute = 60
hour = 60 * 60
day = 60 * 60 * 24
week = 60 * 60 * 24 * 7
month = 60 * 60 * 24 * 31
year = 60 * 60 * 24 * 365
Ejemplos
input : output
1 : 1 second
59 : 59 seconds
60 : 1 minute
119 : 1 minute
120 : 2 minutes
43200 : 12 hours
86401 : 1 day
1815603 : 3 weeks
1426636800 : 45 years
Como puede ver arriba, después del tiempo de decir, 1 día (60 * 60 * 24 = 86400 segundos), ya no emitimos minutos u horas , sino solo días hasta que superamos el tiempo de una semana , y así.
Considere la cantidad de tiempo dada para ser una edad. Por ejemplo, después de 119 segundos, ha pasado 1 minuto , no 2.
Reglas
- Sin especificación para 0 o entradas negativas.
- Sigue la pluralización adecuada. Cada medida mayor que 1 debe incluir un
s
seguimiento de la palabra. - No puede utilizar una biblioteca preexistente que cumple la función de todo el programa.
- Este es un código de golf, el programa más corto gana los puntos de internet.
- ¡Que te diviertas!
Respuestas:
Jalea , 62 bytes
Un programa completo que imprime el resultado.
(Como enlace monádico, devuelve una lista de un entero seguido de caracteres)
Pruébalo en línea!
¿Cómo?
fuente
C,
194,180,144,128 caracteresGracias a @gastropher por las reducciones de código. ¡Olvidé que C permite parámetros implícitos usando funciones de estilo K&R! También gracias a @gmatht por la idea de poner literales dentro en lugar de matrices. ¡Extendí eso a los personajes
abusando deaprovechar caracteres /char16_t
cadenas anchas ! Sin embargo, al compilador no parece gustarle\1
en su forma ☺.Pruébalo en línea!
Solución original
Dividí las matrices en líneas separadas para que sea más fácil ver el resto de la solución.
Pruébalo en línea!
Al ejecutar los divisores en orden de mayor a menor, obtenemos la unidad de tiempo más gruesa. El programa se comporta mal si le das 0 segundos, pero como la especificación excluye explícitamente este valor, considero que es aceptable.
fuente
Perl 5 , 110 bytes
Pruébalo en línea!
fuente
Stax , 54 bytes
Ejecutar y depurarlo
Aquí está la representación ascii desempaquetada, sin golf, del mismo programa.
Después de la ejecución, dado que no hay otro resultado, la parte superior de la pila se imprime implícitamente.
Ejecute este
fuente
JavaScript (ES6), 131 bytes
Pruébalo en línea!
fuente
,
). Aprendí algo nuevo. Gran soluciónsplit
la matriz[',']
. Por lo tanto, esto solo funciona con funciones que fuerzan la coerción a una cadena.Java 8,
197195157 bytes-38 bytes gracias a @ OlivierGrégoire .
Explicación:
Pruébalo en línea.
fuente
/=
donde era necesario.n->{for(int t=60,d[]={1,t,t*=60,t*=24,t*7,t*31,t*365},x=7;;)if(n>=d[--x])return(n/=d[x])+" "+"second,minute,hour,day,week,month,year".split(",")[x]+(n>1?"s":"");}
(162 bytes), probablemente una buena base para jugar al golf.n/7+
lugar de(n/=7)+
etc.2678400
, la salida debería ser en1 month
lugar de1 months
(singular en lugar de plural).Kotlin ,
205203196 bytesPruébalo en línea!
fuente
T-SQL , 306 bytes (281 bytes sin E / S)
fuente
TRIM
no está definido, esto posiblemente debería serLTRIM
. Entreweek
yday
, usted tiene un+
, posiblemente debería ser un,
+
eso debería ser,
ay lo corregí ahora. Sin embargo, laTRIM
función está definida desde SQL Server 2017. Gracias.R , 157 bytes
Pruébalo en línea!
cut
es útil, ya que divide los rangos enfactor
s, que se almacenan internamente comointeger
s, lo que significa que también podemos usarlos como índices de matriz. Probablemente podamos hacer algo un poco más inteligente con los nombres de los períodos de tiempo, pero todavía no puedo entenderlo.fuente
APL + ganar,
88119 bytesLa versión original se perdió semanas y meses como lo señaló Phil H; (
Solicita la entrada en pantalla del número de segundos
Explicación
fuente
JavaScript (Node.js) , 177 bytes
Pruébalo en línea!
fuente
Lote, 185 bytes
fuente
Python 2 ,
146144 bytesPruébalo en línea!
2 bytes guardados gracias a Jonathan Allan
fuente
if n/x
Guarda un byte.0
guarda otro.PHP , 183 bytes
Pruébalo en línea!
fuente
Julia 0.6 , 161 bytes
Pruébalo en línea!
fuente
Rubí , 129 bytes
Pruébalo en línea!
fuente
Perl 6 / Rakudo 138 bytes
Estoy seguro de que hay más por recorrer, pero por ahora
Explicar:
fuente
R, 336
Trabajo en progreso
fuente
R , 246 bytes
Pruébalo en línea!
Esto está usando el formateo del tiempo en lugar de la aritmética, solo por el placer de hacerlo. ¿Quizás otros podrían hacer esto más pequeño?
fuente