Datas palindrômicas são datas que aparecem como palíndromos: a sequência de dígitos pode ser lida da mesma maneira para trás e para frente. Para o formato de data norte-americano (MM / DD / AAAA), as próximas datas palindrômicas são:
02/02/2020
12/02/2021
03/02/2030
O desafio
Crie uma função que retorne todas as datas palindrômicas em um formato de data comum e consistente (de sua escolha) que se enquadre em um intervalo de datas ( editar: incluindo o próprio intervalo ).
Regras
- Para se qualificar como um palíndromo, apenas os caracteres numéricos da data devem ser verificados.
- A data pode estar em qualquer formato comum (
MM/DD/YYYY
,DD-MM-YYYY
), desde que use dois dígitos para o mês e o dia e quatro para o ano e use um caractere para separar partes da data. A saída deve preservar caracteres Separando (/
,-
, etc.). Sua função precisa lidar apenas com um formato de data distinto. Por favor inclua o formato na sua resposta. - Se houver mais de uma data retornada, elas deverão ser separadas por vírgula ou nova linha.
- A resposta mais curta vence!
Exemplo
date_palindrome('05/02/2050', '12/12/2060')
>>>['05/02/2050', '06/02/2060']
code-golf
date
palindrome
atlasologist
fonte
fonte
DATE
evitando umto_date()
ou tenho que usar o menos golfávelVARCHAR2
?Respostas:
MATL,
2423 bytesAceita entrada na forma de uma matriz de cadeia de caracteres
{lower, upper}
onde está o formato da data'MM/DD/YYYY'
. A saída também está no formatoMM/DD/YYYY
.Experimente Online
Explicação
fonte
Utilitários Bash + GNU,
11684Requer a versão de data de 64 bits para o caso de teste fornecido.
E / S está no
YYYY-MM-DD
formato. A entrada é obtida de duas linhas de stdin, por exemploExplicação
set
salva o modelo de comando date para que possa ser acessado usando o$@
parâmetrodate -uf- +%s
converte datas de terminal em número de segundos desde a época do Unixjot
interpola isso para fornecer uma lista de segundos a partir da época, um por dia, cada um prefixado com@
date -uf- +%F
formata cada entrada da lista comoYYYY-MM-DD
sed
verifica os palíndromos:h
salve a linha de entrada no buffer de espera:
definir etiqueta "sem nome"s/-|^(.)(.*)\1$/\2/
se um traço for encontrado, remova-o ou se o primeiro e o último caracteres corresponderem, remova-ost
se houver uma correspondência acima, volte para o rótulo sem nome/./d
se houver algum caractere restante, a linha não é um palíndromo - exclua-o e continue na próxima linhag
se chegamos aqui, nenhuma exclusão de linha aconteceu; portanto, a linha deve ter sido um palíndromo. Retorne a linha do buffer de retenção e apresente-a implicitamente.fonte
Python 2, 197 bytes
Um byte salvo graças ao @cat!
Experimente aqui!
O formato de entrada e saída é
YYYY-MM-DD
. O primeiro nível de intenção é o espaço, o segundo é o separador.Nada muito especial acontecendo aqui. Usa algum
exec
abuso para converter a entrada emdate
objetos dividindo a sequência de datas-
e dividindo a lista nodate
construtor. Depois, iteramos todas as datas em seu intervalo inclusivo e imprimimos as que são palindrômicas.fonte
from datetime import*
na primeira linha para salvar um byte`a+timedelta(d)`
o mesmo questr(a+timedelta(d))
?repr
normalmente não é equivalente apenas astr
tipos de dados primitivos. Paradate
objetos que recebo,datetime.date(2012, 12, 12)
por exemplo.PowerShell v2 +, 127 bytes
Recebe a entrada como argumentos de linha de comando
$args
no formatoMM/DD/YYYY
(ou similar) e se reformula como uma[datetime]
matriz, armazena-os em$a
e$b
. Essa é a etapa de configuração dofor
loop. A condicional é contanto que$a
seja menor que ou igual a$b
.A cada iteração, definimos
$c
igual a uma-f
sequência deyyyyMMdd
estilos ormatada , com base em$a
. Nós, então, comparar se isso é-eq
ual para$c
revertida (usando uma matriz-join truque). Nesse caso, produzimos$a
no formato adequado. De qualquer forma, incrementamos$a
com.AddDays(1)
a mudança para o dia seguinte.Exemplo
fonte
Julia, 132 bytes
Esta é uma função que aceita duas cadeias e retorna uma matriz de cadeias.
Ungolfed:
Experimente online!
fonte
JavaScript (ES6),
159154 bytesE / S no formato ISO. Ungolfed:
fonte
TSQL, 88 bytes
Usando o formato ISO8601 para a data (aaaa-mm-dd)
Violino
fonte
Java 7,
436435416 bytes * suspiro .. *Formato de entrada e saída:
dd-MM-yyyy
Ungolfed & código de teste:
Experimente aqui.
Resultado:
fonte
Oracle 11: SQL: 246 bytes (ei, pelo menos eu bato em Java: P lol)
Resultado:
Em formato legível:
Explicado:
Aprendeu sobre a função REVERSE hoje :)
fonte
C #,
9794 bytesC # lambda (
Action
) onde estão as entradasDateTime
e a saída é impressa usando o.Dump()
método ( truque do @ EvilFonti ).C #,
115112 bytesC # lambda (
Func
) onde estão as entradasDateTime
e a saída é astring
.Código:
Experimente-os online!
fonte
VBA,
240193 bytesÉ isso em um formato compreensível. Caso de teste:
Sem tanta redundância:
fonte
Javascript (usando biblioteca externa) (158 bytes)
Link para lib: https://github.com/mvegh1/Enumerable
Explicação do código: Ok, finalmente usei algum código de golfe aqui pela primeira vez. Portanto, as entradas a, b são objetos Date. Crie um intervalo de números inteiros de a a b, onde aeb são coagidos em números inteiros, e a distância entre os valores no intervalo é 86400000, ou seja, a quantidade de ticks em um dia. Mapeie cada valor no intervalo para um objeto de data. Filtre esse intervalo pelo predicado que representa datas palindrômicas. A lógica para determinar que é simples ... converte a representação da string JSON do objeto de data atual em uma matriz de caracteres usando a biblioteca e filtra as entradas não numéricas e leva apenas os 8 primeiros valores (porque o valor seria aaaamMMdd ) e armazene-o na variável z e verifique se z é equivalente a z Invertido. Por fim, retorne à matriz JS nativa
Editar: Raspou 2 bytes removendo parênteses desnecessários.
fonte
Java, 269 bytes
Ungolfed:
fonte