Podana reprezentacja tekstowa (pełna nazwa bez rozróżniania wielkości liter lub skrót 3 znaków) miesiąca zwraca liczbę dni w miesiącu.
Na przykład december
, DEC
i dec
powinno wszystko wrócić 31.
Luty może mieć 28 lub 29 dni.
Załóżmy, że dane wejściowe to miesiąc w jednej z poprawnych formularzy.
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
źródło
źródło
december
,DEC
idec
powinno wszystko zwrot 31” - to, że zamiarem?Odpowiedzi:
Pyke , 9 bajtów
Wypróbuj tutaj!
Lub 15 bajtów, jeśli wszystkie formaty wejściowe są wymagane
Wypróbuj tutaj!
źródło
FEB
.Apr
,Jun
,Sep
, iNov
), ale też myślę, że to wymaga trochę wyjaśnień w PO (patrz moje pytanie ).JavaScript (ES6),
48 47 44 4342 bajtyPróbny
Pokaż fragment kodu
W jaki sposób?
Operacje te prowadzą do tabeli przeglądowej zawierającej 8 wpisów, co nie byłoby bardzo interesujące, gdyby wartości były losowo rozmieszczone. Ale każdy wynik większy niż 2 jest odwzorowany na 31 dni. Dlatego tylko 3 pierwsze wpisy muszą być przechowywane jawnie.
źródło
.substr(0,3)
nie jest to wymagane. Tak więc, po namyśle, może to nie być najlepsze podejście.substr
?slice
!JavaScript (ES6),
3633 bajtów-3 bajty dzięki @JustinMariner i @Neil
Przepraszamy @Arnauld, nadużywanie dziwactwa JavaScript jest krótsze niż twoje fantazyjne konwersje podstawowe.
Jak to działa
Z jakiegoś powodu JavaScript umożliwia wprowadzanie dat poza określonym miesiącem. Kod zlicza, ile dni poza miesiącem jest data, aby określić liczbę dni w miesiącu. Przykłady:
"FEB31"
→Thu Mar 02 2000
→31 - 2 % 31
→29
"October31"
→Tue Oct 31 2000
→31 - 31 % 31
→31
Przypadki testowe
Pokaż fragment kodu
źródło
31
. Wygląda na to, że działanew Date("feb31")
na przykład w Chrome .+31
zaoszczędzić trzy bajty. Jednak to wszystko nie działa w przeglądarce Firefox.Python 2 ,
464538 bajtów-1 bajt dzięki @totallyhuman
Wypróbuj online!
źródło
Bash , 21 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako argument wiersza polecenia i wyświetla końcowy znak nowej linii. Liczba dni w lutym zależy od bieżącego roku
Wymaga util-linux 2,29 wersję
cal
, która jest jednym dostępny na TIO . Jest również zależny od ustawień regionalnych, więc LC_TIME musi zostać zmieniony w systemach nieanglojęzycznych (dziękuję @Dennis za wyjaśnienie).Pomysł przepuszczenia
xargs
docal
wyjścia trymowania pochodzi z tej SO odpowiedzi .źródło
Proton , 50 bajtów
Wypróbuj online!
-14 bajtów dzięki Jonathanowi Frechowi
Trzydzieści dni to wrzesień, kwiecień, czerwiec i listopad. Cała reszta miała masło orzechowe. Wszyscy oprócz mojej babci; miała mały czerwony trike, ale ja go ukradłem. muahahahahaha
(Czekałem, aby powiedzieć ten żart (źródło: mój profesor matematyki) od wieków na tej stronie: D: D: D)
źródło
'sepaprjunnov'
zamiast listy ciągów.C # (.NET Core) ,
52 + 13 = 6538 + 24 = 62 bajtyWypróbuj online!
+24 dla
using D=System.DateTime;
Podziękowanie
-3 bajty dzięki Grzegorzowi Puławskiemu.
źródło
using System;
? Czy możesz to wytłumaczyć z liczby bajtów?using D=System.DateTime;
im=>D.DaysInMonth(1,D.Parse(1+m).Month)
jak tutaj: tio.run/##jc5BSwMxEAXgs/…Python 3 , 60 bajtów
Wypróbuj online!
Przenoszenie mojego rozwiązania Proton
-10 bajtów dzięki całkowicie ludzkiemu
źródło
Data Shell / GNU ,
39, 26 bajtówGdzie
$1
jest nazwa miesiąca.Wypróbuj online!
edycja: Dzięki Dennis za uratowanie wielu bajtów!
źródło
AWK ,
4544 bajtówWypróbuj online!
źródło
Python 3 -
93868482 bajtówWarianty odpowiedzi (pokazujące przebieg czasu i bajty dla każdego z linkami TIO):
Oryginalna odpowiedź (93 bajty)
-7 bajtów dzięki Jonathanowi Frechowi. (86 bajtów)
-2 więcej bajtów dzięki własnemu dalszemu testowaniu
monthrange
wyników, przy czym druga wartość jest zawsze wartością wyższą. (84 bajtów) 1-2 więcej, używając
import calendar as c
i odwołując się do niegoc.monthrange
. (82 bajty, aktualna wersja )Oczywiście nie tak miła, jak odpowiedź HyperNeutrino, która nie używa wbudowanych, ale i tak działa.
Przypisy
1 : Przypadki testowe za pośrednictwem TIO.run, pokazujące dowód na to, jak radzę sobie z tymi
monthrange
wartościami, dla różnej liczby miesięcznych przypadków testowych.źródło
import ...,calendar as c
to, że nie muszę dwukrotnie wpisywać „kalendarz”.Perl 5 , 47 + 1 (
-p
) = 48 bajtówWypróbuj online!
źródło
($_)=/.(..)/;
zamiast$_=substr$_,1,2;
i()
wokół"eprunov"=~/$_/i
można usunąć.Haskell ,
656362 bajtówWypróbuj online!
Podejście do dopasowywania wzorców. Pierwszy wiersz dotyczy obsługi bez rozróżniania wielkości liter. Następnie zwracamy,
28
jeśli trzecia litera jest mniejsza niż C (cyfra 3),30
jeśli druga litera jest większa niż C, a trzecia większa niż M, lub w31
inny sposób.Edycja: -1 bajt dzięki Leo
Alternatywa (
6564 bajtów)Wypróbuj online!
źródło
c<3
zamiasta==6
(luty jest pierwszym miesiącem, jeśli zamówisz je za pomocą trzeciego listu, a następnie w grudniu)APL (Dyalog) , 32 bajty *
Funkcja ukrytego przedrostka. Zakłada
⎕IO
( I ndex O rigin)0
, co jest domyślne w wielu systemach.Wypróbuj online!
⍠1
wielkość liter nie ma znaczenia1
zwraca długość⎕S
PCRE S. earch dla'.p|un|no|f'
any-char, „p” lub „un” lub „no” lub „f”⊃⍨∘⊃
i użyj pierwszego tego elementu (0, jeśli nie ma), aby wybrać31 28 30
ta listaA zatem:
Apr , S ep , J un i No v wybiorą liczbę o indeksie 2, a mianowicie 30
F eb wybierze liczbę o indeksie 1, a mianowicie 28
wszystko inne wybierze liczbę o indeksie 0, a mianowicie 31
* Używanie klasycznego i liczenie
⍠
jako⎕OPT
.źródło
Szablon Mediawiki, 19 bajtów
źródło
MATL , 22 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Wolfram Language (Mathematica) ,
4630 bajtówWypróbuj online!
Da albo
28
czy29
w lutym w zależności od tego, czy obecny rok jest rokiem przestępnym.Jak to działa
Wszystkie polecenia data w Mathematica zinterpretuje takie wejście
April
,APR
,ApRiL
, i tak dalej, jak pierwszego dnia miesiąca odpowiadającego w bieżącym roku. (Jako bonus wprowadź dane takie jak"February 2016"
lub{2016,2}
działa również zgodnie z oczekiwaniami.)#~NextDate~"Month"
podaje pierwszy dzień następnego miesiąca iDayCount
podaje liczbę dni między dwoma argumentami. Liczba dni między 1 kwietnia a 1 maja wynosi 30, liczba dni w kwietniu.źródło
Java 8 , 47 bajtów
Wypróbuj online!
Skończyło się na tym samym pomyśle, co odpowiedź JS Hermana Lauensteina , gdzie ustalenie daty 31. przesunęło się na następny miesiąc. Java wymaga roku, więc został ustawiony na
1
.źródło
Retina ,
323128 bajtówWypróbuj online! Edycja: Zapisano 1 bajt dzięki @RobertBenson. Zaoszczędzono 3 bajty dzięki @ovs.
źródło
q / kdb +, 36 bajtów
Rozwiązanie:
Przykłady:
Wyjaśnienie:
Istnieje milion sposobów na skórowanie kota. Myślę, że różni się nieco od innych. Weź drugą i trzecią literę wpisu, małe litery, a następnie odszukaj je w ciągu
"ebeprunov"
. Jeśli są w lokalizacji 0, to jest luty, jeśli są w lokalizacji> 0, są 30-dniowi, jeśli nie są w ciągu, są 31-dniowi.źródło
Excel VBA,
4743 bajtówAnonimowa funkcja bezpośredniego okna VBE, która pobiera dane wejściowe, takie jak nazwa miesiąca, skrót lub numer, z zakresu
[A1]
i podaje długość tego miesiąca w roku 2001 do funkcji bezpośredniego okna VBE.Stara wersja
źródło
PHP,
3833 + 132 + 1 bajtówZaoszczędzono 5 bajtów dzięki Tytusowi
Uruchom jako potok z
-nF
Wypróbuj online!
źródło
.' 1'
, wydaje się, że bez TIO działa na TIO!<?=date(t,strtotime($argn));
(run as pipe with-nF
).' 1'
, but it wasn't working. After seeing your comment, I tried to figure out what I had done wrong. Because I was running it on the 31st of the month, it was taking the 31st (current) day for any month I put in, which would put it beyond the current month. Feb 31st turns into March 3rd, so the code returns 31 (the number of days in March). Because of this, every month was returning 31. So, it works without the.' 1'
on any day <= 28th of the month.'t'
->t
. Also, I had to do a bunch of searching to figure out how to "run as pipe with-nF
" but I got it figured out (I think). :)Java (OpenJDK 8), 126 bytes
Try it online!
źródło
false
to a boolean expression like1<0
to save a couple bytes.QBIC,
4935 bytesSignificantly shorter with some trickery.
Explanation
źródło
Perl 5, 24 bytes
23 bytes code + 1 for
-p
.Try it online!
źródło
Ruby, 45 bytes
Try it online!
Ruby's
Date.parse
accepts a month name on its own. What would normally be a right-shift (>>
) actually adds to the month of theDate
object. Subtraction affects the day of the month, which will wrap backwards to the last day of the previous month.źródło
Kotlin, 92 bytes
Try it online!
źródło