Dado um número 1≤n≤365, produza o enésimo dia do ano no formato "Dia número do mês". Por exemplo, dado 1, você deve exibir "1º de janeiro", sem "de".
O calendário gregoriano será usado e o programa não deve contabilizar anos bissextos; portanto, seu programa nunca deve exibir "29 de fevereiro" em nenhuma circunstância. Qualquer método pode ser usado, desde que siga o formato "Dia número do mês" mencionado anteriormente. Seu programa também deve produzir ordinais corretamente, o que significa que sempre deve gerar 1º, 2º, 3º, 1, 2 ou 3, respectivamente, os números dos dias de qualquer entrada. Espaços à esquerda ou outro recuo são permitidos.
Isso é código de golfe, então a solução mais curta por caracteres vence.
Casos de teste:
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 th janeiro) e21
(21 st janeiro) para os casos de teste.123=
fazia parte da saída necessária. Ou simplesmente edite seus casos de teste para ler algo como:365
gives31st December
Respostas:
PHP ,
38.40.3028 bytesExperimente online!
Executar com
php -nF
entrada é deSTDIN
. Exemplo (script acima nomeadoy.php
):Explicação
Construa um registro de data e hora da época para o dia desejado em 1970 (convenientemente não é um ano bissexto) multiplicando o
day number * number of seconds per day
(86400). No entanto, isso renderia um dia mais alto e, em vez disso, se multiplicaria pornumber of seconds in a day - 1
(86399) que, para o intervalo de números de entrada (1≤n≤365), resultará no registro de data e hora do final de cada dia correto. Em seguida, basta usar a formatação de data interna do PHP para saída.fonte
-n
necessário?Geléia ,
79 7877 bytes-1 corrigindo um bug :) (não deve pré-transpor para encontrar o índice, deve pós-inverter, mas depois podemos ajustar em vez de avançar)
-1 usando reflexão (
⁽©ṅB+30_2¦2
->⁽0ṗb4+28m0
)Um programa completo que imprime o resultado
Experimente online!
Quão?
atualizará isso mais tarde ...
fonte
"thstndrd"
dividida em partes do tamanho 2 (.•oθ2(w•2ô
), então, obrigado. :)C # (compilador interativo do Visual C #) ,
11511310998 bytesObrigado a alguém por salvar 9 bytes
Experimente online!
fonte
.code.tio(2,22): error CS0165: Use of unassigned local variable 'p'
Parece que a coisa struct não funciona.var g=new DateTime().AddDays(n-1)
funciona emboraPython 3.8 (pré-lançamento) , 112 bytes
Experimente online!
Por incrível que pareça, não preciso colocar parênteses
d:=(t:=gmtime(~-x*86400)
, provavelmente porque o intérprete verifica apenas se há()
caracteres em torno da expressão de atribuição e não se a expressão em si está entre parênteses.-2 graças a gwaugh .
-5 graças a xnor .
fonte
Perl 6 ,
166161 bytesExperimente online!
Codifica todos os nomes dos meses, ocupando a maior parte do espaço. Cara, o Perl 6 realmente precisa de um formatador de data adequado.
fonte
Hack,
1155939 bytesComo o @gwaugh chegou à mesma solução que a minha enquanto jogava golfe, estou postando isso no Hack :).
fonte
mktime()
chamada, caso contrário, ele retornará a saída errada se for executado em um ano bissexto. (teve que fazer a minha resposta).JavaScript (ES6),
117113 bytesGuardado 4 bytes graças a @tsh
Experimente online!
Comentado
Sem data incorporada, 188 bytes
Experimente online!
fonte
0
funcionaria como o uso"en"
. E mudar paratoLocaleString
economizaria 4 bytes. 110 bytestoLocaleString
está usando as configurações padrão do sistema quando é transmitida uma string não reconhecida ou um valor numérico. Então, pode ser qualquer coisa. Esse parâmetro é basicamente ineficaz em uma instância do TIO, porque apenas as localidades em inglês são instaladas de qualquer maneira.Smalltalk, 126 bytes
fonte
11th,12th,13th
? Se eu ler corretamente, você divide o número inteiro por 10, mas isso significaria que isso resultaria11st,12nd,13rd
, a menos que algo mais no código corrija isso enquanto eu não o conheço.C # (compilador interativo do Visual C #) ,
141139133124122 bytesAgradecimentos a Arnauld pelo método mais rápido de remover 11,12,13th economizando 4 bytes
Experimente online!
fonte
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
O compilador interativo parece não suportar a alteração de seu nível de idioma para "visualização" no momento.DataTime s
R ,
158134 bytes-24 bytes @Nick Kennedy por jogar golfe em 'st', 'nd', 'rd' e 'th'. Obrigado!
Experimente online!
fonte
`if`
melhor. Obrigado.MySQL,
474542 bytes1901 pode ser substituído por qualquer ano que foi / não é um ano bissexto.
Editar: salvou dois bytes removendo espaços e outros três bytes alterando o ano para 1, graças a @Embodyment of Ignorance .
fonte
1901, n
e a string?05AB1E ,
81797876757473717069 bytes-9 bytes graças a @Grimy .
-1 byte, graças ao
standard the
truque de @ JonathanAllanth,st,nd,rd
, que ele usou em sua resposta Jelly .Experimente online ou verifique todos os casos de teste possíveis .
Explicação:
Veja esta minha dica 05AB1E para entender o porquê:
”……‚應…ä†ï€¿…Ë…ê†Ä…æ…Ì…Í”
é"December January February March April May June July August September October November"
…thŠØ
é"th standards"
•ΘÏF•
é5254545
fonte
•EË7Óæ•S₂+
, mas o seu -3 de golfe não funciona infelizmente. A indexação é agrupada automaticamente em 05AB1E, portanto, isso5st,6nd,7rd,25st,26nd,27rd,29st
estará errado. PS: se tivesse funcionado,<Ā
poderia ter sido≠
por um -1 adicional. :)Á
).•C.ñÒā•
para•ΘÏF•º
, os dígitos extras não importam)bash,
8280 bytes-2 bytes graças a @ ASCII-only
TIO
data do bash + GNU, 77 bytes
fonte
Shell + coreutils,
11290 bytesExperimente online! O link inclui casos de teste. Editar: salvou 22 bytes graças a @NahuelFouilleul. Explicação:
Calcule o número de dias após o primeiro dia anterior a um ano sem salto. (Infelizmente você não pode fazer cálculos de data relativa a partir de
@-1
.)Produza o dia do mês (sem zero à esquerda)
th
e o nome completo do mês.Arrumar
1st
,2nd
,3rd
,21st
,22nd
,23rd
e31st
.Restaurar
11th
para13th
.fonte
s
nodays
pode ser removido, e19
em1969
Gelatina ,
11511410197 bytesExperimente online!
Long por padrões de geléia, mas feito a partir dos primeiros princípios.
Agradecemos a JonathanAllan por salvar 13 bytes através de uma melhor compreensão da compactação de strings.
fonte
“£ṢtẒ⁽ẹ½MḊxɲȧėAṅ ɓaṾ¥D¹ṀẏD8÷ṬØ»Ḳ¤
economizaria 13 (o Compress.dictionary procura um espaço à esquerda e possui um tratamento especial).Planilhas Google,
11810386 bytesComo não consigo editar meu comentário , aqui está uma versão funcional do código do Planilhas Google.
Experimente Online!
fonte
Vermelho , 124 bytes
Experimente online!
Adiciona
n
- 1 dias a 1-1-1 (1 de janeiro de 2001) para formar uma data, que usa o método de Arnauld para indexar em sufixos de mês. Pena que o vermelho seja indexado em 1, isso requer ajustes adicionais. O bom é que Red sabe os nomes dos meses :)fonte
APL (NARS), 235 caracteres, 470 bytes
13561787 é o número que pode ser somado na base 4 (12⍴28) para obter o comprimento de cada mês ... test:
fonte
C (gcc) ,
174155 bytesExperimente online!
fonte
Python 3 , 95 bytes
Datetimed it: P
from datetime import *;f=lambda s:(datetime(2019,1,1)+timedelta(days=s-1)).strftime("%d of %B")
Experimente online!
fonte
of
também é desnecessário