Kata-kata kayu, kata-kata nyaring

35

Catatan: Ada beberapa kata kasar dalam pertanyaan ini.

Ada teka-teki implisit yang diajukan dalam sketsa Monty Python klasik ini (Anda juga dapat menyiapkan skripnya secara online).

Berbagai frase digambarkan sebagai 'kayu' atau 'nyaring', dan satu digambarkan sebagai 'PVC'.

Diberikan frasa, jawab dengan tipenya sesuai dengan daftar berikut:

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

Aturan

  • Jika input milik salah satu dari daftar di atas, output harus woody, tinnyatau PVCsesuai.
  • Semua input huruf kecil.
  • Perilaku apa pun dapat diterima untuk frasa yang tidak tercantum di atas.
  • Byte paling sedikit dalam jawaban menang.
AJFaraday
sumber
@AJFaraday Saya akan merekomendasikan menghabiskan waktu di situs dan menjawab beberapa pertanyaan sebelum memulai tugas yang sulit untuk menulis tantangan. Ketika Anda merasa siap, gunakan kotak pasir , setidaknya untuk beberapa tantangan pertama dan juga untuk tantangan non-sepele.
Adm
27
Saya tidak suka rekomendasi itu sama sekali! Silakan lanjutkan memposting tantangan, bahkan jika Anda tidak suka menjawab. Tentu saja menyenangkan melihat tantangan lain untuk merasakan situs tersebut, dan saya merekomendasikan Sandbox juga, tapi tolong terus menulis tantangan! :)
Stewie Griffin
5
Jadi, kita akan menerapkan logika pada sketsa Monty Python? ... luar biasa!
BruceWayne
@ Bruceruayay itulah yang kami lakukan.
AJFaraday
You may choose how to deal (or ignore) with casing in input and output.Untuk memperjelas, apakah ini berarti kita dapat mengharapkan input berada dalam huruf besar?
Οurous

Jawaban:

4

Stax , 30 25 byte

ï═H♣║GÇX→ΩM+@╢^j╬♪►╨╝ô╤c\

Jalankan dan debug itu

Representasi ascii yang dikomentari adalah ini. Saya tidak menemukan algoritma ini. Ini tanpa malu merobek solusi python Jonathan Allen .

