Introducción
Algunos meses son completamente simétrica , lo que significa que tienen simetría central , así como simetría de reflexión , como February of 2010
:
February 2010
┌──┬──┬──┬──┬──┬──┬──┐
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┘
Algunos meses solo tienen simetría central, como February of 1996
o mes actual, el April of 2018
:
February 1996
┌──┬──┬──┬──┐
│ │ │ │ │
┌──┬──┬──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┴──┴──┘
│ │ │ │ │
└──┴──┴──┴──┘
April 2018 ┌──┐
│ │
┌──┬──┬──┬──┬──┬──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┴──┴──┴──┴──┴──┘
│ │
└──┘
Y algunos son asimétricos , como el mes anterior, el March of 2018
:
March 2018
┌──┬──┬──┬──┐
│ │ │ │ │
┌──┬──┬──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┘
│ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┘
Tarea
Tome una entrada en forma de fecha , por ejemplo:
2018.04
2018.03
2010.02
1996.02
Salida de la simetría correspondiente , p. Ej.
2018.04
->centrally symmetric
2018.03
->asymmetric
2010.02
->symmetric
1996.02
->centrally symmetric
Reglas
- Este es el código de golf, por lo que gana el menor número de bytes.
- Las lagunas estándar obviamente no están permitidas.
- Suponga que la semana comienza con el lunes (gracias a Angs y Arnauld por su sugerencia).
- Considere solo años entre 1900 y 2100 ( inclusive ).
- Las reglas de formato de entrada y salida son permisivas , lo que significa que puede usar cualquier formato equivalente que sea nativo del idioma que elija.
- Base su solución en el calendario gregoriano .
f(x)
para cadax
en una lista". ¿Qué pasa con "tomar una entrada en forma de fecha"?Respuestas:
JavaScript (ES6), 55 bytes
Guardado 6 bytes gracias a @Neil
Toma entrada en la sintaxis de curry
(year)(month)
. Devuelvefalse
para asimétrico,true
para centralmente simétrico y0
para completamente simétrico.Pruébalo en línea!
¿Cómo?
Definimos la función g () que devuelve el día de la semana de aaaa / mm / 01 , como un entero entre 0 = lunes y 6 = domingo.
Porque getDay () devuelve de forma nativa 0 = domingo a 6 = sábado, cambiamos el resultado al rango esperado al consultar el séptimo día.
Luego definimos:
Porque el constructor de Date espera un mes indexado en 0 y porque g () disminuye m después de pasarlo a Date , en realidad primero calculamos el día de la semana del primer día del mes siguiente y luego agregamos el del día actual.
Meses completamente simétricos
Los meses completamente simétricos comienzan con un lunes y son seguidos por un mes que también comienza con un lunes. Esto solo es posible para febrero de un año no bisiesto.
Esto lleva a n = 0 .
Meses centralmente simétricos
Los meses centralmente simétricos son meses para los cuales la suma del día de la semana de su primer día y la del mes siguiente es 7 .
De ahí la segunda prueba: n == 7 .
No incorporado, 93 bytes
Utiliza la congruencia de Zeller . Mismo formato de E / S que la otra versión.
Pruébalo en línea!
fuente
true
,false
y enfilenotfound
lugar de0
...g=m=>new Date(y,m,7).getDay()
ahorra 6 bytes.T-SQL , 213 bytes (reglas estrictas de E / S)
La consulta anterior considera las estrictas reglas de formato de entrada / salida.
La entrada se toma de la columna
s
de una tabla llamadat
:Sin golf:
SQLFiddle 1
T-SQL , 128 bytes (reglas de E / S permisivas)
Si se puede cambiar el formato de la entrada y de la salida, elegiría ingresar el primer día del mes, en una
datetime
columna llamadad
:El resultado sería 1 para asimétrico, 0 para simétrico, NULL para centralmente simétrico.
Si podemos ejecutarlo en un servidor (o con un inicio de sesión) configurado para el idioma BRITÁNICO, podemos eliminar el
SET DATEFIRST 1
ahorro de 15 bytes más.SQLFiddle 2
fuente
CONVERT(DATETIME,s+'.01')
lugar deREPLACE
. También puede colocar el espacio enFROM (SELECT
DATEFORMAT
configuración. Por ejemplo, si usamosSET LANGUAGE BRITISH
,CONVERT(DATETIME,'2018.02.01')
sería el 2 de enero, en lugar del 1 de febrero.Haskell, 170 bytes
Devuelve 2 para centralmente simétrico, 1 para simétrico y 0 para asimétrico
fuente
Python 2,
118104bytes¡Gracias a Jonathan Allan y Dead Possum por las mejoras!
Python 3,
122105bytesEntrada
Salida
fuente
Y
oM
), por lo que actualmente es un fragmento e inválido.input()
Sin embargo, si cambia las variables a llamadas , esto estará perfectamente bien._[0]+_[-1]
->sum(..)
Rojo ,
199,168161 bytesPruébalo en línea!
0 - asimétrico
1 - simétrico
2 - centralmente simétrica
Más legible:
fuente
Mathematica, 137 bytes
Pura función. Toma el año y el mes como entrada y retornos
-1
para meses asimétricos,0
para meses simétricos centralmente y1
para meses completamente simétricos. No estoy seguro de por qué este idioma no puede convertir de un día de la semana a un número de forma predeterminada ...fuente
Bash + utilidades GNU, 70
La entrada está formateada como
YYYY/MM
.La salida es numérica, como sigue:
Supongo que este formato de salida es aceptable para esta pregunta.
Pruébalo en línea!
fuente
C, 111 bytes
Invoque
f(year, month)
, 0 para completamente simétrico, 1 para asimétrico, 2 para centralmente simétrico.fuente
return
cony=
(el primer parámetro) y cayendo de la función.Perl 6 , 74 bytes
Bloque desnudo, implícitamente una función de 1 argumento, una cadena como
"2012-02"
. Devoluciones:Cuando el patrón es simétrico, a medida que .day-of-week aumenta en 1, .days-in-month necesitaría moverse en 2 para seguir coincidiendo (el mes comenzaría un día más tarde pero debería terminar un día antes ), asi que
2 * .day-of-week + .days-in-month
nos da una medida de esa brecha. Módulo 7, debería ser 1 para obtener simetría, pero primero podemos verificar de forma económica el febrero sin salto comprobando ese total antes del módulo (lunes y 28 días por mes es la combinación mínima posible).Me sorprende que esto tome tantos bytes, pero se necesitan 36 bytes para hacer una fecha y obtener el día de la semana y los días de ese mes.
fuente