Entrada:
Um Data (contendo dd
, MM
e yyyy
). Um objeto de data ou três inteiros separados também são válidos como entrada.
Resultado:
Cada parte ( dd
, MM
e yyyy
) revertida individualmente e depois arredondada para a data válida mais próxima.
Por exemplo (no formato dd-MM-yyyy
):
21-10-2016
torna - se12-01-6102
Regras do desafio:
- Apenas
dd
,MM
,yyyy
é válida, mas a ordem e que separam-símbolos que você usa é a sua própria escolha.
Então, esses são alguns exemplos de formato válidos:dd-MM-yyyy
;MM/dd/yyyy
;yyyy MM dd
;ddMMyyyy
, Etc.
E estes são alguns exemplos de formato inválidos:dd MMM yyyy
;dd-MM-'yy
; etc. - Você também pode optar por inserir apenas um objeto Date se o seu idioma suportar ou três parâmetros inteiros separados, em vez da string que representa uma data.
- Indique qual formato de data você usou! (E a entrada e a saída devem estar no mesmo formato.) Também é permitido gerar um objeto Date, desde que ele possa lidar com todos os casos de teste e a regra de desafio abaixo.
- A transição do calendário juliano para o gregoriano é ignorada para esse desafio. Portanto,
1582
é apenas um ano invertido válido para2851
.
Consulte Informações / dicas do desafio para todos os anos, meses e dias válidos. - Como você não pode ter fevereiro como revertido em qualquer outro mês, não precisa se preocupar com anos bissextos.
Todos os anos, meses e dias revertidos:
- O ano sempre pode ser revertido sem problemas, passando de 0001 (revertido de
1000
) a 9999 (permanece9999
). (Portanto,0000
não é uma entrada válida e também não há casos de teste.) - Os únicos meses que você reverterá são: janeiro (revertido de outubro /
10
); Outubro (revertido de janeiro /01
); Novembro (permanece novembro /11
); e dezembro (revertido a cada dois meses /02
-09
,12
). - Os únicos dias que você terá revertido são: 01 (revertido de
10
), 02 (revertido de20
), 03 (revertido de30
), 10 (revertido de01
), 11 ( revertido de ), 11 (permanece11
), 12 (revertido de21
), 13 (revertido de31
) , 20 (revertido de02
), 21 (revertido de12
), 22 (restante22
), 30 (revertido de03
ou o mesmo que 31 de novembro!), 31 (revertido de04
-09
/13
-19
/23
-29
).
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e declarações de retorno / saída, programas completos. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
Casos de teste ( dd-MM-yyyy
como formato):
21-07-2016 -> 12-12-6102
12-11-1991 -> 21-11-1991
01-01-2000 -> 10-10-0002
27-08-1875 -> 31-12-5781
18-12-2010 -> 31-12-0102
13-01-1981 -> 31-10-1891
04-11-1671 -> 30-11-1761 // Semi-tricky case, since November has 30 days
28-11-2036 -> 30-11-6302 // Semi-tricky case, since November has 30 days
14-06-1855 -> 31-12-5581
30-10-9999 -> 03-01-9999
01-01-2851 -> 10-10-1582
21-07-2016
é revertido12-70-6102
e arredondado para12-12-6102
. Não tenho certeza como você obter o resultado##-10-6107
..70
, com o ano aumentando.10-10-2
saída é válida no terceiro caso?Respostas:
Convexo , 23 bytes
A contagem de bytes assume a codificação CP-1252.
O formato de E / S é
dd mm yyyy
.Experimente online!
Esta é uma porta direta da minha resposta CJam . O Convex baseia-se fortemente no CJam e, portanto, a única diferença é o uso do
¶
operador do Convex, que agrupa os dois principais elementos da pilha em uma lista, economizando um byte[...]
.fonte
CJam, 24 bytes
O formato de E / S é
dd mm yyyy
.Experimente online!
Contagem de mesmos bytes, formato de E / S
mm dd yyyy
:Experimente online!
Explicação
A outra versão funciona da mesma forma, exceto que começamos a partir do número inteiro
1230
ou1231
antes de convertê-lo para["12" "30"]
ou["12" "31"]
.fonte
1=
obtém o mês invertido,:=
verifica se seus dígitos são iguais e^
reduz o resultado para 31, dando 30 por mês11
e 31 para todo o resto.Pitão,
5553464341 bytesonde
❤❤
havia dois não imprimíveis, respectivamente U + 001C e U + 001F.Suíte de teste.
fonte
Python 3, 82 bytes
Uma função anônima que recebe entrada, via argumento, da data como uma lista de cadeias de caracteres do formulário
['dd', 'mm', 'yyyy']
e retorna a data reversa validada no mesmo formato.Como funciona
Python compara caracteres e seqüências de caracteres por seus pontos de código Unicode. Isso significa que qualquer comparação em dois ou mais números inteiros retorna o mesmo que a comparação nesses números inteiros como seqüências de caracteres. Portanto, chamar
min
dois números inteiros como sequências retorna o menor número inteiro como sequência; tomando a parte da data invertida como um argumento e o valor máximo como outro, o dia e o mês são fixados no intervalo desejado. As partes da data são revertidas pela indexação com as etapas de-1
([::-1]
) e o valor máximo para o mês é alterado de'31'
para'30'
se o mês for novembro, indexando em uma lista com o resultado booleano de uma condicional.Experimente no Ideone
fonte
Dyalog APL ,
3233 bytesE / S é uma lista de três cadeias (
'dd' 'mm' 'yyyy'
).TryAPL , mas observe que
⎕
(solicitação de entrada) foi substituída por⍵
e toda a linha delimitada em{
...}
para ativar o teste on-line, e⍎
(executar expressão) foi substituída por2⊃⎕VFI
(verificar e corrigir entrada) porque a execução de código arbitrário está bloqueada .fonte
C #
314305299249232223 BytesAgradeço a @KevinCruijssen por apontar que eu poderia reduzir minha declaração de variável, que também tornou a string de aliasing capaz de salvar alguns bytes.
Economizou 50 bytes armazenando a função de reversão para reutilização e outros 13, fazendo o mesmo para o arredondamento e removendo as declarações da variável.
A última atualização faz com que a cadeia de aliasing não seja mais uma proteção de bytes.
Versão Ungolfed:
Teste aqui
fonte
using System.Linq;
e a função, então isso é -1 byte. Além disso, vocêvar n=...;var e=...;
pode obter 1 byte de golfe usando este byte:string n=...,e=...;
não é muito, mas ainda -2 bytes. ;)Javascript,
10610594 bytesConjunto de testes (rev. 3)
Explicação
Obrigado a @KevinCruijssen por economizar 1 byte para
b==1
ab<2
. Obrigado @ Neil por salvar 11 bytes, sugerindo literal e,
separador de modelo ES6 .fonte
b==1
jogarb<2
para salvar um byte? Não pode mais ser 0, pois você já verificou isso na!b?
parte do código. Parece funcionar no seu conjunto de testes quando eu o troco.join``
vez de,join('')
por exemplo -, mas pode economizar um pouco mais usando,
como separador, o que permite que você+''
junte os três valores.,
como o separador na entrada?Ruby,
9284 + 1 (-p
sinalizador) =9385 bytesUsa
-
como separador.fonte
Pyke, 29 bytes
Experimente aqui!
Eu definitivamente posso ver isso sendo jogável
fonte
Python 2, 154 bytes
Toma a entrada como uma sequência, portanto, as aspas precisam ser especificadas na entrada, por exemplo, "11-04-2016".
fonte
z=[x[::-1]for x in z];z[1]=min(z[1],'12');z[0]=min(z[0],['31','30'][z[1]=='11']);print"-".join(z)
. Basicamente, você não precisa usarr
nada emin
realiza muitas das coisas que deseja fazer.05AB1E , 24 bytes
Porto de @MartinEnder resposta CJam 's , assim também as entradas e saídas como uma string no formato
dd MM yyyy
.Experimente online ou verifique todos os casos de teste .
Explicação:
fonte