Einführung
Einige Monate sind vollständig symmetrisch , was bedeutet, dass sie sowohl eine Zentralsymmetrie als auch eine Reflexionssymmetrie aufweisen , wie z February of 2010
.
February 2010
┌──┬──┬──┬──┬──┬──┬──┐
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┘
Einige Monate haben nur zentrale Symmetrie, wie February of 1996
oder aktueller Monat, die April of 2018
:
February 1996
┌──┬──┬──┬──┐
│ │ │ │ │
┌──┬──┬──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┴──┴──┘
│ │ │ │ │
└──┴──┴──┴──┘
April 2018 ┌──┐
│ │
┌──┬──┬──┬──┬──┬──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┴──┴──┴──┴──┴──┘
│ │
└──┘
Und einige sind asymmetrisch , wie im Vormonat, die March of 2018
:
March 2018
┌──┬──┬──┬──┐
│ │ │ │ │
┌──┬──┬──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┘
│ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┘
Aufgabe
Nehmen Sie eine Eingabe in Form eines Datums vor , zB:
2018.04
2018.03
2010.02
1996.02
Geben Sie die entsprechende Symmetrie aus , z
2018.04
->centrally symmetric
2018.03
->asymmetric
2010.02
->symmetric
1996.02
->centrally symmetric
Regeln
- Das ist Codegolf, also gewinnt die kleinste Anzahl von Bytes.
- Standardlücken sind natürlich nicht erlaubt.
- Angenommen, die Woche beginnt mit Montag (danke an Angs und Arnauld für den Vorschlag).
- Berücksichtigen Sie nur Jahre zwischen 1900 und 2100 ( einschließlich ).
- Die Eingabe- und Ausgabeformatierungsregeln sind zulässig , dh Sie können jedes äquivalente Format verwenden, das für die Sprache Ihrer Wahl typisch ist.
- Basieren Sie Ihre Lösung auf dem Gregorianischen Kalender .
f(x)
für jedenx
in einer Liste". Was ist mit "Eingabe in Form eines Datums"?Antworten:
JavaScript (ES6), 55 Byte
6 Bytes dank @Neil gespart
Übernimmt Eingaben in der Currying-Syntax
(year)(month)
. Gibtfalse
für asymmetrisch,true
für zentral symmetrisch und0
für vollständig symmetrisch zurück.Probieren Sie es online!
Wie?
Wir definieren die Funktion g (), die den Wochentag von jjjj / mm / 01 als Ganzzahl zwischen 0 = Montag und 6 = Sonntag zurückgibt .
Da getDay () nativ 0 = Sonntag bis 6 = Samstag zurückgibt , verschieben wir das Ergebnis in den erwarteten Bereich, indem wir stattdessen den 7. Tag abfragen.
Dann definieren wir:
Da der Konstruktor von Date einen mit 0 indizierten Monat erwartet und g () nach der Übergabe an Date m dekrementiert , berechnen wir zunächst den Wochentag des ersten Tages des nächsten Monats und addieren dann den des aktuellen Monats.
Vollkommen symmetrische Monate
Völlig symmetrische Monate beginnen mit einem Montag, gefolgt von einem Monat, der ebenfalls mit einem Montag beginnt. Dies ist nur für den Februar eines Nicht-Schaltjahres möglich.
Dies führt zu n = 0 .
Zentral symmetrische Monate
Zentralsymmetrische Monate sind Monate, für die die Summe aus dem Wochentag des ersten Tages und dem des nächsten Monats 7 beträgt .
Daher der zweite Test: n == 7 .
Keine eingebauten 93 Bytes
Verwendet Zellers Kongruenz . Gleiches E / A-Format wie die andere Version.
Probieren Sie es online!
quelle
true
,false
undfilenotfound
statt0
...g=m=>new Date(y,m,7).getDay()
Spart 6 Bytes.T-SQL , 213 Byte (strenge E / A-Regeln)
Die obige Abfrage berücksichtigt die strengen Formatierungsregeln für die Eingabe / Ausgabe.
Die Eingabe stammt aus der Spalte
s
einer Tabelle mit dem Nament
:Ungolfed:
SQLFiddle 1
T-SQL , 128 Byte (zulässige E / A-Regeln)
Wenn das Format der Eingabe und der Ausgabe geändert werden kann, würde ich den ersten Tag des Monats in einer
datetime
Spalte mit dem Namen eingebend
:Die Ausgabe wäre 1 für asymetrisch, 0 für symetrisch, NULL für zentral symetrisch.
Wenn wir es auf einem Server (oder mit einem Login) ausführen können, der für die BRITISH-Sprache konfiguriert ist, können wir das
SET DATEFIRST 1
Speichern von 15 weiteren Bytes entfernen .SQLFiddle 2
quelle
CONVERT(DATETIME,s+'.01')
anstelle von verwendeteREPLACE
. Sie können auch das Leerzeichen inFROM (SELECT
DATEFORMAT
Einstellung. Wenn wir zum Beispiel verwendenSET LANGUAGE BRITISH
,CONVERT(DATETIME,'2018.02.01')
wäre dies der 2. Januar anstelle des 1. Februar.Haskell, 170 Bytes
Gibt 2 für zentral symmetrisch, 1 für symmetrisch und 0 für asymmetrisch zurück
quelle
Python 2,
118104 BytesVielen Dank an Jonathan Allan und Dead Possum für die Verbesserungen!
Python 3,
122105 BytesEingang
Ausgabe
quelle
Y
oderM
) gespeichert ist. Daher ist dies derzeit ein Snippet und ungültig. Wenn Sie die Variablen jedoch in Aufrufe änderninput()
, ist dies vollkommen in Ordnung._[0]+_[-1]
->sum(..)
Rot ,
199, 168,161 BytesProbieren Sie es online!
0 - asymmetrisch
1 - symmetrisch
2 - zentral symmetrisch
Besser lesbar:
quelle
Mathematica, 137 Bytes
Funktion pur. Nimmt das Jahr und den Monat als Eingabe und gibt sie
-1
für asymmetrische Monate,0
für zentral symmetrische Monate und1
für vollständig symmetrische Monate zurück. Nicht sicher, warum diese Sprache nicht standardmäßig von einem Wochentag in eine Zahl konvertieren kann ...quelle
Bash + GNU-Dienstprogramme, 70
Die Eingabe ist formatiert als
YYYY/MM
.Die Ausgabe erfolgt numerisch wie folgt:
Ich gehe davon aus, dass dieses Ausgabeformat für diese Frage akzeptabel ist.
Probieren Sie es online!
quelle
C 111 Bytes
Invoke
f(year, month)
, 0 für vollständig symmetrisch, 1 für asymmetrisch, 2 für zentral symmetrisch.quelle
return
durchy=
(den ersten Parameter) ersetzen und aus der Funktion herausfallen.Perl 6 , 74 Bytes
Bare Block, implizit eine Funktion von 1 Argument, ein String wie
"2012-02"
. Kehrt zurück:Wenn das Muster symmetrisch ist und der Wochentag um 1 erhöht wird, müssen die Wochentage um 2 verschoben werden, um die Übereinstimmung zu gewährleisten (der Monat beginnt einen Tag später, muss jedoch einen Tag früher enden) ), so
2 * .day-of-week + .days-in-month
gibt uns ein Maß für diese Lücke. Modulo 7 sollte 1 sein, um Symmetrie zu erhalten, aber wir können zuerst billig nach dem Nichtsprung-Februar suchen, indem wir die Summe vor Modulo prüfen (Montag und 28 Tage pro Monat ist die minimal mögliche Kombination).Ich bin überrascht, dass dies so viele Bytes benötigt, aber es werden 36 Bytes benötigt, um nur ein Datum zu erstellen und den Wochentag und die Wochentage in diesem Monat zu ermitteln.
quelle