9@                  10th character, modularly indexed
`#!z"pi0$L+%v9`X    store "tinny pvc woody" in the x register
3(                  keep only the first 3 characters ("tin")
#                   how many times the 10th char occurs in tin? (a)
y.eaI               index of "ea" in the input or -1 (b)
+                   a + b (one of -1, 0, or 1)
xj@                 modularly indexed word in x

Jalankan yang ini

rekursif
sumber
Jawaban ini OK, tetapi kompresor literal buggy, terkadang menghasilkan hasil 5 karakter (jika Anda menyertakan `, 7) untuk string 4 karakter.
Weijun Zhou
Kompresi tidak selalu dijamin untuk menghasilkan hasil yang lebih kecil. Biasanya hanya untuk string bahasa Inggris. Itu bukan bug. Jika Anda memiliki case di mana string yang dikutip ganda lebih kecil, gunakan saja itu.
rekursif
Saya pikir itu seperti Jelly yang selalu menemukan representasi terpendek (mungkin deskripsinya harus ditulis ulang?)
Weijun Zhou
Sudahlah. Saya pikir mengatakan can help yousedikit membingungkan tetapi tidak apa-apa secara logis.
Weijun Zhou
Hm, ya, kata-katanya agak menyesatkan.
rekursif
35

Python 2 , 99 73 65 64 63 byte

lambda s:'PVC'*('ea'in s)or'wtoiondnyy'[s[-2:]in'instperit'::2]

Cobalah online!

Alternatif juga dengan 63 byte:

lambda s:'PVC'*('ea'in s)or'wtoiondnyy'[s[-6::5]in'dtenmsr'::2]
lambda s:'PVC'*('ea'in s)or'wtoiondnyy'[s[::5]in'lrinaosit'::2]
TFeld
sumber
23
Terpilih karena menggunakan python untuk menyelesaikan tantangan monty python.
Brain Guider
10
@AnderBiguri, silakan berikan suara Anda berdasarkan solusi itu sendiri daripada bahasa yang digunakan.
Shaggy
24
@Shaggy AFAIK pilihan bahasa adalah salah satu bagian yang menyenangkan dari PPCG! Saya suka solusinya, karena itu dalam python . Kami sudah memiliki byte untuk melihat yang mana yang "menang"
Brain Guider
2
Ya, suara dalam codegolf harus semata-mata untuk pendekatan yang dianggap terbaik atau paling kreatif karena pemenang ditentukan sebaliknya. Juga akan membosankan jika semua orang hanya menggunakan bahasa codegolf khusus alih-alih berkreasi dengan yang lebih umum
Gimli
5
Saya setuju, ada banyak alasan untuk menyukai jawaban tertentu. Tetapi bahkan jika orang sangat senang dengan permainan "Python untuk Monty Python", masih sedih melihat bahwa upvoters tidak repot-repot untuk menggulir ke bawah sedikit, dan menunjukkan apresiasi terhadap jawaban Python lain yang sebenarnya lebih tidak konvensional dan bahkan sebuah sedikit lebih pendek ...
Kirill L.
15

Python 2 , 62 byte

lambda n:'wtPoiVonCdn yy'[hash(n)%97%78%28%15%2+('ea'in n)::3]

Cobalah online!

Bagaimana?

Pengiriman ini menggunakan fakta bahwa hashfungsinya stabil untuk string dalam Python 2. Setiap input yang valid memiliki output yang valid. The brute-memaksa diulang modulo %97%78%28%15%2kembali 1untuk semua nyaring dan PVC kata-kata dan 0untuk kayu kata-kata. Dengan menambahkan nilai ('ea' in n)itu, kita mendapatkan 2alih-alih 1untuk input 'lompatan'. Ini adalah tabel dari semua nilai:

+----------------+----------------------+----------------+-------------+-------+
| word           | hash                 | %97%78%28%15%2 | +('ea'in n) | type  |
+----------------+----------------------+----------------+-------------+-------+
| leap           | 5971033325577305778  | 1              | 2           | PVC   |
+----------------+----------------------+----------------+-------------+-------+
| litter bin     | 2393495108601941061  | 1              | 1           | tinny |
| newspaper      | 1961680444266253688  | 1              | 1           | tinny |
| antelope       | -2930683648135325182 | 1              | 1           | tinny |
| recidivist     | -1480015990384891890 | 1              | 1           | tinny |
| tit            | -1495230934635649112 | 1              | 1           | tinny |
| simpkins       | 672871834662484926   | 1              | 1           | tinny |
+----------------+----------------------+----------------+-------------+-------+
| gone           | 3644900746337488769  | 0              | 0           | woody |
| sausage        | 4880706293475915938  | 0              | 0           | woody |
| seemly         | -8112698809316686755 | 0              | 0           | woody |
| prodding       | 7325980211772477495  | 0              | 0           | woody |
| vacuum         | -5283515051184812457 | 0              | 0           | woody |
| bound          | -6522768127315073267 | 0              | 0           | woody |
| vole           | -7823607590901614336 | 0              | 0           | woody |
| caribou        | -3644594841083815940 | 0              | 0           | woody |
| intercourse    | 2499732157679168166  | 0              | 0           | woody |
| pert           | 4142553773863848247  | 0              | 0           | woody |
| thighs         | -3490317966011085195 | 0              | 0           | woody |
| botty          | -6522767127163072681 | 0              | 0           | woody |
| erogenous zone | 7046120593231489339  | 0              | 0           | woody |
| ocelot         | -6961879712146820842 | 0              | 0           | woody |
| wasp           | -3668927459619339511 | 0              | 0           | woody |
| yowling        | 6823632481520320220  | 0              | 0           | woody |
+----------------+----------------------+----------------+-------------+-------+

Jenis untuk kembali sekarang diekstraksi dari string 'wtPoiVonCdn yy'dengan mengambil setiap karakter ketiga, mulai dari indeks yang dihitung.

ovs
sumber
10

JavaScript (ES6), Chrome / Edge, 54 byte

Karena perilaku parseInt()pada input besar dengan radix 36 tergantung pada implementasi , yang ini tidak bekerja dengan SpiderMonkey (Firefox).

s=>[,'PVC',,'Tinny'][parseInt(s+383,36)%69%7]||'Woody'

Cobalah online!

Bagaimana?

Fungsi hash mengembalikan 3 untuk kata-kata Nyaring, 1 untuk PVC dan 0 , 4 , 5 atau 6 untuk kata-kata Woody. Kata-kata yang ditandai dengan tanda bintang terpotong secara implisit karena ruang dianggap sebagai karakter yang tidak valid oleh parseInt () .

word           | +383           | base 36 -> decimal    | mod 69 | mod 7
---------------+----------------+-----------------------+--------+------
gone           | gone383        |           36318994131 |   54   |   5
sausage        | sausage383     |      2874302392811475 |   42   |   0
seemly         | seemly383      |        80120017777107 |    6   |   6
prodding       | prodding383    |     94214834629477200 |   12   |   5
vacuum         | vacuum383      |        88266035564499 |   60   |   4
bound          | bound383       |          916101808275 |    6   |   6
vole           | vole383        |           68967369939 |   39   |   4
caribou        | caribou383     |      1249086300450771 |   63   |   0
intercourse    | intercourse383 | 3.183324871563264e+21 |   11   |   4
pert           | pert383        |           55312791699 |   21   |   0
thighs         | thighs383      |        83184557510739 |    6   |   6
botty          | botty383       |          916052399571 |   63   |   0
erogenous zone | erogenous (*)  |        41664605989780 |    7   |   0
ocelot         | ocelot383      |        68678794158483 |   39   |   4
wasp           | wasp383        |           70309896339 |   63   |   0
yowling        | yowling383     |      3523299657958227 |   39   |   4
---------------+----------------+-----------------------+--------+------
litter bin     | litter (*)     |            1301413923 |   24   |   3
newspaper      | newspaper383   |   3081816298632183000 |    3   |   3
antelope       | antelope383    |     38980419895881940 |   24   |   3
recidivist     | recidivist383  | 129824740122576960000 |    3   |   3
tit            | tit383         |            1785109395 |   45   |   3
simpkins       | simpkins383    |    104264583727840850 |   24   |   3
---------------+----------------+-----------------------+--------+------
leap           | leap383        |           46576922259 |   57   |   1

Versi sebelumnya, 59 57 byte

s=>['Woody','Tinny','PVC'][82178>>parseInt(s,35)%50%26&3]

Cobalah online!

Bagaimana?

Di bawah ini adalah langkah-langkah fungsi yang berbeda untuk setiap input. Hasil modulo pertama adalah perkiraan dalam ketepatan angka JS dan secara matematis tidak valid untuk hubungan seksual .

input          | base-35 -> dec.   | %50 | %26 | 00000000010100000100000010
---------------+-------------------+-----+-----+---------------------------
gone           |            716219 |  19 |  19 |      00------------------>
sausage        |       52042888324 |  24 |  24 | 00----------------------->
seemly         |        1492249219 |  19 |  19 |      00------------------>
prodding       |     1659396207121 |  21 |  21 |    00-------------------->
vacuum         |        1643736697 |  47 |  21 |    00-------------------->
bound          |          17573443 |  43 |  17 |        00---------------->
vole           |           1359274 |  24 |  24 | 00----------------------->
caribou        |       22625709220 |  20 |  20 |     00------------------->
intercourse    | 51532867489988450 |  48 |  22 |   00--------------------->
pert           |           1089999 |  49 |  23 |  00---------------------->
thighs         |        1549436973 |  23 |  23 |  00---------------------->
botty          |          17572449 |  49 |  23 |  00---------------------->
erogenous zone |    33308397234728 |  28 |   2 |                       00->
ocelot         |        1279159344 |  44 |  18 |       00----------------->
wasp           |           1385255 |   5 |   5 |                    00---->
yowling        |       63810499496 |  46 |  20 |     00------------------->
litter bin     |        1131250042 |  42 |  16 |         01--------------->
newspaper      |    52754217228642 |  42 |  16 |         01--------------->
antelope       |      687218151914 |  14 |  14 |           01------------->
recidivist     |  2160354371100934 |  34 |   8 |                 01------->
tit            |             36184 |  34 |   8 |                 01------->
simpkins       |     1835782971008 |   8 |   8 |                 01------->
leap           |            917900 |   0 |   0 |                         10
Arnauld
sumber
9

Retina , 39 38 36 byte

Disimpan 1 byte dengan menggunakan tiga pasang substitusi seperti pada jawaban Adám.

L#-3$0`ea
PVC
.p.|is?t
tinny
$
woody

Cobalah online!

Saya mendapat .p.|is*tregex dari pegolf regex Peter Norvig .

Martin Ender
sumber
2
Uh oh, atribusi sirkuler.
Adm
9

Java 8, 81 80 67 byte

s->s.charAt(2)<98?"PVC":s.matches(".*(.p.|is?t).*")?"tinny":"woody"

Regex dari @MatrinEnder jawaban Retina .

Cobalah online.

Jawaban asli: 81 80 byte

s->"anetisilire".contains(s.substring(0,2))?"tinny":s.charAt(2)<98?"PVC":"woody"

Cobalah online.

Penjelasan:

s->                  // Method with String as both parameter and return-type
  "anetisilire".contains(s.substring(0,2))?
                     //  If the first two letters of the input are present in "anetisilire"
    "tinny"          //   Output "tinny"
   :s.charAt(2)<98?  //  Else-if the third character of the input is an 'a'
    "PVC"            //   Output "PVC"
   :                 //  Else:
    "woody"          //   Output "woody"

Penjelasan tambahan:

litter bin:  anetisi(li)re
newspaper:   a(ne)tisilire
antelope:    (an)etisilire
recidivist:  anetisili(re)
tit:         ane(ti)silire
simpkins:    aneti(si)lire
  1. Tidak satu pun dari dua huruf pertama dari woodykata-kata yang hadir dalam String di atas, juga tidakle dari leap.
  2. Tak satu pun dari woodykata - kata yang memiliki ahuruf ketiga, sehingga digunakan untuk sampai leapkePVC jika itu bukan tinnykata.
  3. Yang lainnya adalah kata dari woodydaftar.
Kevin Cruijssen
sumber
2
Sungguh keren bisa membaca cara berpikir seperti ini :)
AJFaraday
6

Haskell , 61 byte

f(a:b:_)|b=='i'||elem a"ran"="tinny"|a=='l'="PVC"|1>0="woody"

Cobalah online!

Gunakan logika yang ditemukan sendiri ini:

  • Kata-kata dengan huruf kedua iatau huruf pertama r, aataun yangtinny
  • Kata lain yang dimulai dengan l(leap ) adalahPVC
  • Yang lainnya woody

Lynn menyimpan satu byte dengan memeriksa leaphuruf pertama.

Tidak
sumber
1
Bagus! Anda dapat menyimpan byte dengan mendeteksi "leap"dengan |a=='l'="PVC".
Lynn
5

QuadS , 34 32 byte

Tanpa malu-malu menggunakan sistem Martin Ender , termasuk regex dari pegolf regex Peter Norvig .

⊃⍵
ea
.p.|is?t
$
PVC
tinny
woody

Cobalah online!

⊃⍵ pilih kejadian pertama

ea "ea"
.p.|is?t "p" dikelilingi oleh huruf ATAU "i" dan "t" dengan "s" opsional di antaranya
$  akhir input

... tetapi mengganti yang cocok dengan yang sesuai dari yang berikut ini:

PVC
tinny
woody


Setara dengan 43 byte Dyalog APL setara adalah:

'ea' '.p.|is?t' '$'S'PVC' 'tinny' 'woody'

Coba semua kasing online!

Adm
sumber
5

C (gcc) , 81 byte

h;f(char*s){puts(strchr("HzYfPW",h=*s^s[1]<<2&127)?"Tinny":h<120?"Woody":"PVC");}

Cobalah online!

Urutan pertama bisnis adalah menemukan beberapa fungsi hash yang akan memisahkan kata ke dalam kategori mereka. Setelah beberapa mengutak-atik saya tersandung (s[0] ^ (s[1] << 2)) & 0x7f, di mana 0x7f tentu saja ada untuk membawanya ke tingkat ASCII yang dapat dicetak. Ini menghasilkan informasi berikut (tabel diurutkan, tetapi bukan string yang dihasilkan):

Woody:
----
erogenous zone  - 45
prodding        8 56
yowling         E 69
vole            J 74
intercourse     Q 81
thighs          T 84
gone            [ 91
botty           ^ 94
bound           ^ 94
ocelot          c 99
pert            d 100
caribou         g 103
seemly          g 103
vacuum          r 114
wasp            s 115
sausage         w 119

[wg8r^JgQdT^-csE

Tinny:
----
litter bin      H 72
tit             P 80
simpkins        W 87
antelope        Y 89
recidivist      f 102
newspaper       z 122

HzYfPW

PVC:
----
leap            x 120

x

Tabrakan hash tidak masalah, karena mereka terikat pada kategori yang sama. Kita hanya perlu memeriksa apakah hash yang dihasilkan ada di string hash Tinny ("HzYfPW"), karena hash Woody semua di bawah hash PVC (120). Jika 120 atau lebih tinggi, dan bukan kata Nyaring, itu harus PVC. Jika bukan kata Tinny, dan hash di bawah 120, maka itu harus menjadi kata yang bagus, seperti kayu.

gastropner
sumber
4

x86 kode mesin 32-bit, 39 byte

Hexdump:

69 01 47 6f 61 2c c7 02 50 56 43 00 3a c4 74 16
c7 02 77 6f 6f 64 85 c0 78 06 c7 02 74 69 6e 6e
66 c7 42 04 79 00 c3

Fungsi hash adalah perkalian dengan angka "ajaib" 0x2c616f47 . Hanya ada 6 angka yang dapat digunakan dengan kode ini.

Pertama-tama, ia menulis PVC ke output. Ini akan ditimpa, jika perlu.

Setelah hashing, ia memeriksa kata PVC; ceknya al = ah- saya memilihnya karena ini adalah instruksi 2 byte kecil. Kemudian, ia menulis salah satu woodatau tinn, tergantung pada tanda hasil hash. Lalu, ia menulis y.

Kode perakitan:

    imul eax, [ecx], 0x2c616f47;
    mov dword ptr [edx], 'CVP';
    cmp al, ah;
    je done;
    mov dword ptr [edx], 'doow';
    test eax, eax;
    js skip;
    mov dword ptr [edx], 'nnit';
skip:
    mov word ptr [edx + 4], 'y';
done:
    ret;
anatolyg
sumber
4

Jelly ,  27  26 byte

⁵ịe“Ṗµ»_⁼“ḣG»$ị“©LẈḊ¶$Ḍ»Ḳ¤

Tautan monadik yang menerima dan mengembalikan daftar karakter.

Cobalah online!

Bagaimana?

⁵ịe“Ṗµ»_⁼“ḣG»$ị“©LẈḊ¶$Ḍ»Ḳ¤ - Link: list of characters, W   e.g. "gone"  "leap"  "newspaper"
⁵                          - literal ten                  10
 ị                         - index into (1-based & modular)     'o'     'e'     'n'
   “Ṗµ»                    - compression of characters    "int"
  e                        - exists in?                          0       0       1
              $            - last two links as a monad
          “ḣG»             -   compression of characters  "leap"
         ⁼                 -   equal?                            0       1       0
        _                  - subtract                            0      -1       1
                         ¤ - nilad followed by link(s) as a nilad:
                “©LẈḊ¶$Ḍ»  -   compression of characters  "tinny PVC woody"
                         Ḳ -   split at spaces            ["tinny","PVC","woody"]
               ị           - index into (1-based & modular)     "woody" "PVC"   "tinny"
Jonathan Allan
sumber
3

Haskell , 75 byte

-2 byte terima kasih kepada Laikoni.

f"leap"="PVC"
f s|take 2s`elem`words"li ne ti si an re"="tinny"|1>0="woody"

Cobalah online!

RIP enklact.

benar-benar manusiawi
sumber
f"leap"="PVC";f s|lebih pendek dari f s|s=="leap"="PVC"|.
Laikoni
3

Kotor , 73 57 54 byte

⇖'le'⇗≐∀⭦)Ẃ'nar'⇗{=]}⭨'i'=]'woody'‼␛['tinny'‼␛('PVC'‼␛

Cobalah online!

Dijelaskan:

Untuk versi lama yang serupa (saya akan memperbaruinya ketika saya berhenti bermain golf)

␛‼'CVP'⇨⇖'leap'⇗≡⊭◌⬅Ẃ'nar'⇗{=]}1ẁ'i'=]'woody'‼␛['tinny'‼␛

Tubuh ini terdiri dari:

⇖            put the input into the left stack
 'leap'      push the string "leap"
       ⇗     put that string into the right stack
        ≡    are the left and right stacks equal
         ⊭   logically negate
          ◌  skip next instruction if true
           ⬅ change direction to leftwards

Jika kita berakhir ke kiri, maka kita memiliki:

       ⇨⇖'leap'⇗≡⊭◌ does stuff to the stacks, but isn't relevant
  'CVP'              push the string "PVC" (reversed, because we're going left)
 ‼                   print the string on the main stack
␛                    exit the program (this should wrap into the other exit, but that isn't working yet)

Jika tidak, ini akan memeriksa apakah string dimulai dengan "nar":

Ẃ           wipe the right stack
 'nar'      push the string "nar"
       ⇗    move string to right stack
        {
         =  compare the top of the left and right stacks
          ] goto matching bracket if true
        }   consuming loop while the right stack is true

Kami kemudian memeriksa apakah huruf kedua adalah "i":

1        push the number 1
 ẁ       drop ^ number of elements off of the left stack
  'i'    push "i"
     =   are the top of the left and middle stacks equal
       ] goto matching bracket if true

Jika mereka semua jatuh, kita bertemu

'woody'   push the string "woody"
       ‼  print the string on the main stack
        ␛ exit the program

Jika kita akhirnya melompat, kita membungkus

[          matching bracket for the goto
 'tinny'   push the string "tinny"
        ‼  print the string on the main stack
         ␛ exit the program
Suram
sumber
3

C # 97 Bytes

string t(string w)=>w[0]!='p'&new[]{10,9,8,3}.Contains(w.Length)?"tinny":w[0]=='l'?"pvc":"woody";

Saya pergi mencari pola di panjang string dan menemukan mereka unik kecuali untuk panjang 4 dan 8. Jadi saya khusus huruf mereka dengan melihat karakter pertama. Oh well, masih lebih pendek dari beberapa jawaban. :)

lee
sumber
1
Anda tahu, ketika Martin Ender menemukan aturan sederhana untuk daftar ini, hampir setiap jawaban menerapkan solusi yang sama, dengan satu atau lain cara. Sangat keren melihat pendekatan orisinal. :)
AJFaraday
Terima kasih untuk umpan baliknya. :) Saya tidak membaca solusi lain sebelum mencoba milik saya .. mungkin masih ada solusi yang lebih elegan yang belum ditemukan .. Saya sangat berharap mereka semua memiliki panjang yang unik maka ini akan menjadi Solusi.
lee
2
string t(string w)=>bisa adil w=>. Anda dapat mengkonversi 'p'dan karakter lain ke representasi int mereka, saya pikir. Anda dapat menghapus trailing semi colon
TheLethalCoder
3

