Écrivez un programme court qui prend un nombre positif de secondes représentant un âge et produit une estimation de ce temps en anglais.
Votre programme doit générer le temps le moins précis qui s'est écoulé, parmi les mesures suivantes et leur durée en secondes:
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
Exemples
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
Comme vous pouvez le voir ci-dessus, après le temps de dire 1 jour (60 * 60 * 24 = 86400 secondes), nous ne produisons plus de minute (s) ou d'heure (s) , mais seulement des jours avant de dépasser le temps d'une semaine , etc.
Considérez la durée donnée comme un âge. Par exemple, après 119 secondes, 1 minute s'est écoulée , pas 2.
Règles
- Aucune spécification pour 0 ou entrées négatives.
- Suivez la bonne pluralisation. Chaque mesure supérieure à 1 doit inclure un
s
suivant le mot. - Vous ne pouvez pas utiliser une bibliothèque préexistante qui remplit la fonction de l'ensemble du programme.
- Il s'agit d'un code de golf, le programme le plus court remporte les points Internet.
- S'amuser!
Réponses:
Gelée , 62 octets
Un programme complet imprimant le résultat.
(En tant que lien monadique, il renvoie une liste d'un entier suivi de caractères)
Essayez-le en ligne!
Comment?
la source
C,
194180144128 caractèresMerci à @gastropher pour les réductions de code. J'ai oublié que C permet des paramètres implicites en utilisant des fonctions de style K & R! Merci également à @gmatht pour l'idée de mettre des littéraux à l'intérieur au lieu de tableaux. J'ai étendu cela aux personnages en
abusanten profitant des caractères /char16_t
chaînes larges ! Le compilateur ne semble cependant pas aimer\1
sa forme ☺.Essayez-le en ligne!
Solution originale
J'ai divisé les tableaux en lignes distinctes pour faciliter la visualisation du reste de la solution.
Essayez-le en ligne!
En exécutant les diviseurs dans l'ordre du plus grand au plus petit, nous obtenons l'unité de temps la plus grossière. Le programme se comporte mal si vous lui donnez 0 seconde, mais comme la spécification exclut explicitement cette valeur, je considère que cela est acceptable.
la source
Perl 5 , 110 octets
Essayez-le en ligne!
la source
Stax , 54 octets
Exécuter et déboguer
Voici la représentation ascii non emballée et non golfée du même programme.
Après l'exécution, puisqu'il n'y a pas d'autre sortie, le haut de la pile est imprimé implicitement.
Exécutez celui-ci
la source
JavaScript (ES6), 131 octets
Essayez-le en ligne!
la source
,
). J'ai appris quelque chose de nouveau. Excellente solution.split
est le tableau[',']
. Par conséquent, cela ne fonctionne qu'avec les fonctions qui forcent la coercition sur une chaîne.Java 8,
197195157 octets-38 octets grâce à @ OlivierGrégoire .
Explication:
Essayez-le en ligne.
la source
/=
là où c'était nécessaire.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 octets), probablement une bonne base pour le golf.n/7+
au lieu de(n/=7)+
etc.2678400
, la sortie doit être à la1 month
place de1 months
(singulier au lieu de pluriel).Kotlin ,
205203196 octetsEssayez-le en ligne!
la source
T-SQL , 306 octets (281 octets sans E / S)
la source
TRIM
n'est pas définie, cela devrait l'êtreLTRIM
. Entreweek
etday
, vous avez un+
, devrait éventuellement être un,
+
cela devrait être un,
et je l'ai corrigé maintenant. Cependant, laTRIM
fonction est définie depuis SQL Server 2017. Merci.R , 157 octets
Essayez-le en ligne!
cut
est pratique, car il divise les plages enfactor
s, qui sont stockées en interne en tant queinteger
s, ce qui signifie que nous pouvons également les utiliser comme indices de tableau. Nous pouvons probablement faire quelque chose d'un peu plus intelligent avec les noms de période, mais je ne peux pas encore le comprendre.la source
APL + WIN,
88119 octetsLa version originale a manqué des semaines et des mois, comme l'a souligné Phil H; (
Demande à l'écran la saisie du nombre de secondes
Explication
la source
JavaScript (Node.js) , 177 octets
Essayez-le en ligne!
la source
Lot, 185 octets
la source
Python 2 ,
146144 octetsEssayez-le en ligne!
2 octets économisés grâce à Jonathan Allan
la source
if n/x
enregistre un octet.0
enregistre un autre.PHP , 183 octets
Essayez-le en ligne!
la source
Julia 0,6 , 161 octets
Essayez-le en ligne!
la source
Rubis , 129 octets
Essayez-le en ligne!
la source
Perl 6 / Rakudo 138 octets
Je suis sûr qu'il y a encore du chemin à parcourir, mais pour l'instant
Expliquez:
la source
R, 336
Travail en cours
la source
R , 246 octets
Essayez-le en ligne!
Cela utilise le formatage du temps au lieu de l'arithmétique, juste pour l'enfer. Peut-être que d'autres pourraient réduire cela?
la source