Ilu z was, którzy nadal używają własnej kostki, aby ustalić, czy miesiąc ma pełne 31 dni lub krócej?
Twoim zadaniem jest napisanie programu zliczającego, ile miesięcy w danym miesiącu mają pełne 31 dni, a ile mniej niż 31 dni, „licząc kostki”.
Dzięki uprzejmości: amsi.org.au
Wejście
Para miesięcy, z których pierwszy nie musi przychodzić chronologicznie przed drugim, podanym w dowolnym odpowiednim formacie. Na przykład: 201703 201902
- od marca 2017 r. Do lutego 2019 r. Opisz wybrany format wejściowy. Należy pamiętać, że dane wejściowe muszą obejmować wszystkie lata od 1 do 9999. Określony zakres miesięcy obejmuje zarówno miesiące początkowe, jak i końcowe.
Wynik
Dwie liczby całkowite: liczba miesięcy w danym przedziale z 31 dniami i liczba miesięcy w przedziale poniżej 31 dni.
Przykład: 14 10
- 14 kostek, 10 rowków (oznacza to, że w tym przedziale mamy 14 miesięcy, które mają pełne 31 dni i 10 miesięcy, które mają mniej niż 31 dni).
Na przykład w przypadku, gdy drugi miesiąc w przedziale jest chronologicznie przed pierwszym 201612 201611
, musisz na przykład wyzerować parę.
Przykłady wejścia i wyjścia
| 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 |
Zasady
- Możesz wybrać dowolny język
- Jedno wejście na linię
- To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach!
- Zwycięzca zostanie wybrany 9 kwietnia
- Obowiązują standardowe luki
- PS: to moje pierwsze pytanie w PCG, może mieć pewne niespójności. Edytuj i potwierdź, co jest dla Ciebie niejasne.
201612 201611
.Odpowiedzi:
Galaretka , 21 bajtów
Przyjmuje dane wejściowe jak
[[y, m], [y, m]]
.Wypróbuj online!
Jak to działa
źródło
JavaScript (ES6),
70686764 bajtówPobiera dane wejściowe jako dwie liczby całkowite w
yyyymm
formacie, w składni curry(a)(b)
. Zwraca tablicę dwóch liczb całkowitych[knuckles, grooves]
.Sformatowane i skomentowane
Przypadki testowe
Uwaga : Trzeci przypadek testowy nie jest zawarty w tym fragmencie, ponieważ nie będzie działał, chyba że w przeglądarce włączona jest funkcja optymalizacji połączenia z ogonem.
Pokaż fragment kodu
źródło
Python 2 ,
92908680 bajtówWypróbuj online!
6 więcej, przechodząc na lambda, dzięki dzięki @math_junkie za pomysł. Teraz wyświetla listę zawierającą dwie liczby.
Poprzednia wersja inna niż lambda (86 bajtów)
Wypróbuj online stary!
2 zapisane dzięki dzięki @ovs za pomoc w pozbyciu się
len(k)
. Nie myślałem o użyciuNone
.Dane wejściowe to lista liczb całkowitych w formacie
y1,m1,y2,m2
Pewne uznanie dzięki @KeerthanaPrabhakaran, który dostał
bin(2741)[2:]
wcześniej, co zrobiłem, co pozwala zaoszczędzić 1 bajt na sztywnym kodowaniu łańcucha binarnego.źródło
len(k)
ostatniego kawałka. Dzięki.PHP ,
259256249248237221 bajtówOutgolfed by aross : https://codegolf.stackexchange.com/a/114512/38505
Format wejściowy:
yyyymm,yyyymm
Wypróbuj online!
starsza wersja
Wypróbuj online!
Wypróbuj online!
Wypróbuj online!
Wypróbuj online!
Wypróbuj online!
źródło
Partia, 93 bajty
Akceptuje dwa parametry w formacie ymm (tj. 101 - 999912). Poprzednie 129-bajtowe rozwiązanie oparte na pętli:
źródło
Python 3.5 (
164162154152150150140 140137 bajtów)repl.it
przyjmuje dane wejściowe w postaci rrrrrrrrrm
wypisuje dane wyjściowe jako numer_kolki numer_krwi
źródło
n=int
a może także trochęexec
wygłupów.2773&1<<r%12-1>0
zamiastint('101010110101'[r%12-1])
print([k,t-k])
asprint(k,t-k)
dałoby pożądany wynik,(k,g)
zmniejszając w ten sposób 2 bajty!split(' ')
zsplit()
Python 2 ,
147146142 bajtówWypróbuj online!
Rozbijając kod,
źródło
if-else
klauzule przeglądami tablic. Zobacz ten post, aby poznać szczegółyPHP,
1201039796 bajtówUruchom tak:
Wyjaśnienie
Poprawki
$e
, po prostu porównaj bezpośrednioźródło
$x++
zamiast+$x++
też działa.$x
niezainicjalizowanym łańcuchu będzie2017-12month
, który jest nierozpoznanym formatem i rezultatem w 1970 roku+
w łańcuchu.PowerShell , 96 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako formularz
2017-03
. Korzysta z wbudowanych bibliotek dat .NET i pętli od danych wejściowych$a
do$b
, każda iteracja zwiększa się$x++
i dodaje,$z
jeśli bieżący.Month
jest-in
2,4,6,9,11
(tj. Miesiąc inny niż 31-dniowy). Następnie wyprowadzamy nasze całkowite miesiące minus miesiące nieprzeznaczone na 31 dni i miesiące$x-$z
nieprzyjęte na 31 dni$z
.Rzuca błąd na
0001-01
do9999-12
badania sprawy, ponieważ .NET obsługuje tylko lata do9999
tak ostatecznych.AddMonths(1)
przyczyn przepełnienie. Nadal jednak wyświetla prawidłowe wartości, ponieważ jest to błąd nie kończący się; powoduje tylko zamknięcie pętli.Prawdopodobnie byłoby to krótsze, aby zrobić to arytmetycznie, na przykład odpowiedzi w języku Python lub JavaScript, ale chciałem pokazać podejście z wykorzystaniem wbudowanych platform .NET.
źródło
Bash , 113 bajtów
Wypróbuj online!
potrzebuje gry w golfa ...
przyjmuje dane jako
2016-03
2018-10
wyjścia:
bez golfa:
źródło
Szybki, 151 bajtów
input to tablica dwóch liczb całkowitych w formacie zgodnym z przykładem
źródło