Bei einer Textdarstellung (vollständiger Name ohne Berücksichtigung der Groß- / Kleinschreibung oder Abkürzung mit 3 Zeichen) eines Monats wird die Anzahl der Tage im Monat zurückgegeben.
Zum Beispiel december
, DEC
und dec
sollte alle 31 zurück.
Februar kann entweder 28 oder 29 Tage haben.
Angenommen, die Eingabe ist ein Monat in einer der richtigen Formen.
code-golf
date
code-challenge
polyglot
hello-world
unicode
rosetta-stone
code-golf
ascii-art
kolmogorov-complexity
code-golf
math
approximation
code-golf
array-manipulation
code-golf
math
sequence
code-golf
array-manipulation
decision-problem
code-golf
ascii-art
random
card-games
code-golf
number
integer
base-conversion
code-golf
quine
binary
code-golf
graph-theory
classification
code-golf
math
number
code-golf
math
geometry
code-golf
tips
ruby
qw3n
quelle
quelle
december
,DEC
unddec
sollten alle Rückkehr 31“ - Ist das die Absicht?Antworten:
Pyke , 9 Bytes
Probieren Sie es hier aus!
Oder 15 Bytes, wenn alle Eingabeformate erforderlich sind
Probieren Sie es hier aus!
quelle
FEB
.Apr
,Jun
,Sep
, undNov
) , aber auch denken , dass es eine wenig Klärung im OP erfordert (siehe meine Frage ).JavaScript (ES6),
48 47 44 4342 ByteDemo
Code-Snippet anzeigen
Wie?
Diese Operationen führen zu einer Nachschlagetabelle von 8 Einträgen, was nicht sehr interessant wäre, wenn die Werte zufällig verteilt wären. Jedes Ergebnis, das größer als 2 ist, wird auf 31 Tage abgebildet . Daher müssen nur die ersten 3 Einträge explizit gespeichert werden.
quelle
.substr(0,3)
nicht erforderlich ist. Nach dem zweiten Gedanken ist dies möglicherweise nicht der beste Ansatz.substr
?slice
!Javascript (ES6),
3633 Bytes-3 Bytes dank @JustinMariner und @Neil
Entschuldigung @Arnauld, der Missbrauch von JavaScript ist kürzer als deine ausgefallenen Basis-Conversions.
Wie es funktioniert
Aus irgendeinem Grund ermöglicht JavaScript die Eingabe von Daten außerhalb des angegebenen Monats. Der Code zählt, wie viele Tage außerhalb des Monats das Datum ist, um zu bestimmen, wie viele Tage es in dem Monat gibt. Beispiele:
"FEB31"
→Thu Mar 02 2000
→31 - 2 % 31
→29
"October31"
→Tue Oct 31 2000
→31 - 31 % 31
→31
Testfälle
Code-Snippet anzeigen
quelle
31
. Es scheint zumnew Date("feb31")
Beispiel in Chrome zu funktionieren .+31
drei Bytes insgesamt sparen. Nichts davon funktioniert jedoch in Firefox.Python 2 ,
464538 Bytes-1 Byte dank @totallyhuman
Probieren Sie es online!
quelle
Bash , 21 Bytes
Probieren Sie es online!
Nimmt Eingaben als Befehlszeilenargument und gibt sie mit einer nachgestellten Newline aus. Die Tageszählung für Februar hängt von der des laufenden Jahres ab
Benötigt die Version util-linux 2.29 von
cal
, die auf TIO verfügbar ist . Ist auch vom Gebietsschema abhängig, daher muss LC_TIME auf nicht englischen Systemen geändert werden (danke @Dennis für die Klarstellung).Aus dieser SO-Antwort ergibt sich die Idee , die Ausgabe von
xargs
trim weiterzuleiten .cal
quelle
Proton , 50 Bytes
Probieren Sie es online!
-14 Bytes dank Jonathan Frech
Dreißig Tage haben September, April, Juni und November. Der ganze Rest hatte Erdnussbutter. Alle außer meiner Großmutter; Sie hatte ein kleines rotes Trike, aber ich habe es gestohlen. muahahahahaha
(Ich habe lange darauf gewartet, diesen Witz (Quelle: mein Mathematikprofessor) auf dieser Website zu erzählen: D: D: D)
quelle
'sepaprjunnov'
anstelle einer Liste von Zeichenfolgen verwenden.C # (.NET Core) ,
52 + 13 = 6538 + 24 = 62 BytesProbieren Sie es online!
+24 für
using D=System.DateTime;
Danksagung
-3 Bytes dank Grzegorz Puławski.
quelle
using System;
? Oder können Sie das von der Byteanzahl ausschließen?using D=System.DateTime;
undm=>D.DaysInMonth(1,D.Parse(1+m).Month)
wie hier: tio.run/##jc5BSwMxEAXgs/…Python 3 , 60 Bytes
Probieren Sie es online!
Portierung meiner Proton-Lösung
-10 bytes dank totalhuman
quelle
Shell / GNU Datum ,
39, 26 BytesWo
$1
ist der Name des Monats?Probieren Sie es online!
edit: Danke Dennis für das Speichern vieler Bytes!
quelle
AWK ,
4544 BytesProbieren Sie es online!
quelle
Python 3 -
93868482 BytesAntwortvarianten (mit Angabe des Zeitverlaufs und der Bytes für jede Antwort mit TIO-Links):
Ursprüngliche Antwort (93 Bytes)
-7 Bytes dank Jonathan Frech. (86 Bytes)
-2 weitere Bytes dank meiner eigenen weiteren Prüfung der
monthrange
Ergebnisse, wobei der zweite Wert immer der höhere Wert ist. (84 Bytes) 1-2 mehr durch Verwenden
import calendar as c
und Referenzieren mitc.monthrange
. (82 Bytes, aktuelle Revision )Offensichtlich nicht so schön wie die Antwort von HyperNeutrino, die keine eingebauten Funktionen verwendet, aber das funktioniert immer noch.
Fußnoten
1 : Testfälle über TIO.run mit dem Beweis, wie ich mit diesen
monthrange
Werten umgehe , für eine unterschiedliche Anzahl von monatlichen Testfällen.quelle
import ...,calendar as c
habe, um "calendar" nicht zweimal eingeben zu müssen.Perl 5 , 47 + 1 (
-p
) = 48 BytesProbieren Sie es online!
quelle
($_)=/.(..)/;
statt$_=substr$_,1,2;
und()
um"eprunov"=~/$_/i
können entfernt werden.Haskell ,
656362 BytesProbieren Sie es online!
Pattern Matching Ansatz. In der ersten Zeile wird die Groß- und Kleinschreibung behandelt. Dann kehren wir zurück,
28
wenn der dritte Buchstabe kleiner als C (Nummer 3) ist,30
wenn der zweite Buchstabe größer als C und der dritte größer als M ist, oder auf31
andere Weise.Edit: -1 Byte dank Leo
Alternative (
65 -64 Byte)Probieren Sie es online!
quelle
c<3
statta==6
(Februar ist der erste Monat , wenn man sich nach ihrem dritten Brief bestellen, gefolgt von Dezember)APL (Dyalog) , 32 Byte *
Tacit-Präfix-Funktion. Angenommen
⎕IO
( I ndex O rigin)0
, was auf vielen Systemen Standard ist.Probieren Sie es online!
⍠1
Groß- und Kleinschreibung wird nicht berücksichtigt1
Geben Sie die Länge der zurück⎕S
PCRE S uche nach'.p|un|no|f'
any-char, "p" oder "un" oder "no" oder "f"⊃⍨∘⊃
und verwenden Sie das erste Element davon (0, falls keines vorhanden), um eine Auswahl zu treffen31 28 30
diese ListeSomit:
Ap r, S ep , J un und No v wählen die Nummer bei Index 2, nämlich 30
F eb wählt die Nummer bei Index 1 aus, nämlich 28
Alles andere wählt die Nummer bei Index 0, nämlich 31
* Mit Classic und Zählen
⍠
als⎕OPT
.quelle
Mediawiki-Vorlage, 19 Byte
quelle
MATL , 22 Bytes
Probieren Sie es online!
Erläuterung
quelle
Wolfram Language (Mathematica) ,
4630 BytesProbieren Sie es online!
Wird entweder
28
oder geben29
für Februar an, je nachdem, ob das aktuelle Jahr ein Schaltjahr ist.Wie es funktioniert
Alle Daten Befehle in Mathematica interpretieren Eingabe so
April
,APR
,ApRiL
, und so weiter wie am ersten Tag des entsprechenden Monats im laufenden Jahr. (Als Bonus können Eingaben wie"February 2016"
oder{2016,2}
funktioniert die erwartet auch.)#~NextDate~"Month"
gibt den ersten Tag des Monats danach an undDayCount
gibt die Anzahl der Tage zwischen den beiden Argumenten an. Die Anzahl der Tage zwischen dem 1. April und dem 1. Mai beträgt 30, die Anzahl der Tage im April.quelle
Java 8 , 47 Bytes
Probieren Sie es online!
Endete mit der gleichen Idee wie Herman Lauensteins JS-Antwort , bei der das Setzen des Datums auf den 31. in den nächsten Monat verschoben wurde. Java benötigt ein Jahr, daher wurde dies auf gesetzt
1
.quelle
Retina ,
323128 BytesProbieren Sie es online! Bearbeiten: 1 Byte dank @RobertBenson gespeichert. 3 Bytes dank @ovs gespart.
quelle
q / kdb +, 36 Bytes
Lösung:
Beispiele:
Erläuterung:
Es gibt eine Million Möglichkeiten, eine Katze zu häuten. Ich denke ist etwas anders als die anderen. Nehmen Sie den 2. und 3. Buchstaben der Eingabe, schreiben Sie sie in Kleinbuchstaben und schlagen Sie sie in der Zeichenfolge nach
"ebeprunov"
. Wenn sie sich an Position 0 befinden, ist dies der Februar. Wenn sie sich an einer Position> 0 befinden, sind sie 30 Tage alt. Wenn sie nicht in der Zeichenfolge enthalten sind, sind sie 31 Tage alt.quelle
Excel VBA,
4743 BytesAnonyme VBE-Sofortfensterfunktion, die die Eingabe als Monatsname, Abkürzung oder Nummer aus dem Bereich übernimmt
[A1]
und die Länge dieses Monats im Jahr 2001 an die VBE-Sofortfensterfunktion ausgibt.Alte Version
quelle
PHP,
3833 + 132 + 1 Bytes5 Bytes gespart dank Titus
Als Rohr mit laufen lassen
-nF
Probieren Sie es online!
quelle
.' 1'
, es scheint ohne TIO zu funktionieren!<?=date(t,strtotime($argn));
(als Pipe mit ausgeführt-nF
).' 1'
, aber es funktionierte nicht. Nachdem ich Ihren Kommentar gesehen hatte, versuchte ich herauszufinden, was ich falsch gemacht hatte. Da ich es am 31. des Monats ausführte, dauerte es für jeden Monat, den ich eingab, den 31. (aktuellen) Tag, wodurch es über den aktuellen Monat hinausging. Der 31. Februar wird zum 3. März, sodass der Code 31 (die Anzahl der Tage im März) zurückgibt. Aus diesem Grund kehrte jeder Monat 31 zurück. Also funktioniert es ohne.' 1'
jeden Tag <= 28. des Monats.'t'
-> nicht realisiert habet
. Außerdem musste ich ein paar Mal suchen, um herauszufinden, wie man "als Pipe mit-nF
" läuft, aber ich habe es herausgefunden (glaube ich). :)Java (OpenJDK 8) , 126 Byte
Probieren Sie es online!
quelle
false
zu einem booleschen Ausdruck verkürzen1<0
, um ein paar Bytes zu sparen.QBIC ,
4935 BytesDeutlich kürzer mit einigen Tricks.
Erläuterung
quelle
Perl 5 , 24 Bytes
23 Byte Code + 1 für
-p
.Probieren Sie es online!
quelle
Ruby , 45 Bytes
Probieren Sie es online!
Ruby's
Date.parse
akzeptiert einen eigenen Monatsnamen. Was normalerweise eine Rechtsverschiebung (>>
) wäre, wird dem Monat desDate
Objekts hinzugefügt. Die Subtraktion wirkt sich auf den Tag des Monats aus, der auf den letzten Tag des Vormonats zurückgeht.quelle
Kotlin , 92 Bytes
Probieren Sie es online!
quelle