Uwaga: w tym pytaniu jest kilka niegrzecznych słów.
W tym klasycznym szkicu Monty Python jest ukryta zagadka (możesz również przygotować skrypt online).
Różne frazy są określane jako „drzewne” lub „tinny”, a jedno jest określane jako „PVC”.
Biorąc pod uwagę frazę, odpowiedz swoim typem zgodnie z następującymi listami:
woody
:
gone
sausage
seemly
prodding
vacuum
bound
vole
caribou
intercourse
pert
thighs
botty
erogenous zone
ocelot
wasp
yowling
tinny
:
litter bin
newspaper
antelope
recidivist
tit
simpkins
PVC
:
leap
Zasady
- Jeśli wejście należy do jednej z powyższych list, wyjście powinno być
woody
,tinny
lubPVC
, odpowiednio. - Wszystkie dane są pisane małymi literami.
- Każde zachowanie jest dopuszczalne w przypadku zwrotów niewymienionych powyżej.
- Wygrywa najmniej bajtów w odpowiedzi.
code-golf
string
classification
AJFaraday
źródło
źródło
You may choose how to deal (or ignore) with casing in input and output.
Aby wyjaśnić, czy oznacza to, że możemy oczekiwać, że dane wejściowe będą pisane wielkimi literami?Odpowiedzi:
Stax ,
3025 bajtówUruchom i debuguj
Komentowana reprezentacja ascii jest taka. Nie wymyśliłem tego algorytmu. Bezwstydnie oderwał rozwiązanie python Jonathana Allena .
Uruchom ten
źródło
can help you
jest trochę mylące, ale logicznie jest w porządku.Python 2 ,
9973656463 bajtyWypróbuj online!
Alternatywy również z 63 bajtami:
źródło
Python 2 , 62 bajty
Wypróbuj online!
W jaki sposób?
To przesłanie wykorzystuje fakt, że
hash
funkcja jest stabilna dla ciągów znaków w Pythonie 2. Każde prawidłowe wejście ma prawidłowe wyjście. Brutalnie wymuszone powtarzanie modulo%97%78%28%15%2
powraca1
dla wszystkich słów z cienkich i PCV oraz0
dla słów z drewna . Dodając do niego wartość('ea' in n)
, otrzymujemy2
zamiast1
wejściowego „skoku”. Oto tabela wszystkich wartości:Typ do zwrócenia jest teraz wyodrębniany z ciągu
'wtPoiVonCdn yy'
, biorąc co trzeci znak, zaczynając od obliczonego indeksu.źródło
JavaScript (ES6), Chrome / Edge, 54 bajty
Ponieważ zachowanie
parseInt()
dużych danych wejściowych z podstawką 36 zależy od implementacji , to nie działa z SpiderMonkey (Firefox).Wypróbuj online!
W jaki sposób?
Funkcja skrótu zwraca 3 dla słów Tinny, 1 dla PCV i 0 , 4 , 5 lub 6 dla słów Woody'ego. Słowa oznaczone gwiazdką są domyślnie obcięte, ponieważ spacja jest uważana za nieprawidłowy znak przez parseInt () .
Poprzednia wersja,
5957 bajtówWypróbuj online!
W jaki sposób?
Poniżej znajdują się różne kroki funkcji dla każdego wejścia. Wynik pierwszego modułu jest przybliżeniem w zakresie dokładności liczb JS i jest matematycznie niepoprawny do stosunku .
źródło
Retina ,
393836 bajtówZaoszczędzono 1 bajt, stosując trzy pary podstawień jak w odpowiedzi Adáma.
Wypróbuj online!
Mam
.p.|is*t
regex od golfisty regex Petera Norviga .źródło
Java 8,
818067 bajtówRegex z odpowiedzi Retina @MatrinEnder .
Wypróbuj online.
Oryginalna odpowiedź:
8180 bajtówWypróbuj online.
Wyjaśnienie:
Dodatkowe wyjaśnienie:
woody
słów nie występuje w powyższym ciągu, ani nie pochodzile
zleap
.woody
słów maa
w trzeciej litery, tak że jest używany, aby dostaćleap
sięPVC
, jeśli nie jest totinny
słowo.woody
listy.źródło
Haskell , 61 bajtów
Wypróbuj online!
Wykorzystuje tę ręcznie znalezioną logikę:
i
lub pierwszej literyr
,a
lubn
sątinny
l
(leap
) toPVC
woody
Lynn uratowała bajt, sprawdzając
leap
jego pierwszą literę.źródło
"leap"
pomocą|a=='l'="PVC"
.QuadS ,
3432 bajtyBezwstydnie używa systemu Martina Endera , w tym wyrażenia regularnego z golfisty regularnego Petera Norviga .
Wypróbuj online!
⊃⍵
wybierz pierwsze wystąpienieea
„ea”.p.|is?t
„p” otoczony literami LUB „i” i „t” z opcjonalnym „s” między nimi na$
końcu wejścia… Ale zastępując mecze odpowiadającym im jednym z poniższych:
PVC
tinny
woody
Równoważna 43-bajtowa funkcja Dyalog APL to:
Wypróbuj wszystkie skrzynki online!
źródło
C (gcc) , 81 bajtów
Wypróbuj online!
Pierwszym porządkiem biznesu było znalezienie funkcji haszującej, która podzieliłaby słowa na ich kategorie. Po kilku drobiazgach na temat natknąłem się na to
(s[0] ^ (s[1] << 2)) & 0x7f
, gdzie 0x7f jest oczywiście, aby sprowadzić go do poziomów ASCII do wydruku. To dało następujące informacje (tabele są posortowane, ale nie powstałe ciągi):Zderzenia mieszające nie mają znaczenia, ponieważ są przypisywane do tej samej kategorii. Musimy tylko sprawdzić, czy wynikowy skrót znajduje się w ciągu skrótów Tinny („HzYfPW”), ponieważ wszystkie skróty Woody są poniżej skrótu PVC (120). Jeśli 120 lub więcej, a nie słowo Tinny, musi to być PVC. Jeśli nie jest to małe słowo, a wartość skrótu jest mniejsza niż 120, to musi to być dobre, drzewne słowo.
źródło
x86 32-bitowy kod maszynowy, 39 bajtów
Hexdump:
Funkcja skrótu jest mnożona przez „magiczną” liczbę
0x2c616f47
. Istnieje tylko 6 cyfr, których można użyć z tym kodem.Przede wszystkim zapisuje
PVC
na wyjściu. W razie potrzeby zostanie to zastąpione.Po haszowaniu sprawdza słowo PVC; czek jest
al = ah
- wybrałem go, ponieważ jest to mała instrukcja 2-bajtowa. Następnie zapisuje albowood
albotinn
, w zależności od znaku wyniku mieszania. Potem piszey
.Kod zestawu:
źródło
Galaretka ,
2726 bajtówMonadyczny link przyjmujący i zwracający listy znaków.
Wypróbuj online!
W jaki sposób?
źródło
Haskell , 75 bajtów
-2 bajty dzięki Laikoni.
Wypróbuj online!
RIP
enklact
.źródło
f"leap"="PVC";f s|
jest krótszy niżf s|s=="leap"="PVC"|
.Brudny ,
735754 bajtówWypróbuj online!
Wyjaśnił:
Dla podobnej starszej wersji (zaktualizuję ją, gdy przestanę grać w golfa)
Ciało tego składa się z:
Jeśli skończymy w lewo, mamy:
W przeciwnym razie sprawdza, czy ciąg zaczyna się od któregokolwiek z „nar”:
Następnie sprawdzamy, czy druga litera to „i”:
Jeśli wszystkie upadną, wpadniemy na
Jeśli skończyliśmy skakać, zawijamy się do
źródło
C # 97 bajtów
Poszukałem wzoru długości strun i stwierdziłem, że są one wyjątkowe, z wyjątkiem długości 4 i 8. Więc specjalnym przypadkiem są te, patrząc na pierwsze znaki. No cóż, wciąż jest krótszy niż niektóre odpowiedzi. :)
źródło
string t(string w)=>
może być sprawiedliwyw=>
.'p'
Myślę, że możesz konwertować i inne znaki na ich int reprezentacje. Możesz usunąć końcowy średnikPython , 59 bajtów
Wypróbuj online!
Wykorzystuje indeksowanie z odpowiedzi Pythona w ovs, ale prostszą i krótszą funkcję wyboru:
Jeśli dziesiąta litera słowa,
w
z zawijaniem ((w*4)[9]
- gdzie to sięw*4
powtarzaw
cztery razy) to litera w słowie tin (in"tin"
), to słowo to tinny , w przeciwnym razie, jeśli trzecia litera (w[2]
) to a (<'b'
), to słowo to PVC w przeciwnym razie słowo jest zdrewniałe .... ten 59 wykonuje tę samą pracę:
źródło
C, 107 bajtów
Wypróbuj online!
źródło
Partia, 145 bajtów
Pobiera dane wejściowe na STDIN. Objaśnienie: Po sprawdzeniu
leap
, metaliczny słowa albo zacząć z jednego z listówa
,n
lubr
czy jest ich drugi listi
.źródło
CJam , 35 bajtów
Wypróbuj online!
Zupełnie zapomniałem, że zacząłem brutalną poszukiwanie krótkich wyrażeń, aby zahaczyć zdrewniałe i drobne struny na dwie klasy. Właśnie znalazłem okno konsoli, w którym rozpoczęło się wyszukiwanie i okazało się, że faktycznie coś znalazło ...
Wyjaśnienie
źródło
Excel, 81 bajtów
Korzystanie z metody „anetisilire”.
źródło
Japt ,
3634 bajtówWykorzystuje RegEx z rozwiązania Martin's Retina.
Wypróbuj | Sprawdź wszystkie przypadki testowe
źródło
JavaScript,
60, 50EDYCJA Widziałem wszystkie inne odpowiedzi wyrażenia regularnego. Chyba jestem ślepy. W każdym razie tutaj jest ten sam regex
Ponadto, teraz bije drugą odpowiedź JS
Skrawek:
Stara odpowiedź
Nie widziałem jeszcze żadnego wyrażenia regularnego, więc pomyślałem, że spróbuję
Nie jestem pewien, czy liczy się to jako 60 lub więcej, ponieważ nie uwzględniłem instrukcji return. Dodam fragment kodu, gdy wejdę na komputer
Edycja: Snippet
źródło