Quét các tham số dactylic trong một câu đố độc đáo


10

Là một sinh viên Latin khủng khiếp trong vài năm, tôi đã học được cách ghét nhiều thứ về tiếng Latin. Tuy nhiên có một điều tôi yêu.

Nhà thờ Latin.

Scansion là hành động xác định mét của một dòng thơ cụ thể. Đối với tiếng Latin, điều này có nghĩa là phân định từng âm tiết trong dòng là "nhẹ" hoặc "nặng".

Trong Latin scansion có nhiều quy tắc. Tuy nhiên, không giống như tiếng Anh, tiếng Latin là khá thường xuyên và thường không đòi hỏi kiến ​​thức về từ vựng hay ngữ pháp Latinh. Đối với vấn đề này, chúng tôi sẽ sử dụng tập hợp con đơn giản hóa của các quy tắc đó (tiếng Latin thực không có thông số kỹ thuật gọn gàng).

Trước khi bạn bắt đầu sự ngâm thơ từng vế bạn phải bõ mẫu âm chót . Elision là các âm tiết thả giữa các từ để dễ phát âm. (ví dụ: "anh ấy" -> "anh ấy"). Không giống như tiếng Anh, elision Latin tuân theo các quy tắc rất tốt đẹp.

  • Nguyên âm cuối cùng của một từ kết thúc bằng nguyên âm bị bỏ qua nếu từ tiếp theo bắt đầu bằng nguyên âm.

    NAUTA EST -> NAUTEST

  • Cũng vậy với các từ kết thúc bằng nguyên âm theo sau là "m".

    NÔNG NGHIỆP FIDUM -> FIDAGRICOLAM

  • Từ "h" ban đầu theo sau là một nguyên âm được tính là một nguyên âm duy nhất cho mục đích bỏ phiếu và luôn bị bỏ khi bị tách ra.

    MULTAE HORAE -> ĐA NĂNG

    hoặc là

    MULTAM HORAM -> MULTORAM

Sau khi bầu chọn chúng ta có thể bắt đầu scansion. Scansion được thực hiện đến một mét cụ thể. Đồng hồ cho thử thách này là tham số dactylic . Các tham số Dactylic có sáu "feet" mỗi chân bao gồm hai hoặc ba âm tiết. Âm tiết có thể dài hoặc ngắn tùy theo nguyên âm. Mỗi trong năm chân đầu tiên sẽ là một dactyl, một âm tiết dài theo sau là hai âm ngắn hoặc một spondee, hai âm tiết dài. Và bước cuối cùng sẽ là một bước dài theo sau một cú đánh (ngắn hoặc dài, đối với vấn đề này, bạn sẽ không phải xác định cái nào).

  • Nguyên âm trong tiếng Latin có thể ngắn hoặc dài

  • Một chữ "i" được kẹp giữa hai nguyên âm (ví dụ eiectum) là một phụ âm. (tức là "j")

  • Một "i" bắt đầu một từ theo sau là một nguyên âm (ví dụ Iactus) cũng là một phụ âm

  • Một "u" sau một "q" cũng là một phụ âm (tức là "v")

  • Diphthongs (ae, au, ei, eu, oe và ui) được tạo thành từ hai nguyên âm nhưng được tính là một nguyên âm và luôn dài

  • Nguyên âm có hai hoặc nhiều phụ âm giữa nó và nguyên âm tiếp theo luôn dài

  • Đối với quy tắc trước đó, "l" hoặc "r" sau "b", "c", "d", "g", "p" hoặc "t" không được tính là phụ âm

  • "x" được tính là hai phụ âm

  • "ch", "ph", "th" và "qu" được tính là một phụ âm

  • Âm "que" ở cuối từ (sau khi bỏ qua) luôn luôn ngắn

  • Nếu một nguyên âm không bị ép buộc bởi một trong các quy tắc trước đó, nó có thể dài hoặc ngắn, điều này sẽ phụ thuộc vào máy đo

Nhiệm vụ của bạn sẽ là lấy một dòng Latin và tạo ra sự phổ biến của nó. Bạn sẽ nhận dòng dưới dạng chuỗi thông qua đầu vào tiêu chuẩn và đầu ra một chuỗi đại diện cho việc mở rộng cuối cùng.

Đầu vào sẽ chỉ chứa khoảng trắng và ký tự AZ.

