Jesteś kosmicznym turystą na swojej drodze do planety Flooptonia! Lot potrwa kolejne 47 315 lat, więc aby minąć czas, zanim się zamrozisz, postanowisz napisać program, który pomoże ci zrozumieć kalendarz Flooptonian.
Oto 208-dniowy kalendarz Flooptonian:
Month Days Input Range
Qupu 22 [0-22)
Blinkorp 17 [22-39)
Paas 24 [39-63)
Karpasus 17 [63-80)
Floopdoor 1 [80]
Dumaflop 28 [81-109)
Lindilo 32 [109-141)
Fwup 67 [141-208)
Wyzwanie
Twój program, podając liczbę całkowitą w roku (zakres [0-208)
), ma wypisać odpowiedni dzień miesiąca i nazwę miesiąca (np 13 Dumaflop
.).
Istnieje jednak wyjątek: Floopdoor to szczególny czas dla Flooptonian, który najwyraźniej zasługuje na własną stronę kalendarza. Z tego powodu nie jest napisane Floopdoor z dnia (czyli wyjście to Floopdoor
nie 1 Floopdoor
).
Przypadki testowe
0 => 1 Qupu
32 => 11 Blinkorp
62 => 24 Paas
77 => 15 Karpasus
80 => Floopdoor
99 => 19 Dumaflop
128 => 20 Lindilo
207 => 67 Fwup
Zasady
- Musisz napisać kompletny program.
- Możesz założyć, że dane wejściowe są zawsze prawidłowe.
- Twój wynik może mieć końcowy znak nowej linii, ale w przeciwnym razie nie może zawierać żadnych dodatkowych znaków. Sprawa powinna również pasować do podanych przykładów.
- Możesz korzystać z funkcji daty / godziny.
- Długość kodu należy mierzyć w bajtach.
o
, ale inne wystąpienia nazwy nie.Odpowiedzi:
Pyth -
1051039088 bajtówWykorzystuje konwersję podstawową. Dwie proste tabele odnośników, jedna dla nazw i jedna dla dat rozpoczęcia, oraz trójka na końcu dla Floopdoor.
Kompresuje ciąg nie jako podstawę 128, ale jako podstawę 23. Najpierw tłumaczy go na indeksy alfabetu. Wymagało to separatora,
c
który nie pojawia się w żadnej z nazw miesięcy. Następnie koduje to do podstawy dziesięciu z liczby podstawowej 23 (najwyższa wyświetlona wartość tow
), a następnie konwertuje do podstawy 256.Daty rozpoczęcia są ich kodami Unicode, bez konwersji podstawowej.
Wypróbuj online tutaj .
Pakiet testowy .
źródło
Python 3,
159156152151150148 148 bajtówObiekt bajtów w
zip
zawiera znaki niedrukowalne:(Dzięki @xnor za zaproponowanie
for/zip
pętli dla -3 bajtów)źródło
b
bezpośredniofor
zamiast zamiast z czymś takimfor c in b"...":i+=n>0;n-=c
.n
aby przestać spadać. Nadal powinno być możliwe z czymś takim,x=n>c;n-=c*x;i+=x
ale nie wiem, czy warto.Piet 2125 bajtów
Nie jest wcale najkrótszy, ale jest ładny i kolorowy ...
Każdy piksel jest umieszczany przeze mnie ręcznie. Aby go uruchomić, przejdź tutaj w FireFox (Chrome nie będzie działał) i załaduj go z koderem o szerokości 1 (będzie czarny, nie martw się), wpisz numer i naciśnij przycisk uruchamiania!
Mały program:
Powiększony (szerokość kodu 10):
źródło
dead chex
dodaje się do liczby bajtów?Pyth
178156153147 bajtówPermalink
Drugi golf w historii, wszelkie opinie Pyth będą bardzo pomocne.
Wyjaśnienie
źródło
J=...
w stan trójkowy.CJam,
989693 bajtówPowyższe jest odwracalnym zrzutem szesnastkowym, ponieważ kod źródłowy zawiera znaki niedrukowalne.
Większość niedrukowalnych znaków nie stanowi problemu dla interpretera online, ale bajt zerowy w pierwszym ciągu jest przerywnikiem.
Kosztem jednego bajtu możemy to naprawić, dodając 1 do wejścia i 1 do każdego punktu kodowego pierwszego ciągu. Możesz wypróbować tę wersję w interpretatorze CJam .
Jeśli bezpośredni link nie działa w przeglądarce, możesz skopiować kod z tej pasty .
Przypadki testowe
Jak to działa
źródło
SWI-Prolog,
237232213 bajtówTutaj używamy mechanizmu wycofywania prolog do wielokrotnie zastosować
nth1/3
do listyL
, aby uzyskać pierwszy elementLastDay+1:MonthName
zL
, dla którychX < LastDay+1
przechowuje. Następnie szukamy miesiąca bezpośrednio przed tym na liście, aby ocenić dzień miesiąca.źródło
Q,
134146 bajtówdrugie cięcie - program (146 bajtów)
pierwsze cięcie - funkcja (134 bajty)
testowanie
źródło
Julia,
231216184175 bajtówOdczytuje wiersz ze STDIN i konwertuje go na liczbę całkowitą, znajduje pierwszy element na odwróconej liście dni początkowych miesiąca, w których dane wejściowe są większe lub równe początkowi, a następnie odpowiednio drukuje.
źródło
Swift 1.2, 256 bajtów
Aby uruchomić, umieść kod sam w
.swift
pliku i uruchom go za pomocąswift <filename> <inputNumber>
źródło
Java,
357339 bajtówTo nie jest najbardziej wydajne, ale podoba mi się to, jak to działa. Tworzy cały kalendarz Flooptonia, a następnie sprawdza datę tego numeru.
Wejście wyjście:
77 --> 15 Karpasus 80 --> Floopdoor
Rozstawiony i tabulowany:
źródło
Jawa,
275269266257256252246244243 bajtySformatowany:
Co ciekawe, jest o kilka bajtów krótszy niż ten
źródło
JavaScript za pomocą ES6
171164163 bajtówNie jestem najlepszym programistą JavaScript, ale starałem się, aby uzyskać następujący kod
Aby zobaczyć wynik, musisz odwołać się do powyższego kodu w pliku HTML i użyć podobnego do kodu poniżej
W powyższym kodzie fp.js to plik zawierający kod javascript.
Połączony kod HTML i JavaScript z wcięciem to
Edytować:
Chciałbym podziękować Vihan za pomoc w usunięciu instrukcji return i zmniejszeniu mojego kodu o 17 bajtów
@ipi, dziękuję za pomoc w oszczędzeniu 7 bajtów
źródło
"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)
i zapisać 7 bajtów.You must write a complete program
Myślę, że to musi działać sam, być może będziesz musiał użyć czegoś takiego jak prompt ().Python 2, 168 bajtów
Traktuje to dzień
80
wewnętrznie jako18 Karpasus
, ale następnie ignoruje go, gdy zostanie wezwany do drukowania. Równieżinput()
funkcja Pythona 2 (w przeciwieństwie doraw_input()
) była tu wygodna.źródło
Perl 5, 140
Wymaga uruchomienia przez
perl -E
:Wyjście testowe (skradziony kod testowy z @Dennis):
źródło
Haskell,
171167 bajtówProgram odczytuje wejście ze standardowego wejścia, które nie może kończyć się na NL. Zakończ wprowadzanie za pomocą EOF / ^ D lub użyj czegoś podobnego
echo -n 80 | ./what-day-is-it
. (Niektóreecho
nie rozumieją-n
przełącznika i domyślnie pomijają NL).Jak to działa:
main
Funkcja odczytuje dane wejściowe, konwertuje je naInteger
i wywołuje,f
który zwraca literałFloopdoor
w przypadku danych wejściowych80
lub tworzy listę wszystkich możliwych dat, tj.["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]
Od których wybiera tenn
element. robięKarpasus
to o jeden dzień dłużej.18 Karpasus
jest na miejscu80
i naprawia brakująceFloopdoor
na liście.Edycja: @MtnViewMark wpadł na pomysł
18 Karpasus
sztuczki i zapisał 4 bajty.źródło
,1
i `x` - ponieważ 80 zostanie złapane przez dopasowanie wzorca dla niego.Swift 2.0, 220 bajtów
Nic sprytnego, po prostu filtry z kolekcji krotek ...
Edytowano, aby poprawić błąd, usunięto spację
źródło
JavaScript (ES6 na Node.js), 196 bajtów
Bierze jeden argument wiersza poleceń:
Próbny
Ponieważ w przeglądarce nie ma argumentu wiersza polecenia (
process.argv
), kod we fragmencie został umieszczony w funkcji, która przyjmuje argument:źródło
Swift 2.0,
215204Jest to pełny program, który prosi użytkownika o wprowadzenie numeru w STDIN.
źródło
Matlab, 187 bajtów
Wersja rozszerzona:
Odczytuje wiersz z konsoli (
stdin
), znajduje pierwszy element na odwróconej liście dni początkowych miesiąca, w których dane wejściowe są większe lub równe elementowi tablicy, a następnie odpowiednio drukuje.Jest to prawie identyczne z
Julia
odpowiedzią, z wyjątkiem etapu wyświetlania. ( Nie możemy pokonać ich trójskładnikowego operatora, niedostępnego w Matlabie ). Aby nadrobić koniecznośćif
wyrażenia pełnego oświadczenia, używamy małej sztuczki ( Backspaceznaku w formacie wydruku), aby „skasować” cyfrę 1 w specjalnym dniu / miesiącuFloopdoor
We współpracy z uczestnikami czatu Matlab i Octave .
źródło
JavaScript ES5 przy użyciu 168 bajtów
Nie golfowany:
źródło
C, 241 bajtów
Nic zbyt ekscytującego. Mógłby ogolić 27 bajtów, gdyby wymagał kompletnego programu.
źródło