Tôi đã hét lên bao nhiêu từ sức mạnh?


10

Trong Skyrim, nhân vật người chơi có thể sử dụng những tiếng hét ma thuật mạnh mẽ (Thu'ums) để đạt được mục tiêu của họ. Mỗi tiếng hét bao gồm ba từ, tuy nhiên, người chơi có thể sử dụng một hoặc hai từ đầu tiên để đạt được hiệu ứng tương tự với ít sức mạnh hơn nhưng thời gian hồi chiêu ngắn hơn.

Đưa ra một cụm từ ASCII Thu'um viết thường mà không có dấu câu hoặc dấu cách , trả lại bao nhiêu từ sức mạnh mà nó chứa.

Thí dụ:

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

Đầu vào sẽ luôn là một chuỗi ASCII chữ thường được hình thành bằng cách lấy một trong các tiếng hét bên dưới, chọn 1, 2 hoặc 3 từ đầu tiên từ tiếng hét đó và nối các từ theo thứ tự.

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

Vì vậy fus, fusrofusrodahtất cả đều là các đầu vào hợp lệ, nhưng fusroviirkhông phải vì nó sử dụng các từ từ các tiếng hét hỗn hợp, và rodahkhông phải vì đó không phải là tiền tố của tiếng hét. Bạn cũng không phải xử lý đầu vào chuỗi trống.


Mã ngắn nhất trong byte thắng.


1
Tôi sẽ tặng cookie cho người đầu tiên chạy thuật toán này trên mỗi dòng của Song of the Dragonborn (được gọi là "chủ đề skyrim" bởi plebs)
Cyoce 14/2/2016

Câu trả lời:


17

Võng mạc, 78 42 15 14 byte

ul
xo
[aeiou]+

Dùng thử trực tuyến

tiidkloul là từ duy nhất không có cùng số lượng nguyên âm như số được cho là được in. Do đó, chúng ta cần ghép từ để tạo cho nó một chuỗi nguyên âm phụ. ousẽ chỉ khớp với tiidkl ou l và sau đó chúng ta có thể thay thế ou bằng oxo tạo ra chuỗi bổ sung.

Cách tiếp cận ban đầu của tôi không đơn giản như vậy, nhưng được xây dựng xung quanh việc loại bỏ tất cả các phụ âm, sau đó loại bỏ một vài chuỗi nguyên âm ( ai|ii|aa|...) và cuối cùng là đếm số lượng chữ cái. Nhưng cảm ơn @Martin Büttner đã nghĩ đến [aeiou]+thay thế.


Trả về 3 cho fusroviir, được liệt kê rõ ràng là đầu vào không hợp lệ.
atk

1
@atk Tôi hỏi OP nếu đầu vào của họ không hợp lệ. Câu trả lời là không.
andlrc

1

Võng mạc , 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)

Hãy thử trực tuyến!

Dựa trên một vài quan sát đơn giản:

  • Tất cả các từ là duy nhất, bất kể vị trí của họ.
  • Không có từ nào là tiền tố của một từ khác.
  • Đầu vào được đảm bảo là hợp lệ.

Điều đó có nghĩa là chúng ta có thể chỉ cần đếm có bao nhiêu từ xuất hiện trong chuỗi mà không bị trùng lặp. Đó chính xác là những gì một regex làm. Tôi đã thử nén regex một chút ngoài việc kết hợp tất cả các từ với |(sẽ là 351 byte), nhưng tôi chắc chắn rằng điều này không còn tối ưu. Để bắt đầu, tôi chắc chắn không khai thác tối ưu tất cả các phần chung. Nhưng quan trọng hơn, có thể nén chuỗi hơn nữa bằng cách làm cho chuỗi đó khớp với nhiều chuỗi hơn các từ hợp lệ, miễn là những từ đó không thể vô tình khớp với một phần của từ hợp lệ (vì khi đó chúng sẽ không bao giờ được khớp). Tôi khá chắc chắn rằng người ta sẽ phải tự động hóa việc nén để thực sự chắc chắn rằng nó tối ưu.


2
Martin Büttner đã vượt qua? Mọi người vào trong hầm của bạn, kết thúc là đêm!
Cyoce

4
@Cyoce không sao, tôi đã đánh hai phần ba câu trả lời khác. ;)
Martin Ender

1

Perl 5, 28 byte

Số lượng byte bao gồm một cho -p.

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

Bị đánh cắp trực tiếp từ dev-null . (Cảm ơn, dev-null!)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.