Hinweis: Diese Frage enthält einige unhöfliche Wörter.
In dieser klassischen Monty Python-Skizze ist ein implizites Puzzle enthalten (Sie können das Skript auch online bereitstellen ).
Verschiedene Phrasen werden als "holzig" oder "dünn" und eine als "PVC" beschrieben.
Beantworten Sie einen Ausdruck mit seinem Typ gemäß den folgenden Listen:
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
Regeln
- Ist der Eingang zu einem der oben genannten Listen gehört, soll die Ausgabe sein
woody
,tinny
oderPVC
, entsprechend. - Alle Eingaben erfolgen in Kleinbuchstaben.
- Für Phrasen, die oben nicht aufgeführt sind, ist jedes Verhalten akzeptabel.
- Die wenigsten Bytes in der Antwort gewinnen.
code-golf
string
classification
AJFaraday
quelle
quelle
You may choose how to deal (or ignore) with casing in input and output.
Bedeutet dies zur Verdeutlichung, dass wir erwarten können, dass die Eingabe in Großbuchstaben erfolgt?Antworten:
Stax ,
3025 BytesFühren Sie es aus und debuggen Sie es
Die kommentierte ASCII-Darstellung ist dies. Diesen Algorithmus habe ich nicht erfunden. Es ist schamlos von Jonathan Allens Python-Lösung abgerissen .
Führen Sie dieses aus
quelle
can help you
etwas verwirrend, aber logischerweise in Ordnung.Python 2 ,
9973656463 BytesProbieren Sie es online!
Alternativen auch mit 63 Bytes:
quelle
Python 2 , 62 Bytes
Probieren Sie es online!
Wie?
Diese Übermittlung verwendet die Tatsache, dass die
hash
Funktion für Zeichenfolgen in Python 2 stabil ist. Jede gültige Eingabe hat eine gültige Ausgabe. Das brachial erzwungene wiederholte Modulo%97%78%28%15%2
kehrt1
für alle blechernen und PVC- Wörter und zurück0
für holzige Wörter zurück. Indem('ea' in n)
wir den Wert von dazu addieren , erhalten wir2
anstelle1
der Eingabe 'Sprung'. Hier ist eine Tabelle aller Werte:Der zurückzugebende Typ wird jetzt aus der Zeichenfolge extrahiert,
'wtPoiVonCdn yy'
indem jedes dritte Zeichen beginnend mit dem berechneten Index verwendet wird.quelle
JavaScript (ES6), Chrome / Edge, 54 Byte
Da das Verhalten
parseInt()
bei großen Eingaben mit einem Radix von 36 von der Implementierung abhängt , funktioniert dies nicht mit SpiderMonkey (Firefox).Probieren Sie es online!
Wie?
Die Hash-Funktion gibt 3 für Tinny-Wörter, 1 für PVC und entweder 0 , 4 , 5 oder 6 für Woody-Wörter zurück. Die mit einem Sternchen markierten Wörter werden implizit abgeschnitten, da das Leerzeichen von parseInt () als ungültiges Zeichen betrachtet wird .
Vorherige Version,
5957 BytesProbieren Sie es online!
Wie?
Below are the different steps of the function for each input. The result of the first modulo is an approximation within the precision of JS numbers and is mathematically invalid for intercourse.
quelle
Retina,
393836 bytesSaved 1 byte by using three substitution pairs as in Adám's answer.
Try it online!
I got the
.p.|is*t
regex from Peter Norvig's regex golfer.quelle
Java 8,
818067 bytesRegex from @MatrinEnder's Retina answer.
Try it online.
Original answer:
8180 bytesTry it online.
Explanation:
Additional explanation:
woody
words are present in this String above, nor isle
fromleap
.woody
words has ana
as third letter, so that is used to getleap
toPVC
if it's not atinny
word.woody
list.quelle
Haskell, 61 bytes
Try it online!
Uses this hand-found logic:
i
or first letterr
,a
, orn
aretinny
l
(leap
) isPVC
woody
Lynn saved a byte by checking
leap
by its first letter.quelle
"leap"
with|a=='l'="PVC"
.QuadS,
3432 bytesShamelessly uses Martin Ender's system, including the regex from Peter Norvig's regex golfer.
Try it online!
⊃⍵
pick the first occurrence ofea
"ea".p.|is?t
"p" surrounded by letters OR "i" and "t" with an optional "s" between them$
end of input… but substituting the matches with the corresponding one of the following:
PVC
tinny
woody
The equivalent 43-byte Dyalog APL function is:
Try all the cases online!
quelle
C (gcc), 81 bytes
Try it online!
The first order of business was to find some hash function that would separate the words into their categories. After some fiddling about I stumbled upon
(s[0] ^ (s[1] << 2)) & 0x7f
, where the 0x7f is of course there to bring it down to printable ASCII levels. This produced the following information (the tables are sorted, but not the resulting strings):The hash collisions don't matter, since they are confided to the same category. We only have to check if the resulting hash is in the Tinny hashes string ("HzYfPW"), since the Woody hashes are all below the PVC hash (120). If 120 or higher, and not a Tinny word, it must be PVC. If not a Tinny word, and the hash is below 120, then it must be a good, woody sort of word.
quelle
x86 32-bit machine code, 39 bytes
Hexdump:
The hash function is multiplication by a "magic" number
0x2c616f47
. There are only 6 numbers that can be used with this code.First of all, it writes
PVC
to the output. This will be overwritten, if needed.After hashing, it checks for the PVC word; the check is
al = ah
- I chose it because it's a small 2-byte instruction. Then, it writes eitherwood
ortinn
, depending on the sign of the hashed result. Then, it writesy
.Assembly code:
quelle
Jelly,
2726 bytesA monadic link accepting and returning lists of characters.
Try it online!
How?
quelle
Haskell, 75 bytes
-2 bytes thanks to Laikoni.
Try it online!
RIP
enklact
.quelle
f"leap"="PVC";f s|
is shorter thanf s|s=="leap"="PVC"|
.Dirty,
735754 bytesTry it online!
Explained:
For a similar older version (I'll update it when I stop golfing it)
The body of this is made up of:
If we end up going left, then we have:
Otherwise, this checks if the string starts with any of "nar":
We then check if the second letter is "i":
If they all fall through, we run into
If we ended up jumping, we wrap around to
quelle
C# 97 Bytes
I went looking for a pattern in the length of the strings and found they are unique except for lengths 4 and 8. So I special case those by looking at the first characters. Oh well, it's still shorter than some answers. :)
quelle
string t(string w)=>
can be justw=>
. You can convert'p'
and other characters to their int representations I think. You can remove the trailing semi colonPython, 59 bytes
Try it online!
Uses the indexing from ovs's Python answer but a simpler and shorter choice function:
If the tenth letter of the word,
w
, with wrapping ((w*4)[9]
- wherew*4
repeatsw
four times) is a letter in the word tin (in"tin"
) then the word is tinny, otherwise if the third letter (w[2]
) is an a (<'b'
) then the word is PVC otherwise the word is woody....this 59 does the same job:
quelle
C, 107 bytes
Try it online!
quelle
Batch, 145 bytes
Takes input on STDIN. Explanation: After checking for
leap
, tinny words either begin with one of the lettersa
,n
orr
or their second letter isi
.quelle
CJam, 35 bytes
Try it online!
I completely forgot that I had started a brute force search for short expressions to hash the woody and tinny strings into two classes. I just found the console window where the search ran and it turns out it actually found something...
Explanation
quelle
Excel, 81 bytes
Using the 'anetisilire' method.
quelle
Japt,
3634 bytesUses a RegEx from Martin's Retina solution.
Try it | Check all test cases
quelle
JavaScript,
60, 50EDIT I saw all the other regex answers. I guess I'm just blind. Anyway, here's one using the same regex
Also, now, it beats the other JS answer
Snippet:
Old answer
I didn't see any with regex yet, so I thought I'd give it a try
Not sure if this counts as 60 or more because I didn't include a return statement. Will add a snippet when I get on my computer
Edit: Snippet
quelle