Để thể hiện sự phổ biến, bạn sẽ xuất ra tất cả các âm tiết với |việc phân định ranh giới của bàn chân. Một âm tiết dài sẽ được biểu thị -trong một thời gian một âm tiết ngắn sẽ được đánh dấu bởi a vvà một âm thanh (âm tiết cuối cùng của mỗi dòng) sẽ được đánh dấu bởi a x. Nếu có nhiều giải pháp như thường thì bạn có thể xuất bất kỳ ai trong số họ.

Các trường hợp thử nghiệm

Sự khởi đầu của Aeneid của Virgil.

 ARMA VIRUMQUE CANO TROIAE QUI PRIMUS AB ORIS     -> -vv|-vv|--|--|-vv|-x (or -vv|-vv|--|-vv|--|-x)
 ITALIAM FATO PROFUGUS LAVINIAQUE VENIT           -> -vv|--|-vv|-vv|-vv|-x
 LITORA MULTUM ILLE ET TERRIS IACTATUS ET ALTO    -> -vv|--|--|--|-vv|-x
 VI SUPERUM SAEVAE MEMOREM IUNONIS OB IRAM        -> -vv|--|-vv|--|-vv|-x (or -vv|--|-vv|-vv|--|-x)
 MULTA QUOQUE ET BELLO PASSUS DUM CONDERET URBEM  -> -vv|--|--|--|-vv|-x
 INFERRETQUE DEOS LATIO GENUS UNDE LATINUM        -> --|-vv|-vv|-vv|-vv|-x
 ALBANIQUE PATRES ATQUE ALTAE MOENIA ROMAE        -> --|-vv|--|--|-vv|-x

Quy định thêm

Trong thời trang thích hợp của thơ Latin, tất cả các câu trả lời phải bắt đầu bằng một lời cầu khẩn đến các nàng thơ .

Tiếng Latinh chỉ có hai chữ cái một chữ "e" và "a". Bạn có thể cho rằng sẽ không có từ nào khác xuất hiện dưới dạng đầu vào.


2
Trời ơi, điều này mang lại những ký ức ...
ThreeFx

1
Một "i" tiến hành một nguyên âm khác là một phụ âm (tức là "j"). Trong Lavinjaque ( --vv) nó là, nhưng trong Italiam ( -vv-) trong cùng một câu thơ thì không. Có thể đặt Js vào đầu vào? Bạn có thực sự có một giải pháp làm việc tạo ra đầu ra này?
Lynn

Oh, chân áp chót luôn luôn là một dactyl, cổ điển. Bạn nên xác định xem câu trả lời có thể giả định như vậy.
Lynn

@Lynn Vì chân áp chót không phải lúc nào cũng là dactyl nên tôi đã cố tình để nó mơ hồ. Nó có thể là một trong hai.
Ad Hoc Garf Hunter

@ Lưu 1) có bạn đúng 2) Nó phải kết thúc toàn bộ từ. Tôi sẽ sửa những lỗi này trong thời gian ngắn
Ad Hoc Garf Hunter

Câu trả lời:


5

sed, 402 392 374 359 363 334 333 byte

Nữ hoàng Sing, nữ thần, sự giận dữ của con trai Pilleus, Achilleus và sự tàn phá của nó, đã gây đau đớn gấp ngàn lần cho người Achentina, xông vào vô số ngôi nhà của những linh hồn mạnh mẽ của Hades, nhưng đã cho cơ thể họ trở thành bữa tiệc tinh tế của những chú chó, của tất cả các loài chim, và ý chí của thần Zeus đã được hoàn thành kể từ thời điểm đó khi lần đầu tiên có sự phân chia xung đột, con trai của Atreus, chúa tể của loài người và Achilleus rực rỡ.

- Homer (The Iliad); bối rối tại sao trích dẫn này là ở đây? kiểm tra các quy tắc.

sed -E 's/[AEIOU]M? H?([AEIOU])/\1/g;s/X/cc/g;s/(^|[ AEIOU])I([AEIOU])/\1c\2/g;s/QUE( |$)/cv/g;s/A[EU]|E[IU]|OE|UI/-/g;s/[CPT]H|[BCDGPT][LR]|QU|[^-vAEIOU ]/c/g;s/ //g;s/ucc+/-/g;s/c//g;s/^[-u]([-u]|[vu]{2})[-u]([-u]|[vu]{2})[-u]([-u]|[vu]{2})[-u]([-u]|[vu]{2})[-u]([-u]|[vu]{2})[-u].$/-\1|-\2|-\3|-\4|-\5|-x/;s/[uv]/-/g;s/---/-vv/g'

