Para calendários gregorianos, o formato da data varia de um país para outro. Existem três formatos principais reconhecidos:
YY-MM-DD
(big endian)DD-MM-YY
(pequeno endian)MM-DD-YY
(endian médio)
Sua tarefa é escrever um programa que, dada uma sequência de entrada representando uma data, produza todos os formatos de data possíveis pelos quais essa sequência pode ser interpretada como uma data.
Regras
- A data de entrada está no formato
xx-xx-xx
, onde cada campo tem dois dígitos e preenchimento com zero. - A data é sempre válida (portanto, você não pode obter coisas como 14-13-17)
- A data é sempre pelo menos um dos formatos acima (portanto, você não pode obter coisas como 17-14-11)
- Como estamos de fato em um mundo paralelo, existem 31 dias para cada mês do ano e, consequentemente, nenhum ano bissexto.
- A data é entre 01 de janeiro de 2001 e 31 de dezembro de 2099
- Se houver apenas um formato para a data, o código deverá imprimi-lo apenas (somente novas linhas à direita são permitidas)
- Se houver vários formatos para a data, eles deverão ser separados por vírgula, espaço, nova linha ou uma combinação desses
- Você deve exibir o nome exato do (s) formato (s). O uso de valores arbitrários distintos não é permitido.
- Nenhum caractere inicial ou final, exceto um espaço final, é permitido
- A saída deve estar em minúscula
- Você não tem permissão para usar nenhuma função interna de data ou calendário
- Os formatos de saída não precisam ser classificados
Exemplos
Input Output
30-05-17 big-endian, little-endian
05-15-11 middle-endian
99-01-02 big-endian
12-11-31 big-endian, little-endian, middle-endian
02-31-33 middle-endian
Isso é código-golfe, portanto o código mais curto em bytes vence. As explicações são incentivadas.
there are 31 days for every month of the year, and consequently no leap years
Então isso significa que qualquer biblioteca de datas é efetivamente inútil para isso?Respostas:
05AB1E , 40 bytes
Experimente online!
Explicação
fonte
Python 2 , 123 bytes
Experimente online!
Python 2 , menos análise de entrada, 123 bytes
Experimente online!
fonte
,
.JavaScript (ES6),
121119118112 bytesRetorna uma string delimitada por espaço com um espaço à direita.
Como?
Nós dividimos a entrada em um , b e c . Como a data é garantida como válida, sabemos com certeza que b é menor que 32. Portanto, é suficiente testar se a é menor que 13 para validar o formato da extremidade média. Os formatos little endian e big endian exigem que b seja menor que 13 e outro teste em a e c, respectivamente, para validar o dia.
Daí os 3 testes:
Casos de teste
Mostrar snippet de código
fonte
Bash,
240125116112 bytesGolfed.
Obrigado ao manatwork por algumas dicas
Salvou 9 bytes removendo a verificação para menos de 32 na resposta Arnauld da meia-extremidade seguinte
4 bytes salvos usando variáveis diferentes em vez de uma matriz
Teste-o!
fonte
C #, 180 bytes
Saídas com apenas valores separados por espaço, também podem ter espaços à esquerda e à direita. Será atualizado quando o OP tiver esclarecido sobre esse ponto, se necessário.
Versão completa / formatada:
fonte
No leading or trailing characters others than a trailing space are allowed
PHP, 151 bytes
Casos de teste
fonte
Lote, 138 bytes
Vagamente baseado na resposta de @ ovs.
fonte
Java 232 bytes
Aqui está uma versão melhor
Eu realmente não sabia como formatar esta parte ...
fonte
String e="-endian",b="big"+e,m="middle"+e,l="little"+e;
.PHP, 131 bytes
fonte