Benzersiz bir yapbozda dactylic hexameter tarama


10

Birkaç yıldır korkunç bir Latin öğrenci olarak Latince hakkında pek çok şeyden nefret etmeyi öğrendim. Ancak sevdiğim bir şey var.

Latin tarama.

Tarama , belirli bir şiir satırının metresini belirleme eylemidir. Latince için bu, satırdaki her heceyi "hafif" veya "ağır" olarak ayırmak anlamına gelir.

Latince taramada birçok kural vardır. Ancak İngilizce'den farklı olarak Latince tarama oldukça düzenli bir işlemdir ve çoğu zaman Latince kelime bilgisi veya dilbilgisi bilgisi gerektirmez. Bu problem için bu kuralların basitleştirilmiş alt kümesini kullanacağız (gerçek Latince'nin düzgün bir spesifikasyonu yoktur).

Taramaya başlamadan önce elide olmalısınız . Elision, telaffuzu kolaylaştırmak için kelimeler arasında hecelerin düşmesidir. (örneğin "o" -> "o"). İngilizcenin aksine, Latin seçimleri çok güzel kurallara uyar.

  • Sesli harfle biten bir sözcüğün son sesli harfi, sonraki sözcük sesli harfle başlıyorsa, atlanır.

    NAUTA EST -> NAUTEST

  • Aynı şey sesli harfle biten ve ardından "m" ile biten kelimeler için de geçerlidir.

    FIDUM AGRICOLAM -> FIDAGRICOLAM

  • Kelime başlangıçtaki "h" ve ardından bir sesli harf, seçim amacıyla tek bir sesli harf olarak sayılır ve elendiğinde her zaman bırakılır.

    ÇOKLU HORAE -> ÇOKLU

    veya

    MULTAM HORAM -> MULTORAM

Seçimden sonra taramaya başlayabiliriz. Tarama belirli bir metreye yapılır. Bu zorluk için ölçüm aleti dasiklik altıgen çaptır . Dakiklik altıgen çapında altı "ayak" bulunur ve her ayak iki veya üç heceden oluşur. Heceler sesli harflere bağlı olarak uzun veya kısa olabilir. İlk beş ayağın her biri bir dactyl, uzun hece ve ardından iki kısa olanlar ya da bir spondee, iki uzun hece olacaktır. Ve son ayak uzun bir iz takip edecek (kısa veya uzun, bu sorun için hangisini belirlemeniz gerekmeyecek).

  • Latince bir sesli harf kısa veya uzun olabilir

  • İki sesli harf (örneğin eiectum) arasına sıkıştırılmış bir "i" ünsüzdür. (yani bir "j")

  • Bir kelimeyi başlatan ve ardından sesli harf (örn. Iactus) başlayan bir "i" de sessiz harftir

  • Bir "q" dan sonraki "u" aynı zamanda sessiz harftir (yani "v")

  • Diphthongs (ae, au, ei, eu, oe ve ui) iki sesli harften oluşur, ancak bir sesli harf olarak sayılır ve her zaman uzundur

  • Bir sonraki sesli harf arasında iki veya daha fazla ünsüz olan bir sesli harf her zaman uzundur

  • Önceki kural için, "b", "c", "d", "g", "p" veya "t" ifadelerinden sonra bir "l" veya "r", ünsüz sayılmaz

  • "x" iki ünsüz olarak sayılır

  • "ch", "ph", "th" ve "qu" bir ünsüz olarak sayılır

  • Bir kelimenin sonundaki (seçimlerden sonra) hece "que" her zaman kısadır

  • Bir sesli harf önceki kurallardan biri tarafından zorlanmazsa, uzun veya kısa olabilir, bu metreye bağlı olacaktır

Senin görevin bir latin çizgi almak ve onun taranmasını üretmek olacak. Satırı standart girdi yoluyla dize olarak alır ve son taramayı temsil eden bir dize çıkarırsınız.

Giriş yalnızca boşluklar ve AZ karakterleri içerecektir.

