Escreva um programa curto, que leva um número positivo de segundos representando uma idade e gera uma estimativa desse tempo em inglês.
Seu programa deve gerar a quantidade menos precisa de tempo decorrida, entre as seguintes métricas e seus comprimentos em 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
Exemplos
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 você pode ver acima, após o tempo, digamos, 1 dia (60 * 60 * 24 = 86400 segundos), não produzimos mais minutos ou horas , mas apenas alguns dias até ultrapassar o tempo de uma semana , e assim por diante.
Considere o período de tempo especificado como uma idade. Por exemplo, após 119 segundos, 1 minuto se passou , não 2.
Regras
- Nenhuma especificação para 0 ou entradas negativas.
- Siga a pluralização adequada. Toda medida maior que 1 deve incluir uma
s
sequência da palavra. - Você não pode usar uma biblioteca pré-existente que atenda à função de todo o programa.
- Este é um código de golfe, o programa mais curto ganha os pontos de internet.
- Diverta-se!
Respostas:
Geléia , 62 bytes
Um programa completo imprimindo o resultado.
(Como um link monádico, ele retorna uma lista de um número inteiro seguido por caracteres)
Experimente online!
Quão?
fonte
C,
194180144128 caracteresObrigado a @gastropher pelas reduções de código. Esqueci que C permite parâmetros implícitos usando funções no estilo K & R! Agradeço também ao @gmatht pela idéia de colocar literais dentro, em vez de matrizes. Eu estendi isso aos personagens
abusando,tirando proveito de caracteres /char16_t
strings amplos ! O compilador não parece gostar\1
da sua forma though.Experimente online!
Solução original
Dividi as matrizes em linhas separadas para facilitar a visualização do restante da solução.
Experimente online!
Executando os divisores na ordem do maior para o menor, obtemos a unidade de tempo mais grossa. O programa se comporta mal se você der 0 segundos, mas como a especificação exclui explicitamente esse valor, considero aceitável.
fonte
Perl 5 , 110 bytes
Experimente online!
fonte
Stax , 54 bytes
Execute e depure
Aqui está a representação ASCII descompactada e não empacotada do mesmo programa.
Após a execução, como não há outra saída, a parte superior da pilha é impressa implicitamente.
Execute este
fonte
JavaScript (ES6), 131 bytes
Experimente online!
fonte
,
). Eu aprendi algo novo. Ótima solução.split
é a matriz[',']
. Portanto, isso funciona apenas com funções que forçam coerção a uma string.Java 8,
197195157 bytes-38 bytes graças a @ OlivierGrégoire .
Explicação:
Experimente online.
fonte
/=
para onde necessário.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), provavelmente uma boa base para jogar golfe.n/7+
, em vez de(n/=7)+
etc.2678400
, a saída deve ser em1 month
vez de1 months
(singular em vez de plural).KOTLIN ,
205203196 bytesExperimente online!
fonte
T-SQL , 306 bytes (281 bytes sem E / S)
fonte
TRIM
não está definido, isso possivelmente deveria serLTRIM
. Entreweek
eday
, você tem um+
, deve ser um,
+
, deveria ser um,
e eu o corrigi agora. No entanto, aTRIM
função está definida desde o SQL Server 2017. Obrigado.R , 157 bytes
Experimente online!
cut
é útil, pois divide os intervalos emfactor
s, que são armazenados internamente comointeger
s, o que significa que também podemos usá-los como índices de array. Provavelmente, podemos fazer algo um pouco mais inteligente com os nomes dos períodos, mas ainda não consigo descobrir.fonte
APL + WIN,
88119 bytesA versão original perdeu semanas e meses, como apontado por Phil H; (
Solicita a entrada na tela do número de segundos
Explicação
fonte
JavaScript (Node.js) , 177 bytes
Experimente online!
fonte
Lote, 185 bytes
fonte
Python 2 ,
146144 bytesExperimente online!
2 bytes salvos graças a Jonathan Allan
fonte
if n/x
salva um byte.0
salva outra.PHP , 183 bytes
Experimente online!
fonte
Julia 0.6 , 161 bytes
Experimente online!
fonte
Ruby , 129 bytes
Experimente online!
fonte
Perl 6 / Rakudo 138 bytes
Tenho certeza de que há mais a seguir, mas por enquanto
Explicar:
fonte
R, 336
Trabalho em progresso
fonte
R , 246 bytes
Experimente online!
Isso é usar formatação de tempo em vez de aritmética, apenas para o inferno. Talvez outros possam tornar isso menor?
fonte