Python , 59 byte

lambda w:"wtPoiVonCdn yy"[(w*4)[9]in"tin"or(w[2]<"b")*2::3]

Cobalah online!

Menggunakan pengindeksan dari jawaban Python ovs tetapi fungsi pilihan yang lebih sederhana dan lebih pendek:

Jika huruf kesepuluh dari kata,, wdengan pembungkus ( (w*4)[9]- di mana w*4pengulangan wempat kali) adalah huruf dalam kata tin ( in"tin") maka kata tersebut nyaring , sebaliknya jika huruf ketiga ( w[2]) adalah a ( <'b') maka kata itu adalah PVC kalau tidak, kata itu berkayu .

... 59 ini melakukan pekerjaan yang sama:

lambda w:"wtPoiVonCdn yy"[[(w*4)[9]in"tin",2][w[2]<"b"]::3]
Jonathan Allan
sumber
2

C, 107 byte

k;f(char*s){for(k=0;*s;)k+=*s++;k%=100;puts(k-18?(k-5)*(k-81)*(k-56)*(k-78)*(k-37)?"woody":"tinny":"PVC");}

Cobalah online!

Steadybox
sumber
2

Batch, 145 byte

@set/ps=
@if %s%==leap echo PVC&exit/b
@for %%s in (a n r)do @if %s:~,1%==%%s echo tinny&exit/b
@if %s:~1,1%==i echo tinny&exit/b
@echo woody