Không chính xác chơi golf, nhưng điều này thực hiện tất cả các quy tắc nhất định dưới dạng các biểu thức thông thường, mà sed chỉ chạy từng cái một để đạt được giải pháp. Điều này xử lý từng dòng độc lập, do đó có thể xử lý toàn bộ đầu vào nhiều dòng.

Sử dụng:

printf 'ARMA VIRUMQUE CANO TROIAE QUI PRIMUS AB ORIS
ITALIAM FATO PROFUGUS LAVINIAQUE VENIT
LITORA MULTUM ILLE ET TERRIS IACTATUS ET ALTO
VI SUPERUM SAEVAE MEMOREM IUNONIS OB IRAM
MULTA QUOQUE ET BELLO PASSUS DUM CONDERET URBEM
INFERRETQUE DEOS LATIO GENUS UNDE LATINUM
ALBANIQUE PATRES ATQUE ALTAE MOENIA ROMAE' | sed -E '<...>';

Phá vỡ:

sed -E "
# Apply Elision
 s/[AEIOU]M? H?([AEIOU])/\1/g;

# Convert into vowels (u, v or -) and consonants (c) according to the rules given
 s/X/cc/g;
 s/(^|[ AEIOU])I([AEIOU])/\1c\2/g;
 s/QUE( |\$)/cv/g;
 s/A[EU]|E[IU]|OE|UI/-/g;
 s/[CPT]H|[BCDGPT][LR]|QU|[^-vAEIOU ]/c/g;
 s/[A-Z]/u/g; # all remaining vowels are unknown

# Remove all spaces
 s/ //g;

# A vowel followed by 2 consonants before the next vowel is long
# (and we don't care if the last vowel is long or short)
 s/ucc+/-/g;

# Remove all consonants
 s/c//g;

# Look for a matching dactylic hexameter and insert pipe separators
 s/^\
[-u]([-u]|[vu]{2})\
[-u]([-u]|[vu]{2})\
[-u]([-u]|[vu]{2})\
[-u]([-u]|[vu]{2})\
[-u]([-u]|[vu]{2})\
[-u].\$/-\1|-\2|-\3|-\4|-\5|-x/;

# Substitute identified feet with the necessary long/short vowels
 s/[uv]/-/g;
 s/---/-vv/g
"

Kết quả cho các trường hợp thử nghiệm:

-vv|-vv|--|--|-vv|-x
-vv|-vv|--|-vv|-vv|-x
-vv|--|--|--|-vv|-x
-vv|--|-vv|-vv|--|-x
-vv|--|--|--|-vv|-x
--|-vv|-vv|-vv|-vv|-x
--|-vv|--|--|-vv|-x

Đáng lưu ý rằng tôi nhận được các kết quả khác nhau cho các trường hợp thử nghiệm 2 & 3, dường như là các giải pháp thay thế không có trong câu hỏi. Có thể là tôi hiểu sai một quy tắc mặc dù.
Dave

Tôi không nghĩ rằng scansion của bạn cho trường hợp thử nghiệm 2 hoạt động. Chữ "U" cuối cùng trong "PROFUGUS" phải dài vì có hai phụ âm ("S" và "L") trước nguyên âm tiếp theo. Trong căn hộ của bạn, bạn có nó ngắn. Tôi đang kiểm tra cái thứ ba bây giờ. Dù sao cũng có câu trả lời hay :)
Ad Hoc Garf Hunter

@WheatWizard ah ok, đó là một quy tắc tôi đã tự hỏi về (nên đã hỏi) - Tôi lấy nó để có nghĩa là 2 phụ âm không có khoảng trắng . Đủ dễ dàng để sửa chữa. Tôi sẽ đăng một bản cập nhật sớm.
Dave

Có vẻ như tôi cũng có một lỗi vccvccvsẽ trở thành -??thay vì --?- sửa ngay bây giờ. Có vẻ như nó đồng ý với các mẫu của bạn trên tất cả trừ trường hợp # 2 bây giờ.
Dave
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.