Dada uma data escrita em qualquer (deve lidar com tudo no mesmo programa) dos seguintes formatos, analise-a em um válido yyyy/mm/dd date
.
17th May 2012
March 14th, 2016
20 February 2014
September 14, 2017
Sunday, June 8, 2015
Regras
- As datas às vezes serão inválidas, ou seja. dia incorreto do mês ou número de meses em um ano, você deve lidar com os dois casos. Ao errar ou retornar um valor consistente de falsey, você escolhe. (No entanto, eles seguirão os formatos de modelo acima)
- Preenchimento por dias e meses menor que 10 deve ser usado para criar uma saída de dois dígitos.
- Os nomes dos meses sempre serão o nome completo, não abreviados para os três caracteres correspondentes.
- Você pode assumir que o ano sempre estará dentro do intervalo 0000-9999.
- Números negativos não precisam ser manipulados.
- Você pode criar um programa ou função completo para que a saída possa estar em qualquer formato, impressa no console ou retornada de uma função.
- A entrada sempre será uma cadeia de caracteres, a saída sempre deve ser uma cadeia de caracteres, se torna mais curto aceitá-la como um argumento único em uma matriz, por exemplo.
["17th May 2012"]
você pode fazê-lo e a saída pode ser a mesma["2012/05/17"]
- Você pode assumir que a ortografia na entrada estará correta.
BÔNUS: porque quem aqui não gosta de desafios;)
Se você também pode permitir os formatos de entrada The Fourteenth of March, 2016
ou March the Fourteenth, 2016
retirar um extra de 20 bytes do seu código com qualquer contagem de bytes final menor que 1, resultando em 1.
Aqui estão os números escritos completos para cada um dos dias para evitar qualquer confusão quanto à ortografia.
First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Nineth, Tenth, Eleventh, Twelfth, Thirteenth, Fourteenth, Fifteenth, Sixteenth, Seventeenth, Eighteenth, Nineteenth, Twentieth, Twenty First, Twenty Second, Twenty Third, Twenty Fourth, Twenty Fifth, Twenty Sixth, Twenty Seventh, Twenty Eighth, Twenty Nineth, Thirtieth, Thirty First
Casos de teste
INPUT | Output
17th May 2012 | 2012/05/17
March 14th, 2016 | 2016/03/14
20 February 2014 | 2014/02/20
September 14, 2017 | 2017/09/14
Sunday, June 8, 2015 | 2015/06/08
1st January 1918 | 1918/01/01
The Fourteenth of March, 2016 | 2016/03/14
March the Fourteenth, 2016 | 2016/03/14
November the Seventeenth, 2019 | 2019/11/17
The Thirtieth of April, 2016 | 2016/04/30
30 February 2014 | Invalid
September 99, 2017 | Invalid
Sunday, June8, 2015 | Invalid
The Thirty First of April, 2016 | Invalid
20 February 2014
são padrão apoiado em um monte de data-analisadores, mas17th
eSunday, June 8, 2015
são um pouco mais difíceis de analisar (dependendo do idioma).Thursday, August 25, 2017
válido? Vejo envios ignorando a DOW.Respostas:
Trilhos,
41,3735 bytesNão conheço um intérprete on-line para o Rails, mas aqui está uma captura de tela demonstrando esse processo
fonte
PowerShell ,
91899156 bytesExperimente online!
Recebe a entrada como uma sequência. Usa a
-replace
para se livrar do lixo eletrônico e usa oGet-Date
comando-f
interno com o sinalizador ormat para especificar oyyyy/MM/dd
formato necessário . Essa cadeia é deixada no pipeline e a saída é implícita.Economizou dois bytes graças ao Sr. Xcoder. Economizou muito dinheiro graças ao golfe regular da TessellatingHeckler.
fonte
''
formato da data, para -2. Se você deseja manter sua abordagem, dada a "ortografia correta", pode substituí'th|rd|st|(\b.*)day|,'
-la e ela cai para 56 bytes e lida com os mesmos casos. Embora eu ache errado, porque se você deixar os dias de lado, não poderá pegar oSunday, June8, 2015 | Invalid
caso porque era segunda-feira. Deve erro, mas analisa como válido. Não tenho certeza de qual será a decisão ou se outras pessoas a estão verificando.PHP,
73164 + 1 bytesExecute como pipe
-nR
ou experimente online .A verificação da data foi muito cara: tive que desmontar a data antes de usar um builtin e, em seguida, tentar um erro no nome do mês.
fonte
30 February 2014
retorna2014/03/02
. Ao errar ou retornar um valor consistente de falsey, você escolhe. (Eles vão no entanto ficar com os formatos de modelo acima)Biblioteca Python 3 + parsedatetime,
152139155153 bytesGuardado 13 bytes graças a Jonathan Allan
Adicionados 16 bytes para lidar com datas com dias de duração inválida
2 bytes salvos removendo a atribuição lambda
Experimente online!
Não suporta datas de bônus
fonte
None
;import ...as
; & alambda
reutilizandoparse
comoh
.Python 2 , 193 bytes
Experimente online!
; -; pls halp
fonte
time
.f=
da contagem de bytes no TiO) declarandore.sub
Java (OpenJDK 8) , 190 + 26 = 216 bytes
Experimente online!
Nota importante: era mais curto validar também o dia da semana em vez de abandoná-lo, para que a validação fosse incluída!
Não tentei
SimpleDateFormat
além dos casos óbvios, que todos aceitavam datas como 30 de fevereiro. Então eu tive que abandoná-lo e usei o Java 8DateTimeFormatter
.Explicação
Este formato significa:
[EEEE, ]
(acontece emSunday, ...
),[d ]
,MMMM
e espaço completos ,[d, ]
,uuuu
para informar ao analisador que estamos na era gregoriana.Código:
Créditos
fonte
replaceAll
padrão?JavaScript (ES6),
124122 bytesfonte
2015/06/07
paraJune 8, 2015
(problema UTC? Estou no UTC + 2) efalse
para umSunday, June 8, 2015
ou outroMonday, June 8, 2015
.nday
.