Mengambil input pada STDIN. Penjelasan: Setelah memeriksa leap, kata-kata nyaring baik dimulai dengan salah satu huruf a, natau ratau huruf kedua adalah i.

Neil
sumber
2

CJam , 35 byte

1b_856%338<\418=-"woodytinnyPVC"5/=

Cobalah online!

Saya benar-benar lupa bahwa saya telah memulai pencarian kasar untuk ekspresi pendek untuk memotong string kayu dan nyaring menjadi dua kelas. Saya baru saja menemukan jendela konsol tempat pencarian berjalan dan ternyata itu benar-benar menemukan sesuatu ...

Penjelasan

1b     e# Sum the code points of the input string.
       e# The result is unique for each input, except "pert" and "wasp" which
       e# both sum to 443. But they're both woody, so that's fine.
_      e# Duplicate.
856%   e# Take the sum modulo 856.
338<   e# Check whether the result is less than 338. That's true for all
       e# tinny words.
\      e# Swap with the other copy of the sum.
418=   e# Check whether the sum is equal to 418, which identifies "leap".
-      e# Subtract. Gives -1 for "leap", 1 for tinny words and 0 for woody words.
"woodytinnyPVC"5/
       e# Create the list ["woody" "tinny" "PVC"].
       e# Select the correct string.
