Sebagai siswa Latin yang mengerikan selama beberapa tahun, saya telah belajar membenci banyak hal tentang bahasa Latin. Namun ada satu hal yang saya sukai.
Perluasan Latin.
Scansion adalah tindakan menentukan meter garis puisi tertentu. Untuk bahasa Latin ini berarti demarkasi setiap suku kata di baris sebagai "ringan" atau "berat".
Dalam bahasa Latin scansion memiliki banyak aturan. Namun tidak seperti perluasan bahasa Inggris Latin cukup teratur dan sering tidak memerlukan pengetahuan tentang kosakata bahasa Latin atau tata bahasa untuk dilakukan. Untuk masalah ini, kita akan menggunakan subset yang disederhanakan dari aturan-aturan tersebut (Latin nyata tidak memiliki spesifikasi yang rapi).
Sebelum memulai, Anda harus kawin lari . Elision adalah suku kata yang menurun di antara kata-kata untuk memudahkan pengucapan. (mis. "dia adalah" -> "dia"). Tidak seperti bahasa Inggris, elision Latin mengikuti aturan yang sangat bagus.
Vokal terakhir dari sebuah kata yang diakhiri dengan vokal dihilangkan jika kata berikutnya dimulai dengan vokal.
NAUTA EST -> NAUTEST
Hal yang sama berlaku untuk kata-kata yang berakhir dengan vokal diikuti oleh "m".
FIDUM AGRICOLAM -> FIDAGRICOLAM
Inisial-kata "h" diikuti oleh vokal dianggap sebagai vokal tunggal untuk keperluan elision dan selalu dijatuhkan ketika dielakkan.
MULTAE HORAE -> MULTORAE
atau
MULTAM HORAM -> MULTORAM
Setelah elisi kita bisa mulai melakukan perluasan. Pembesaran dilakukan ke meteran tertentu. Meteran untuk tantangan ini adalah hexameter dactylic . Hexameter Dactylic memiliki enam "kaki" setiap kaki terdiri dari dua atau tiga suku kata. Suku kata bisa panjang atau pendek tergantung pada vokal. Masing-masing dari lima kaki pertama akan berupa daktil, suku kata yang panjang diikuti oleh dua yang pendek, atau spondee, dua suku kata yang panjang. Dan kaki terakhir akan menjadi panjang diikuti oleh ancep (pendek atau panjang, untuk masalah ini Anda tidak harus menentukan yang mana).
Vokal dalam bahasa latin bisa pendek atau panjang
"I" yang diapit di antara dua vokal (misalnya eiectum) adalah konsonan. (yaitu a "j")
"I" yang memulai kata diikuti dengan vokal (misalnya Iactus) juga merupakan konsonan
A "u" setelah "q" juga merupakan konsonan (yaitu "v")
Difftong (ae, au, ei, eu, oe, dan ui) terdiri dari dua vokal tetapi dihitung sebagai satu vokal dan selalu panjang
Vokal dengan dua atau lebih konsonan antara itu dan vokal berikutnya selalu panjang
Untuk aturan sebelumnya, "l" atau "r" setelah "b", "c", "d", "g", "p", atau "t" tidak dihitung sebagai konsonan
"x" dihitung sebagai dua konsonan
"ch", "ph", "th", dan "qu" dihitung sebagai satu konsonan
Suku kata "que" di akhir kata (setelah elision) selalu pendek
Jika vokal tidak dipaksakan oleh salah satu aturan sebelumnya, dapat berupa panjang atau pendek ini tergantung pada meter
Tugas Anda adalah mengambil garis bahasa latin dan menghasilkan perluasannya. Anda akan mengambil dalam garis sebagai string melalui input standar dan output string yang mewakili perluasan akhir.
Input hanya akan berisi spasi dan karakter AZ.
Untuk mewakili perluasan, Anda akan menampilkan semua suku kata dengan |
membatasi pemisahan kaki. Suku kata panjang akan diwakili oleh -
sementara suku kata pendek akan ditandai oleh a v
dan suku kata (suku kata terakhir dari setiap baris) akan ditandai oleh a x
. Jika ada beberapa solusi karena sering kali ada Anda dapat output siapa pun dari mereka.
Uji Kasus
Awal dari Virgil's Aeneid.
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
Ketentuan lebih lanjut
Dengan cara yang tepat dari puisi Latin, semua jawaban harus dimulai dengan doa kepada orang-orang .
Bahasa Latin hanya memiliki dua kata satu huruf "e" dan "a". Anda dapat berasumsi bahwa tidak ada satu kata pun kata yang akan muncul sebagai input.
sumber
--vv
) itu, tetapi dalam Italiam (-vv-
) dalam ayat yang sama tidak. Mungkin memasukkan Js di input? Apakah Anda benar-benar memiliki solusi yang berfungsi menghasilkan output ini?Jawaban:
sed,
402392374359363334333 byte- Homer (The Iliad); bingung mengapa kutipan ini ada di sini? periksa aturannya.
Tidak persis golf, tetapi ini mengimplementasikan semua aturan yang diberikan dalam bentuk ekspresi reguler, yang hanya berjalan satu per satu untuk mencapai solusi. Ini menangani setiap baris secara independen, sehingga dapat memproses seluruh input multi-jalur.
Pemakaian:
Kerusakan:
Hasil untuk kasus uji:
sumber
vccvccv
akan menjadi-??
bukannya--?
diperbaiki sekarang. Sepertinya itu setuju dengan sampel Anda pada semua tetapi kasus # 2 sekarang.