Las fechas palindrómicas son fechas que aparecen como palíndromos: la cadena de dígitos se puede leer de la misma manera hacia atrás que hacia adelante. Para el formato de fecha norteamericano (MM / DD / AAAA), las siguientes fechas palindrómicas son:
02/02/2020
12/02/2021
03/02/2030
El reto
Cree una función que devuelva todas las fechas palindrómicas en un formato de fecha común y consistente (de su elección) que se encuentre dentro de un rango de fechas ( edición: incluido el rango en sí ).
Reglas
- Para calificar como palíndromo, solo se deben verificar los caracteres numéricos de la fecha.
- La fecha puede estar en cualquier formato común (
MM/DD/YYYY
,DD-MM-YYYY
), siempre que use dos dígitos para el mes y el día y cuatro para el año, y use un carácter para separar partes de la fecha. La salida debe preservar caracteres seperating (/
,-
, etc.). Su función solo necesita manejar un formato de fecha distinto. Incluya el formato en su respuesta. - Si hay más de una fecha devuelta, deben estar separadas por comas o líneas nuevas.
- ¡La respuesta más corta gana!
Ejemplo
date_palindrome('05/02/2050', '12/12/2060')
>>>['05/02/2050', '06/02/2060']
code-golf
date
palindrome
atlasólogo
fuente
fuente
DATE
evitando ato_date()
o tengo que usar el menos golfableVARCHAR2
?Respuestas:
MATL,
2423 bytesAcepta entradas en forma de una matriz de cadenas
{lower, upper}
donde está el formato de fecha'MM/DD/YYYY'
. La salida también está en el formatoMM/DD/YYYY
.Pruébalo en línea
Explicación
fuente
Bash + GNU utilidades,
11684Requiere una versión de fecha de 64 bits para el caso de prueba dado.
I / O está en
YYYY-MM-DD
formato. La entrada se toma de dos líneas de stdin, p. Ej.Explicación
set
guarda la plantilla de comando de fecha para poder acceder a ella utilizando el$@
parámetrodate -uf- +%s
convierte fechas de punto final en número de segundos desde la época de Unixjot
interpola esto para dar una lista de segundos de la época, uno por día, cada uno con el prefijo@
date -uf- +%F
formatea cada entrada de la lista comoYYYY-MM-DD
sed
comprueba si hay palíndromos:h
guardar la línea de entrada en el búfer de retención:
definir etiqueta "sin nombre"s/-|^(.)(.*)\1$/\2/
Si se encuentra un guión, elimínelo o si el primer y el último carácter coinciden, elimínelost
si hubo una coincidencia arriba, regrese a la etiqueta sin nombre/./d
si quedan caracteres, la línea no es un palíndromo: elimínelo y continúe con la línea siguienteg
si llegamos aquí, entonces no se eliminó la línea, por lo que la línea debe haber sido un palíndromo. Recupere la línea del búfer de retención e implíquela.fuente
Python 2, 197 bytes
¡Un byte guardado gracias a @cat!
Pruébalo aquí!
El formato de entrada y salida es
YYYY-MM-DD
. El primer nivel de intención es espacios, el segundo es pestañas.No pasa nada especial aquí. Utiliza algunos
exec
abusos para convertir la entrada endate
objetos dividiendo la cadena de fecha-
y salpicando la lista en eldate
constructor. Luego, iteramos sobre todas las fechas en su rango inclusivo e imprimimos las que son palindrómicas.fuente
from datetime import*
en la primera línea para guardar un byte`a+timedelta(d)`
lo mismo questr(a+timedelta(d))
?repr
generalmente solo es equivalente astr
los tipos de datos primitivos. Para losdate
objetos que obtengo,datetime.date(2012, 12, 12)
por ejemplo.PowerShell v2 +, 127 bytes
Toma la entrada como argumentos de la línea de comandos
$args
enMM/DD/YYYY
formato (o similar) y la refundye como una[datetime]
matriz, los almacena en$a
y$b
. Ese es el paso de configuración delfor
bucle. El condicional es tan largo como$a
sea menor o igual que$b
.Cada iteración, establecemos
$c
igual a una-f
cadena deyyyyMMdd
estilo ormatizada , basada en$a
. Luego comparamos si eso es-eq
ual a$c
invertido (usando un truco de combinación de matrices). Si es así, sacamos$a
en el formato adecuado. De cualquier manera, incrementamos$a
con.AddDays(1)
para pasar al día siguiente.Ejemplo
fuente
Julia, 132 bytes
Esta es una función que acepta dos cadenas y devuelve una matriz de cadenas.
Sin golf:
Pruébalo en línea!
fuente
JavaScript (ES6),
159154bytesE / S en formato ISO. Sin golf:
fuente
TSQL, 88 bytes
Usando el formato ISO8601 para la fecha (aaaa-mm-dd)
Violín
fuente
Java 7,
436435416 bytes * suspiro .. *Formato de entrada y salida:
dd-MM-yyyy
Ungolfed y código de prueba:
Pruébalo aquí
Salida:
fuente
Oracle 11: SQL: 246 bytes (hey, al menos vencí a Java: P lol)
Salida:
En formato legible:
Explicado:
Aprendí sobre la función REVERSE hoy :)
fuente
C #,
9794 bytesC # lambda (
Action
) donde están las entradasDateTime
y la salida se imprime utilizando el.Dump()
método ( truco de @ EvilFonti ).C #,
115112 bytesC # lambda (
Func
) donde las entradas sonDateTime
y la salida es astring
.Código:
¡Pruébalos en línea!
fuente
VBA,
240193 bytesEso es en un formato comprensible. Caso de prueba:
Sin tanta redundancia:
fuente
Javascript (usando una biblioteca externa) (158 bytes)
Enlace a lib: https://github.com/mvegh1/Enumerable
Explicación del código: Ok, finalmente utilicé algunos códigos reales de golf aquí por una vez. Entonces las entradas a, b son objetos de fecha. Cree un rango de enteros de a a b, donde ayb se convierten en enteros, y la distancia entre los valores en el rango es 86400000, es decir, la cantidad de tics en un día. Asigne cada valor en el rango a un objeto de fecha. Filtre ese rango por el predicado que representa fechas palindrómicas. La lógica para determinar que es simple ... convierte la representación de cadena JSON del objeto de fecha actual en una matriz de caracteres usando la biblioteca y filtra las entradas no numéricas, y solo toma los primeros 8 valores (porque eso sería aaaaMMdd ) y almacénelo en la variable z, luego verifique si z es equivalente a z Invertido. Finalmente, vuelva a la matriz nativa de JS
Editar: Afeitó 2 bytes eliminando parens innecesarios.
fuente
Java, 269 bytes
Sin golf:
fuente