Martin Ender
sumber
1

Excel, 81 byte

=IF(ISNUMBER(FIND(LEFT(A1,2),"anetisilire")),"tinny",IF(A1="leap","PVC","woody"))

Menggunakan metode 'anetisilire'.

Wernisch
sumber
1

Japt , 36 34 byte

Menggunakan RegEx dari solusi Retina Martin.

g2 ¶'a?"PVC":`wÅnyy`ë2Uè`?t|.pe

Cobalah | Periksa semua test case

Shaggy
sumber
1

JavaScript, 60 , 50

EDIT Saya melihat semua jawaban regex lainnya. Saya kira saya hanya buta. Lagi pula, ini dia yang menggunakan regex yang sama

i=="leap"?"PVC":/.p.|is*t/.test(i)?"tinny":"woody"

Juga, sekarang, ini mengalahkan jawaban JS lainnya

Potongan:

let test = i => i=="leap"?"PVC":/.p.|is*t/.test(i)?"tinny":"woody"

let woody = `gone
sausage
seemly
prodding
vacuum
bound
vole
caribou
intercourse
pert
thighs
botty
erogenous zone
ocelot
wasp
yowling`;
console.log("THESE SHOULD BE woody");
woody.split("\n").forEach(el => console.log(test(el)));
let tinny = `litter bin
newspaper
antelope
recidivist
tit
simpkins`;
console.log("THESE SHOULD BE tinny");
tinny.split("\n").forEach(el => console.log(test(el)));
console.log("THIS SHOULD BE PVC");
console.log(test("leap"));

Jawaban lama

Saya belum melihat dengan regex, jadi saya pikir saya akan mencobanya

i=="leap"?"PVC":/[gyuz]|[or][tl]|as/.test(i)?"woody":"tinny"

Tidak yakin apakah ini dianggap 60 atau lebih karena saya tidak menyertakan pernyataan pengembalian. Akan menambahkan potongan ketika saya masuk ke komputer saya

Edit: Cuplikan

let test = i => i=="leap"?"PVC":/[gyuz]|[or][tl]|as/.test(i)?"woody":"tinny"

let woody = `gone
sausage
seemly
prodding
vacuum
bound
vole
caribou
intercourse
pert
thighs
botty
erogenous zone
ocelot
wasp
yowling`;
console.log("THESE SHOULD BE woody");
woody.split("\n").forEach(el => console.log(test(el)));
let tinny = `litter bin
newspaper
antelope
recidivist
tit
simpkins`;
console.log("THESE SHOULD BE tinny");
tinny.split("\n").forEach(el => console.log(test(el)));
console.log("THIS SHOULD BE PVC");
console.log(test("leap"));

vityavv
sumber