Entrada:
Una fecha (que contiene dd
, MM
y yyyy
). Un objeto de fecha, o tres enteros separados también son válidos como entrada.
Salida:
Cada parte ( dd
, MM
y yyyy
) se revierte individualmente y se redondea a la fecha válida más cercana.
Por ejemplo (en el formato dd-MM-yyyy
): se
21-10-2016
convierte12-01-6102
Reglas de desafío:
- Sólo
dd
,MM
,yyyy
es válida, pero el orden y que separan-símbolos que se utiliza es su propia elección.
Así que estos son algunos ejemplos de formato válidos:dd-MM-yyyy
;MM/dd/yyyy
;yyyy MM dd
;ddMMyyyy
, Etc.
Y estos son algunos ejemplos de formato no válidos:dd MMM yyyy
;dd-MM-'yy
; etc. - También puede elegir simplemente ingresar un objeto Fecha si su idioma lo admite o tres parámetros enteros separados, en lugar de la cadena que representa una fecha.
- ¡Indique qué formato de fecha ha utilizado! (Y la entrada y la salida deben estar en el mismo formato). También se permite la salida de un objeto Fecha, siempre que pueda manejar todos los casos de prueba y la regla de desafío a continuación.
- La transición del calendario juliano al gregoriano se ignora para este desafío. Por
1582
lo tanto, es solo un año inverso válido para2851
.
Vea la información / consejos del desafío para todos los años, meses y días válidos. - Como no puede tener febrero como revertido de cualquier otro mes, no tiene que preocuparse por los años bisiestos.
Todos los años, meses y días invertidos:
- El año siempre se puede revertir sin problemas, llegando de 0001 (revertido
1000
) a 9999 (restos9999
). (Por0000
lo tanto, no es una entrada válida, y tampoco hay casos de prueba para ello). - Los únicos meses que habrá revertido son: enero (revertido desde octubre /
10
); Octubre (invertido desde enero /01
); Noviembre (sigue siendo noviembre /11
); y diciembre (revertido de cada dos meses /02
-09
,12
). - Los únicos días que habrá invertido son: 01 (invertido desde
10
), 02 (invertido desde20
), 03 (invertido desde30
), 10 (invertido desde01
), 11 (restos11
), 12 (invertido desde21
), 13 (invertido desde31
) , 20 (invertido desde02
), 21 (invertido desde12
), 22 (restos22
), 30 (¡invertido03
o igual que 31 para noviembre!), 31 (invertido desde04
-09
/13
-19
/23
-29
).
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de código de golf lo desalienten de publicar respuestas con idiomas que no sean de código. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede utilizar STDIN / STDOUT, funciones / método con los parámetros adecuados y declaraciones / resultados de retorno, programas completos. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba ( 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
se revierte12-70-6102
y se redondea a12-12-6102
. No estoy seguro de cómo obtener el resultado##-10-6107
..70
, con el año incrementándose.10-10-2
válida la salida en el tercer caso?Respuestas:
Convexo , 23 bytes
El recuento de bytes asume la codificación CP-1252.
El formato de E / S es
dd mm yyyy
.Pruébalo en línea!
Este es un puerto directo de mi respuesta CJam . Convex se basa en gran medida en CJam y, por lo tanto, la única diferencia es el uso del
¶
operador de Convex que envuelve los dos elementos principales de la pila en una lista, ahorrando un byte[...]
.fuente
CJam, 24 bytes
El formato de E / S es
dd mm yyyy
.Pruébalo en línea!
Mismo recuento de bytes, formato de E / S
mm dd yyyy
:Pruébalo en línea!
Explicación
La otra versión funciona de manera similar, excepto que comenzamos desde el entero
1230
o1231
antes de convertirlo a["12" "30"]
o["12" "31"]
.fuente
1=
obtiene el mes invertido,:=
verifica si sus dígitos son iguales y^
coloca el resultado en 31, dando 30 para el mes11
y 31 para todo lo demás.Pyth,
5553464341 bytesdónde
❤❤
había dos no imprimibles, respectivamente U + 001C y U + 001F.Banco de pruebas.
fuente
Python 3, 82 bytes
Una función anónima que toma la entrada, a través del argumento, de la fecha como una lista de cadenas del formulario
['dd', 'mm', 'yyyy']
y devuelve la fecha inversa validada en el mismo formato.Cómo funciona
Python compara caracteres y cadenas por sus puntos de código Unicode. Esto significa que cualquier comparación en dos o más enteros devuelve lo mismo que esa comparación en esos enteros como cadenas. Por lo tanto, invocar
min
dos enteros como cadenas devuelve el entero más pequeño como una cadena; Al tomar la parte de fecha invertida como un argumento y el valor máximo como otro, el día y el mes se sujetan al rango deseado. Las partes de fecha se invierten indexando con pasos de-1
([::-1]
), y el valor máximo para el mes cambia de'31'
a'30'
si el mes es noviembre indexando en una lista con el resultado booleano de un condicional.Pruébalo en Ideone
fuente
Dyalog APL ,
3233 bytesI / O es una lista de tres cadenas (
'dd' 'mm' 'yyyy'
).TryAPL , pero tenga en cuenta que
⎕
(solicitud de entrada) se ha reemplazado⍵
y toda la línea encerrada en{
...}
para habilitar las pruebas en línea, y⍎
(ejecutar expresión) se ha reemplazado con2⊃⎕VFI
(verificar y corregir entrada) porque la ejecución de código arbitrario está bloqueada .fuente
C #
314305299249232223 BytesGracias a @KevinCruijssen por señalar que podría acortar mi declaración de variable, lo que también hizo que la cadena de alias pudiera guardar algunos bytes.
Se guardaron 50 bytes almacenando la función de inversión para su reutilización y otros 13 haciendo lo mismo para el redondeo y eliminando las declaraciones de variables.
La última actualización hace que la cadena de alias ya no sea un protector de bytes.
Versión sin golf:
Pruébalo aquí
fuente
using System.Linq;
y la función, por lo que es -1 byte. Además,var n=...;var e=...;
se puede jugar golf por 1 byte usando esto en su lugar:string n=...,e=...;
no es mucho, pero todavía -2 bytes. ;)Javascript,
10610594 bytesConjunto de pruebas (rev. 3)
Explicación
Gracias @KevinCruijssen para el ahorro de 1 byte para
b==1
ab<2
. Gracias @Neil por guardar 11 bytes sugiriendo plantilla ES6 literal y,
separador.fuente
b==1
que corrígeme si digo algo mal, pero no puedo jugar golfb<2
para salvar un byte? Ya no puede ser 0, ya que ya lo has verificado en la!b?
parte del código. Parece que funciona en su conjunto de pruebas cuando lo cambio.join``
lugar de,join('')
por ejemplo, pero puede ahorrar un poco más si lo usa,
como separador, lo que le permite+''
unir los tres valores.,
como el separador en la entrada?Ruby,
9284 + 1 (-p
bandera) =9385 bytesUsos
-
como separador.fuente
Pyke, 29 bytes
Pruébalo aquí!
Definitivamente puedo ver que esto es golfable
fuente
Python 2, 154 bytes
Toma la entrada como una cadena, por lo que las comillas deben especificarse en la entrada, por ejemplo, "11-04-2016".
fuente
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)
. Básicamente, no necesita usarr
nada, ymin
logra muchas de las cosas que desea hacer.05AB1E , 24 bytes
Puerto de @MartinEnder respuesta Cjam 's , por lo que también entradas y salidas como una cadena en el formato
dd MM yyyy
.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente