Wprowadzenie:
Ponieważ jest już prawie Halloween, myślałem tylko o losowych wyzwaniach związanych z Halloween. W końcu czytałem stronę wikipedii Frankensteina i natrafiłem na następujący tekst:
Stworzenie
Częścią odrzucenia jego dzieła przez Frankensteina jest to, że nie nadaje mu nazwy, co powoduje brak tożsamości. Zamiast tego są określane słowami takimi jak „nieszczęśnik”, „potwór”, „stworzenie”, „demon”, „diabeł”, „diabeł” i „to”. Kiedy Frankenstein rozmawia ze stworzeniem z rozdziału 10, nazywa go „podły owad”, „odrażony potwór”, „diabeł”, „nędzny diabeł” i „odrażający diabeł”.
Wyzwanie:
Biorąc pod uwagę dwie liczby całkowite (rok i rozdział), wypisz ciąg oparty na następujących zasadach:
- Jeśli rok jest krótszy niż 1818: wypisz pusty ciąg †
- Jeśli rok ma dokładnie 1818, a rozdział jest poniżej 10: wypisz losowy ciąg z listy
["wretch", "monster", "creature", "demon", "devil", "fiend", "it"]
- Jeśli rok ma dokładnie 1818, a rozdział wynosi 10 lub więcej: wypisz losowo ciąg z listy
["vile insect", "abhorred monster", "fiend", "wretched devil", "abhorred devil"]
- Jest rok powyżej 1818 (a więc książka została opublikowana), powrót
"Frankenstein's Monster"
.
Zasady konkursu:
- Możesz wybrać, czy dane mają być drukowane małymi literami, dużymi literami czy kombinacją.
- Rok będzie zawsze w przedziale
1500-2017
- Rozdział zawsze będzie w zasięgu
1-24
(jeśli poprawnie przejdę do Google, książka ma 24 rozdziały) - † Zamiast wyprowadzania pusty ciąg dla opcji 1, masz również możliwość wyjścia
null
,undefined
,false
,0
, lub jakakolwiek inna wartość swojego wyboru nie część z pozostałych trzech opcji (proszę określić, co już używany w odpowiedzi). - Dane wyjściowe nie mogą zawierać żadnych początkowych ani końcowych spacji / tabulatorów ani żadnych wiodących nowych wierszy. Może zawierać jedną opcjonalną końcową nową linię.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki kod-golfowe zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi odnoszą się standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione (zwłaszcza „Fałszywe losowe liczby” ).
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
Przypadki testowe:
year,chapter possible outputs:
1700,1 ""; null; undefined; false; 0; etc.
1700,12 ""; null; undefined; false; 0; etc.
1817,10 ""; null; undefined; false; 0; etc.
1818,1 "wretch"; "monster"; "creature"; "demon"; "devil"; "fiend"; "it"
1818,9 "wretch"; "monster"; "creature"; "demon"; "devil"; "fiend"; "it"
1818,10 "vile insect"; "abhorred monster"; "fiend"; "wretched devil"; "abhorred devil"
1818,11 "vile insect"; "abhorred monster"; "fiend"; "wretched devil"; "abhorred devil"
1818,18 "vile insect"; "abhorred monster"; "fiend"; "wretched devil"; "abhorred devil"
1819,1 "Frankenstein's Monster"; "frankenstein's monster"; "FRANKENSTEIN'S MONSTER"
1819,18 "Frankenstein's Monster"; "frankenstein's monster"; "FRANKENSTEIN'S MONSTER"
2017,24 "Frankenstein's Monster"; "frankenstein's monster"; "FRANKENSTEIN'S MONSTER"
<...>
zakłada globusy?Python 2 ,
227220214 bajtówWypróbuj online!
źródło
'abhorred '
także listę na dole, ponieważ została ona użyta dwukrotnie. ('wretch'
jest również możliwe, ale liczba bajtów pozostaje taka sama.)Perl 5 , 172 bajty
171 bajtów kod + 1 dla
-p
.Wypróbuj online!
Wyjaśnienie
Dość standardowy tylko nieznacznie unsual rzeczą jest użycie określenia „podmiot kosmiczny” (
<=>
) w1818
celu powrotu-1
,0
lub1
, jeśli sygnał wejściowy$_
jest mniejszy, równy lub większy niż1818
powrotu ostatniego, pierwszy lub drugi indeks danych źródłowych . Lubię też operatora ryb !źródło
$F=fiend
, ale po przetestowaniu okazało się, że mam taką samą długość.$
sigil :($}
co za zmienna nazwa ...$W
, musiałbym użyć,${W}
ponieważ jest obok innego listu.C # (kompilator Visual C #) ,
225209 bajtówWypróbuj online!
-16 dzięki Kevin Cruijssen
Nie jest to szczególnie zwięzłe, ale spodziewałbym się, że C # zajmie więcej miejsca do zadeklarowania i użycia dowolnych powtarzających się ciągów, tak jak robi to odpowiedź Python, niż po prostu ich powtarzanie. Dołączony tester ma
Thread.Sleep(1)
wewnątrz wyliczenie przypadków testowych, ponieważ domyślny seeding dlaRandom()
wykorzystuje bieżący czas, a faktyczna funkcja działa wystarczająco szybko, aby skończyć z tym samym seedem w kolejnych uruchomieniach bez opóźnień.Wywołania func używają składni curry
f(year)(chapter)
(lub jakiejkolwiek nazwy, w której funkcja jest przechowywana zamiast f)źródło
fiend
w środku pojedynczą tablicę łańcuchów, ponieważ jest on obecny na obu listach. Można zaoszczędzić kilka bajtów zastępującnew[]{"wretch","monster","creature","demon","devil","it","fiend","vile insect","abhorred monster","wretched devil","abhorred devil"}
z"wretch,monster,creature,demon,devil,it,fiend,vile insect,abhorred monster,wretched devil,abhorred devil".Split(',')
(-16 bajtów)","
na po prostu rekompensuje,
dłuższe w.Split(',')
porównaniunew[]{}
z więcej niż kilkoma elementami.Bash,
229,206,197, 179 bajtówwyjaśnienie dotyczące rozszerzeń nawiasów / zmiennych
jest najpierw rozszerzony do
następnie zmienna m jest rozszerzana
jednak następujące nie działa, ponieważ
$w
zostanie najpierw połączoneed
iwed
nie jest zdefiniowane i zostanie rozwinięte do pustego ciągu.można to zrobić dodając wyraźne nawiasy klamrowe wokół w, ale będzie ono dłuższe
TIO
źródło
wretch
imonster
( 225 bajtów ).APL (Dyalog Unicode) , 189 bajtów
Wypróbuj online!
Aby przetestować, po prostu dołącz skrzynkę testową do ostatniego nawiasu klamrowego w następujący sposób:
Ogromne podziękowania dla @ngn za pomoc w wiodącym problemie z białymi znakami.
Jak to działa:
Warto zauważyć, że APL interpretuje ciągi znaków jako tablice ( wektory ) znaków, dlatego
'wretch' 'creature'
w innych językach byłby interpretowany jako[[w,r,e,t,c,h],[c,r,e,a,t,u,r,e]]
Są to funkcje pomocnicze:
Jest to główna funkcja, która zostanie podzielona na 3 części dla lepszego zrozumienia:
Część 1:
Część 2:
Część 3:
źródło
Java (OpenJDK 8) ,
275269255207203 bajtówWypróbuj online!
źródło
Object
zamiast drukowania bezpośrednio:y->c->y<1818?0:y>1818?"Frankenstein's monster":"wretch,monster,creature,demon,devil,fiend,it,vile insect,abhorred monster,fiend,wretched devil,abhorred devil".split(",")[(int)(Math.random()*(c<9?7:5))+(c<9?0:7)]
fiend
(który jest obecny na obu listach) na środku:y->c->y<1818?0:y>1818?"Frankenstein's monster":"wretch;monster;creature;demon;devil;it;fiend;vile insect;abhorred monster;wretched devil;abhorred devil".split(";")[(int)(Math.random()*(c<10?7:5))+(c<10?0:6)]
( 207 bajtów )IntFunction
s zamiast,Function<Integer>
aby uruchomić.PHP,
184176 bajtówUruchom
-n
i podaj rok i rozdział jako argumenty wiersza poleceń lub wypróbuj online .indeks, a tym samym wynik oceny
NULL
dla roku <1818, co prowadzi do pustej produkcji.źródło
$argv[1]<=>1818
zrobić? Nigdy tego nie widziałem.JavaScript (ES6), 205 bajtów
Zwraca,
0
jeśli rok jest krótszy niż 1818Pokaż fragment kodu
źródło
JavaScript 199 bajtów
źródło
C, 380 BYTES
źródło
"Frankenstein's Monster"
bezpośrednio zamiast tworzenia dla niego zmiennej. Poza tym, skądyear
i cochapter
pochodzi teraz? Nie widzę tego jako parametrów metody. Przydatne mogą być wskazówki dotyczące gry w golfa w <wszystkich językach> oraz wskazówki dotyczące gry w golfa w C. Miłego pobytu! :)void o(int y,int c){char*b[]={"wretch","monster","creature","demon","devil","fiend","it"},*a[]={"vile insect","abhorred monster","fiend","wretched devil","abhorred devil"};printf("%s",y<1818?0:y==1818?c>9?a[rand()%6]:b[rand()%7]:"Frankenstein's Monster");}
256 bajtów Wypróbuj tutaj! (Usunąłem wszystkie niepotrzebne spacje,printf
zmieniłem nazwę metody / zmiennych / parametrów na jedną literę; usunąłem niepotrzebne nawiasy w trójce-jeśli; pojedyncze ; zmieniłem<10
na>9
; itp.) Nie jestem pewien, dlaczegorand()
nie działa w TIO ..: SMBASIC , 288 bajtów
źródło
05AB1E ,
114110 bajtówDane wyjściowe,
0
gdy rok jest poniżej1818
.Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz tę końcówkę 05AB1E kopalni (sekcje Jak korzystać ze słownika? ; Jak kompresować strun nie Część słownika? ; Jak skompresować dużych liczb całkowitych? ; I jak skompresować list całkowitych? ) , Aby zrozumieć, dlaczego:
…뢼–±¹
jest"creature devil monster"
;.•ʒ¦Ë"ìËM₂G¶тá≠•
jest"demon fiend it wretch "
;.•1ÏiT¥Ƶʒ“T¡Äg… 5ÀΘO¼™Ãí?ιË%4₄‡‡λYιi¾н•
jest"abhorred devilabhorred monsterfiendvile insectwretched devil"
;•Jtm•
jest1249548
i•Jtm•17в
jest[14,16,5,11,14]
;'ì³
jest"liechtenstein "
;’¡¬ÿÿ±¹’
jest"frankÿÿmonster"
;Ž7X
jest1818
.źródło
JavaScript, 194 B.
źródło