Skalayı temsil etmek için, hecelerin tümünü |, ayakların ayrılmasını sınırlandırarak çıkartabilirsiniz . Uzun bir hece bir ile temsil -edilirken, kısa bir hece bir a ile işaretlenir vve bir anceps (her satırın son hecesi) a ile işaretlenir x. Eğer sık ​​sık olacak gibi birden fazla çözüm varsa, bunlardan herhangi birini çıktı alabilirsiniz.

Test Durumları

Virgil Aeneid'in başlangıcı.

 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

Diğer koşullar

Latin şiirinin doğru şekilde tüm cevapları muses'e bir çağrı ile başlamalıdır .

Latince yalnızca iki harfli "e" ve "a" kelimeleri vardır. Başka bir harf sözcüğünün girdi olarak görünmeyeceğini varsayabilirsiniz.


2
Oh tanrım bu anıları geri getiriyor ...
ThreeFx

1
Başka bir ünlü harfini takip eden bir "i" ünsüzdür (yani bir "j"). In Lavinjaque ( --vv) öyle, ama içinde Italiam ( -vv-aynı ayette) öyle değil. Belki de J'leri girdiye koyabilir miyim? Aslında bu çıktıyı üreten bir çalışma çözümünüz var mı?
Lynn

Oh, sondan bir önceki ayağınız her zaman klasik bir dactyl'dir. Yanıtların kabul edip edemeyeceğini belirtmelisiniz.
Lynn

@Lynn Sondan bir önceki ayak her zaman bir dactyl olmadığından kasıtlı olarak belirsiz bıraktım. Ya da olabilir.
Ad Hoc Garf Hunter

@Dave 1) evet haklısın 2) Tüm kelimeyi bitirmeli. Bunları kısa süre içinde çözeceğim
Ad Hoc Garf Hunter

Yanıtlar:


5

sed, 402 392 374 359 363 334 333 bayt

“Şarkı söyle, tanrıça, Peleus'un oğlu Achilleus'un öfkesi ve Achians'a binlerce kat acı veren yıkımları, Hades güçlü kahraman ruhlarının evine çokluklarını fırlattı, ancak bedenlerini köpeklerin hassas şölenine verdi, ve Zeus'un iradesi, ilk önce çatışmaların bölündüğü o zamandan beri Atreus'un oğlu erkeklerin efendisi ve parlak Achilleus'un yerine getirildi. ”

- Homer (İlyada); Bu teklifin neden burada olduğunu karıştırdınız? kuralları kontrol et.

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'

Tam olarak golf oynamadı, ancak bu, verilen tüm kuralları, çözüme ulaşmak için tek tek çalışan düzenli ifadeler şeklinde uygular. Bu, her satırı bağımsız olarak işler, böylece tüm çok satırlı bir girişi işleyebilir.

Kullanımı:

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 '<...>';

Yıkmak:

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
"

Test senaryoları için sonuçlar:

-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

Soruda yer almayan alternatif çözümler gibi görünen test örnekleri 2 ve 3 için farklı sonuçlar aldığımı belirtmek gerekir. Yine de bir kuralı yanlış yorumlamış olabilirim.
Dave

Test örneği 2 için taramanızın işe yaradığını düşünmüyorum. "PROFUGUS" daki son "U" uzun olmalıdır çünkü bir sonraki sesli harften önce iki ünsüz ("S" ve "L") vardır. Sizin taramada kısa var. Şimdi üçüncüsünü kontrol ediyorum. Yine de güzel cevap :)
Ad Hoc Garf Hunter

@WheatWizard ah tamam, bu merak ettiğim bir kuraldı (sormalıydım) - Boşluğu olmayan 2 ünsüz anlamına geldim . Düzeltmek için yeterince kolay. Yakında bir güncelleme yayınlayacağım.
Dave

Görünüşe göre şimdi yerine - vccvccvhaline gelecek bir hatayla karşılaştım . Görünüşe göre şimdi dava # 2 dışındaki tüm örneklerinizle aynı fikirde. -??--?
Dave
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.