Berapa banyak kata kekuatan yang saya teriakkan?


10

Di Skyrim, karakter pemain dapat menggunakan teriakan sihir yang kuat (Thu'ums) untuk mencapai tujuan mereka. Setiap teriakan terdiri dari tiga kata, namun, pemain dapat menggunakan satu atau dua kata pertama untuk mencapai efek yang sama dengan daya lebih sedikit tetapi pada cooldown yang lebih pendek.

Dengan frasa ASCII Thu'um huruf kecil tanpa tanda baca atau spasi , kembalikan jumlah kata kekuatan yang dikandungnya.

Contoh:

fusrodah   -> 3
dur        -> 1
kaandrem   -> 2
odah       -> 2
vengaarnos -> 3

Input akan selalu berupa string ASCII huruf kecil yang dibentuk dengan mengambil salah satu teriakan di bawah ini, memilih 1, 2, atau 3 kata pertama dari teriakan itu, dan menyatukan kata-kata secara berurutan.

dur neh viir
faas ru maar
feim zii gron
fo krah diin
fus ro dah
gaan lah haas
gol hah dov
hun kaal zoor
iiz slen nus
joor zah frul
kaan drem ov
krii lun aus
laas yah nir
lok vah koor
mid vur shaan
mul qah diiv
od ah viing
raan mir tah
rii vaaz zol
strun bah qo
su grah dun
tiid klo ul
ven gaar nos
wuld nah kest
yol toor shul
zul mey gut
zun haal viik

Jadi fus,, fusrodan fusrodahsemuanya adalah input yang valid, tetapi fusroviirbukan karena ia menggunakan kata-kata dari teriakan campuran, dan rodahbukan karena itu bukan awalan dari teriakan. Anda juga tidak harus menangani input string kosong.


Kode terpendek dalam byte menang.


1
Saya akan memberikan cookie untuk orang pertama yang menjalankan algoritma ini pada setiap baris Song of the Dragonborn (dikenal sebagai "tema
skyrim

Jawaban:


17

Retina, 78 42 15 14 byte

ul
xo
[aeiou]+

Cobalah online

tiidkloul adalah satu-satunya kata yang tidak memiliki jumlah urutan vokal yang sama dengan jumlah yang seharusnya dicetak. Karena itu kita perlu mencocokkan kata untuk memberikan urutan vokal tambahan. ouhanya akan cocok dengan tiidkl ou l dan kemudian kita dapat mengganti ou dengan oxo yang menciptakan urutan tambahan.

Pendekatan awal saya tidak sesederhana ini, tetapi dibangun dengan menghilangkan semua konsonan, kemudian menghapus beberapa urutan vokal ( ai|ii|aa|...) dan akhirnya menghitung jumlah huruf. Tetapi terima kasih kepada @Martin Büttner karena telah memikirkannya [aeiou]+.


Mengembalikan 3 untuk fusroviir, yang secara eksplisit terdaftar sebagai input tidak valid.
atk

1
@ atk Saya bertanya kepada OP apakah input mereka tidak valid. Jawabannya adalah tidak.
andlrc

1

Retina , 313 byte

ah|aus|bah|d(ah|ii[nv]|ov|rem|u[nr])|[fhl]aas|f(eim|o|rul|us)|g(aa[nr]|ol|rah|ron|ut)|haal|hah|hun|iiz|joor|k(aa[ln]|est|lo|oor|rah|rii)|lah|lok|lun|m(aar|ey|i[dr]|ul)|n[ae]h|nir|n[ou]s|od|ov|qah|qo|r(aan|ii|o|u)|s(haan|hul|len|trun|u)|tah|tiid|toor|ul|v(aaz|ah|en|iin?[gkr]|ur)|wuld|yah|yol|z(ah|ii|[ou][ln]|oor)

Cobalah online!

Berdasarkan beberapa pengamatan sederhana:

  • Semua kata itu unik, terlepas dari posisinya.
  • Tidak ada kata yang merupakan awalan dari kata lain.
  • Masukan dijamin valid.

Itu berarti kita bisa menghitung berapa banyak kata yang muncul dalam string tanpa tumpang tindih. Itulah tepatnya yang dilakukan regex. Saya sudah mencoba mengompresi regex sedikit di luar hanya menggabungkan semua kata dengan |(yang akan menjadi 351 byte), tapi saya yakin ini masih jauh dari optimal. Sebagai permulaan, saya sudah pasti tidak mengeksploitasi semua bagian umum secara optimal. Tetapi yang lebih penting, mungkin untuk mengompresi string lebih jauh dengan membuatnya lebih cocok dengan string daripada kata-kata yang valid, selama itu tidak dapat secara tidak sengaja mencocokkan bagian dari kata yang valid (karena dengan begitu mereka tidak akan pernah cocok). Saya cukup yakin seseorang harus mengotomatiskan kompresi untuk benar-benar memastikan itu optimal.


2
Martin Büttner dikalahkan? Semua orang masuk bunker Anda, akhirnya sudah dekat!
Cyoce

4
@Cyoce tidak apa-apa, saya bermain golf dua pertiga dari jawaban lainnya. ;)
Martin Ender

1

Perl 5, 28 byte

Jumlah byte termasuk satu untuk -p.

s/ou/oxo/;$_=()=/[aeiou]+/g

Dicuri langsung dari dev-null . (Terima kasih, dev-null!)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.