A ordem de formatação das datas é uma das questões mais complexas e divisivas que o mundo enfrenta atualmente. Alguns de nós argumentam veementemente que Mês / Dia / Ano é apropriado, considerando que é assim que dizemos datas em voz alta. Outros proclamam em voz alta que Dia / Mês / Ano é o melhor, porque coloca os termos em ordem crescente da duração que representam.
Já é suficiente. Os computadores podem resolver essa disputa de maneira simples e justa. Seu código, uma função ou programa completo, terá uma sequência de datas delimitada por barras, por exemplo 12/1/2015
. Observe que este é o formato exato, sem zeros à esquerda e com um ano de quatro dígitos no final.
- Se for definitivamente Mês / Dia / Ano, por exemplo
10/31/1998
, produza uma representação de texto dessa data neste formato exato, com o nome completo do mês, dia e ano:October 31, 1998
- Se é definitivamente Dia / Mês / Ano, por exemplo
25/12/1989
, a saída do mesmo tipo de representação de texto:December 25, 1989
. - Se for ambíguo, seja Mês / Dia / Ano ou Dia / Mês / Ano, produza uma data que resolva a ambiguidade combinando as duas datas possíveis da seguinte maneira:
- Criar um novo nome do mês, tendo a primeira metade do nome do anteriormente mês e anexar a segunda metade da tarde mês. Por meses com duração ímpar, a primeira metade recebe a letra extra. Para ser explícito, as primeiras metades dos meses são
Janu
,Febr
,Mar
,Apr
,Ma
,Ju
,Ju
,Aug
,Septe
,Octo
,Nove
, eDece
e as segundas metades são, portantoary
,uary
,ch
,il
,y
,ne
,ly
,ust
,mber
,ber
,mber
, ember
. - Calcule o dia calculando a média dos dois dias possíveis, tomando a palavra quando a média não for um número inteiro.
- Emita a representação de texto desta data, por exemplo
10/8/2011
, para , saídaAugber 9, 2011
.
- Criar um novo nome do mês, tendo a primeira metade do nome do anteriormente mês e anexar a segunda metade da tarde mês. Por meses com duração ímpar, a primeira metade recebe a letra extra. Para ser explícito, as primeiras metades dos meses são
Se a data de entrada não puder ser Mês / Dia / Ano ou Dia / Mês / Ano (por exemplo, 13/13/2013
ou mesmo 2/30/2002
), qualquer comportamento é aceitável. Este código de golfe, o código mais curto vence!
Casos de teste:
10/31/1998
dá October 31, 1998
25/12/1989
dá December 25, 1989
10/8/2011
dá Augber 9, 2011
8/5/1957
dá Maust 6, 1957
9/12/2012
(por incrível que pareça) September 10, 2012
1/1/2000
dá January 1, 2000
without leading zeroes and with a four-digit year at the end
implicayear >= 1000
Respostas:
Pitão - 156 bytes
Código muito ruim e precisará usar seqüências de caracteres compactadas, mas é algo.
Conjunto de Teste .
fonte
Mathematica
341304298288293 bytesIsso usa uma função pura ou anônima, ou seja, uma função sem seu próprio nome.
DateString
retorna uma mensagem de erro se a data for ambígua.Check
captura a ambiguidade e envia a data incorreta paraDateList
, que a transforma em uma lista de 3 números inteiros (que acredita ser{year, month, day}
). Os números inteiros mês e dia são classificados por tamanho e usados para determinar o mês e o dia de acordo com as instruções do OP.Quiet
silencia o erro de impressão.fonte
Javascript (ES6),
311295282274246238 bytesEditar: Usa
toLocaleString
para gerar nomes de meses. Altere a localidade para obter resultados usando nomes de meses em diferentes localidades!Editar 2: agora gera nomes de dois meses em vez dos 12!
Ungolfed:
Exemplo:
Graças a:
@ user81655 , 274 => 246 bytes
@ edc65 , 246 => 238 bytes
fonte
Math.ceil(e[c].length/2)
para(r=e[c].length/2)+r%1
,Array(2).fill().map((_,f)=>...)
def=>...
e todos ose[n]
quee(n)
,i=+(g>h)
dei=g>h
ee[i]
parae[+i]
, remova os suportes desnecessários no último operador ternário, também,newDate
deve sernew Date
.Math.ceil
usar #b=c=>e(c).length+1>>1
JavaScript ES6, 204
Snippet de teste:
fonte
Python 3 (290 bytes)
Semelhante à resposta de Ashwin Gupta, mas aproveitando o módulo de calendário do Python para evitar escrever todos os nomes dos meses.
O Python 2 deve aparar alguns bytes com divisão inteira e perdendo os parênteses para
print
.fonte
Python,
558554 bytesUm exemplo muito, muito, muito horrível de como fazer isso em python. Desculpe, eu sou super mal com esse material de golfe
D:
. Funciona embora. Tenho certeza de que existem várias maneiras de simplificar isso, então me informe nos comentários. Golfe:Ungolfed
Captura de tela:
fonte
S=" "
no topo, em seguida, substituir cada instância de" "
comS
- que vai raspar alguns bytese= int[...
,o = o...
). Além disso, ele pode provar adventageous para definir chamadas frequentemente utilizados comoint
a única letra maiúscula varsfrom math import* I=int S=" " C="," L=len P=print def d(i): l=["","January","February","March","April","May","June","July","August","September","October","November","December"];w=i.split('/');f=I(w[0]);s=I(w[1]);y=w[2] if f>12:e=I(w[1]);P(l[e]+S+w[0]+C+S+y) elif f<13and s>12:e=I(w[0]);P(l[e]+S+w[0]+C+S+y) else: if f<s:o=l[f];t=l[s] else:o=l[s];t=l[f];o=o[0:I(ceil(L(o)/2))];t=t[I(ceil(L(t)/2)):L(t)] P(o+t+S+str(floor((f+s)/2))+C+S+y)
PHP,
301294 bytesEu pensei que poderia competir com a resposta Javascript. Ah bem.
Acho que poderia diminuí-lo e não gosto do código que usei para datas ambíguas. Eu acho que existe uma maneira melhor de fazer isso.
Ungolfed:
fonte