introduction
Certains mois sont complètement symétriques , ce qui signifie qu'ils ont une symétrie centrale ainsi qu'une symétrie de réflexion , comme February of 2010
:
February 2010
┌──┬──┬──┬──┬──┬──┬──┐
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┘
Certains mois n'ont que la symétrie centrale, comme February of 1996
ou mois en cours, le April of 2018
:
February 1996
┌──┬──┬──┬──┐
│ │ │ │ │
┌──┬──┬──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┴──┴──┘
│ │ │ │ │
└──┴──┴──┴──┘
April 2018 ┌──┐
│ │
┌──┬──┬──┬──┬──┬──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┴──┴──┴──┴──┴──┘
│ │
└──┘
Et certains sont asymétriques , comme le mois précédent, le March of 2018
:
March 2018
┌──┬──┬──┬──┐
│ │ │ │ │
┌──┬──┬──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┘
│ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┘
Tâche
Prenez une entrée sous forme de date , par exemple:
2018.04
2018.03
2010.02
1996.02
Afficher la symétrie correspondante , par exemple
2018.04
->centrally symmetric
2018.03
->asymmetric
2010.02
->symmetric
1996.02
->centrally symmetric
Règles
- C'est le golf de code, donc le plus petit nombre d'octets gagne.
- Les failles standard ne sont évidemment pas autorisées.
- Supposons que la semaine commence avec lundi (merci à Angs et Arnauld pour la suggestion).
- Ne considérez que les années entre 1900 et 2100 ( inclus ).
- Les règles de formatage d'entrée et de sortie sont permissives , ce qui signifie que vous pouvez utiliser n'importe quel format équivalent natif de la langue de votre choix.
- Basez votre solution sur le calendrier grégorien .
f(x)
pour chaque élémentx
d'une liste». Qu'en est-il de "prendre une entrée sous forme de date"?Réponses:
JavaScript (ES6), 55 octets
6 octets enregistrés grâce à @Neil
Prend des entrées dans la syntaxe de currying
(year)(month)
. Renvoiefalse
pour asymétrique,true
pour symétrique central et0
pour complètement symétrique.Essayez-le en ligne!
Comment?
Nous définissons la fonction g () qui retourne le jour de la semaine de aaaa / mm / 01 , comme un entier entre 0 = lundi et 6 = dimanche.
Étant donné que getDay () renvoie nativement 0 = dimanche à 6 = samedi, nous décalons le résultat dans la plage attendue en interrogeant le 7ème jour à la place.
Ensuite, nous définissons:
Étant donné que le constructeur de Date attend un mois indexé sur 0 et que g () décrémente m après l'avoir passé à Date , nous calculons d'abord le jour de la semaine du premier jour du mois suivant , puis nous ajoutons celui du mois en cours.
Mois complètement symétriques
Les mois complètement symétriques commencent par un lundi et sont suivis d'un mois qui commence également par un lundi. Cela n'est possible que pour février d'une année sans bissextile.
Cela conduit à n = 0 .
Mois à symétrie centrale
Les mois à symétrie centrale sont des mois pour lesquels la somme du jour de la semaine de leur premier jour et de celle du mois suivant est 7 .
D'où le deuxième test: n == 7 .
Pas intégré, 93 octets
Utilise la congruence de Zeller . Même format d'E / S que l'autre version.
Essayez-le en ligne!
la source
true
,false
etfilenotfound
au lieu de0
…g=m=>new Date(y,m,7).getDay()
enregistre 6 octets.T-SQL , 213 octets (règles d'E / S strictes)
La requête ci-dessus considère les règles strictes de formatage d'entrée / sortie.
L'entrée provient de la colonne
s
d'une table nomméet
:Ungolfed:
SQLFiddle 1
T-SQL , 128 octets (règles d'E / S permissives)
Si le format de l'entrée et de la sortie peut être modifié, je choisirais de saisir le premier jour du mois, dans une
datetime
colonne nomméed
:La sortie serait 1 pour asymétrique, 0 pour symétrique, NULL pour centralisée symétrique.
Si nous pouvons l'exécuter sur un serveur (ou avec une connexion) configuré pour la langue BRITANNIQUE, nous pouvons supprimer l'
SET DATEFIRST 1
enregistrement de 15 octets supplémentaires.SQLFiddle 2
la source
CONVERT(DATETIME,s+'.01')
au lieu deREPLACE
. Vous pouvez également déposer l'espaceFROM (SELECT
DATEFORMAT
paramètre. Par exemple, si nous utilisonsSET LANGUAGE BRITISH
, ceCONVERT(DATETIME,'2018.02.01')
serait le 2 janvier au lieu du 1er février.Haskell, 170 octets
Renvoie 2 pour symétrique central, 1 pour symétrique et 0 pour asymétrique
la source
Python 2,
118104 octetsMerci à Jonathan Allan et Dead Possum pour les améliorations!
Python 3,
122105 octetsContribution
Sortie
la source
Y
ouM
), il s'agit donc actuellement d'un extrait de code et non valide.input()
Cependant, si vous changez les variables en appels , ce sera parfaitement bien._[0]+_[-1]
->sum(..)
Rouge ,
199, 168161 octetsEssayez-le en ligne!
0 - asymétrique
1 - symétrique
2 - symétrique central
Plus lisible:
la source
Mathematica, 137 octets
Fonction pure. Prend l'année et le mois comme entrée et retourne
-1
pour les mois asymétriques,0
pour les mois à symétrie centrale et1
pour les mois entièrement symétriques. Je ne sais pas pourquoi cette langue ne peut pas convertir un jour de la semaine en nombre par défaut ...la source
Utilitaires Bash + GNU, 70
L'entrée est formatée comme
YYYY/MM
.La sortie est numérique, comme suit:
Je suppose que ce format de sortie est acceptable pour cette question.
Essayez-le en ligne!
la source
C, 111 octets
Appelez
f(year, month)
, 0 pour complètement symétrique, 1 pour asymétrique, 2 pour symétrique central.la source
return
pary=
(le premier paramètre) et en tombant hors de la fonction.Perl 6 , 74 octets
Bloc nu, implicitement une fonction de 1 argument, une chaîne comme
"2012-02"
. Résultats:Lorsque le modèle est symétrique, comme .day-of-week augmente de 1, .days-in-month devrait se déplacer de 2 afin de toujours correspondre (le mois commencerait un jour plus tard mais devra se terminer un jour plus tôt). ),
2 * .day-of-week + .days-in-month
nous donne donc une mesure de cet écart. Modulo 7, il devrait être 1 pour obtenir la symétrie, mais nous pouvons d'abord vérifier à moindre coût le mois de février sans saut en vérifiant ce total avant modulo (lundi et 28 jours par mois est la combinaison minimale possible).Je suis surpris que cela prenne autant d'octets, mais 36 octets sont nécessaires pour simplement prendre une date et obtenir le jour de la semaine et les jours de ce mois.
la source