Wie viele von Ihnen verwenden immer noch Ihren eigenen Knöchel, um festzustellen, ob ein Monat volle 31 Tage oder weniger hat?
Ihre Aufgabe ist es, ein Programm zu schreiben, um zu zählen, wie viele Monate in einem Monatsbereich volle 31 Tage und wie viele weniger als 31 Tage haben, indem Sie "die Knöchel zählen".
Mit freundlicher Genehmigung von amsi.org.au.
Eingang
Ein paar Monate, von denen der erste nicht chronologisch vor dem zweiten stehen muss, in einem geeigneten Format. Zum Beispiel: 201703 201902
- März 2017 bis Februar 2019. Bitte beschreiben Sie das von Ihnen gewählte Eingabeformat. Beachten Sie, dass die Eingabe alle Jahre von 1 bis 9999 umfassen kann. Der angegebene Monatsbereich umfasst sowohl den Start- als auch den Endmonat.
Ausgabe
Zwei ganze Zahlen: die Anzahl der Monate im angegebenen Bereich mit 31 Tagen und die Anzahl der Monate im Bereich mit weniger als 31 Tagen.
Beispiel: 14 10
- 14 Knöchel, 10 Rillen (dies bedeutet, dass wir in diesem Monatsbereich 14 Monate mit vollen 31 Tagen und 10 Monate mit weniger als 31 Tagen haben).
Für eine Eingabe, bei der der zweite Monat im Bereich chronologisch vor dem ersten liegt 201612 201611
, müssen Sie beispielsweise ein Nullpaar ausgeben.
Beispiele für Eingabe und Ausgabe
| Input | Output |
|---------------|-------------|
| 201703 201902 | 14 10 |
| 201701 202008 | 26 18 |
| 000101 999912 | 69993 49995 |
| 201802 201803 | 1 1 |
| 201601 201601 | 1 0 |
| 201612 201611 | 0 0 |
Regeln
- Sie können eine beliebige Sprache auswählen
- Ein Eingang pro Zeile
- Dies ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
- Der Gewinner wird am 9. April ermittelt
- Es gelten Standardlücken
- PS: Dies ist meine erste Frage in PCG, es kann einige Inkonsistenzen geben. Sie können jederzeit bearbeiten und bestätigen, was für Sie unklar ist.
201612 201611
.Antworten:
Gelee , 21 Bytes
Nimmt Eingaben wie
[[y, m], [y, m]]
.Probieren Sie es online aus!
Wie es funktioniert
quelle
JavaScript (ES6),
70686764 ByteÜbernimmt die Eingabe als zwei Ganzzahlen im
yyyymm
Format und in der Curry-Syntax(a)(b)
. Gibt ein Array mit zwei Ganzzahlen aus[knuckles, grooves]
.Formatiert und kommentiert
Testfälle
NB : Der dritte Testfall ist in diesem Snippet nicht enthalten, da er nur funktioniert, wenn in Ihrem Browser die Tail Call-Optimierung aktiviert ist.
Code-Snippet anzeigen
quelle
Python 2 ,
92908680 BytesProbieren Sie es online aus!
6 weitere durch Konvertierung in ein Lambda, danke an @math_junkie für die Idee. Gibt jetzt eine Liste mit den beiden Zahlen aus.
Vorherige Nicht-Lambda-Version (86 Bytes)
Probieren Sie es online alt!
2 gespeichert mit Dank an @ovs für die Hilfe, die ich loszuwerden
len(k)
. Ich hatte nicht daran gedacht, es zu benutzenNone
.Eingabe ist eine Liste von Ganzzahlen im Format
y1,m1,y2,m2
Etwas Dank an @KeerthanaPrabhakaran, der
bin(2741)[2:]
vor mir bekommen hat, was 1 Byte über die harte Codierung der Binärzeichenfolge spart.quelle
len(k)
die letzte Scheibe loszuwerden . Vielen Dank.PHP ,
259256249248237221 BytesVon aross outgolfed : /codegolf//a/114512/38505
Eingabeformat:
yyyymm,yyyymm
Probieren Sie es online aus!
ältere Versionen
Probieren Sie es online aus!
Probieren Sie es online aus!
Probieren Sie es online aus!
Probieren Sie es online aus!
Probieren Sie es online aus!
quelle
Stapel, 93 Bytes
Akzeptiert zwei Parameter im ymm-Format (dh 101 - 999912). Bisherige 129-Byte-Lösung auf Schleifenbasis:
quelle
Python 3.5 (
164162154152150148140137 Bytes)repl.it
nimmt Eingabe in Form von JJJJMJ JJJJM
Gibt die Ausgabe als Anzahl der Knöchel aus
quelle
n=int
und vielleicht auch etwasexec
Dummheit.2773&1<<r%12-1>0
stattint('101010110101'[r%12-1])
print([k,t-k])
asprint(k,t-k)
würde das gewünschte Ergebnis erzeugen,(k,g)
wodurch 2 Bytes reduziert werden!split(' ')
mitsplit()
Python 2 ,
147146142 BytesProbieren Sie es online aus!
Code aufschlüsseln,
quelle
if-else
Klauseln durch Array-Lookups ersetzen . Siehe diesen Beitrag für DetailsPHP,
1201039796 BytesLaufen Sie so:
Erläuterung
Tweaks
$e
wurde. Vergleichen Sie einfach direktquelle
$x++
statt+$x++
funktioniert auch.$x
nicht initialisiert die Zeichenfolge sein würde2017-12month
, was ein nicht erkanntes Format ist und 1970 resultiert+
in der Zeichenfolge funktioniert .PowerShell , 96 Byte
Probieren Sie es online aus!
Nimmt Eingabe als Form
2017-03
. Verwendet die integrierten .NET-Datumsbibliotheken und durchläuft die Eingaben$a
bis$b
, wobei jede Iteration erhöht$x++
und addiert wird,$z
wenn der aktuelle.Month
Wert-in
2,4,6,9,11
(dh ein Monat außerhalb von 31 Tagen) ist. Dann geben wir unsere Gesamtmonate abzüglich der Nicht-31-Tage-Monate$x-$z
und der Nicht-31-Tage-Monate aus$z
.Wirft einen Fehler in den
0001-01
zu testenden9999-12
Fall, da .NET nur Jahre bis zu unterstützt9999
, sodass das Finale.AddMonths(1)
einen Überlauf verursacht. Gibt jedoch weiterhin die korrekten Werte aus, da es sich um einen nicht abschließenden Fehler handelt. es bewirkt nur, dass die Schleife beendet wird.Wahrscheinlich wäre es kürzer, dies arithmetisch zu tun, wie die Python- oder JavaScript-Antworten, aber ich wollte einen Ansatz zeigen, der die integrierten .NET-Funktionen verwendet.
quelle
Bash , 113 Bytes
Probieren Sie es online aus!
braucht Golf ...
nimmt Eingabe als
2016-03
2018-10
Ausgänge:
ungolfed:
quelle
Schnell, 151 Bytes
Die Eingabe ist ein Array von zwei Ganzzahlen im Format gemäß Beispiel
quelle