สแกนเลขฐานสิบหก dactylic ในปริศนาที่ไม่ซ้ำกัน


10

ในฐานะนักเรียนภาษาละตินที่แย่มากหลายปีฉันเรียนรู้ที่จะเกลียดหลายสิ่งเกี่ยวกับภาษาละติน อย่างไรก็ตามมีสิ่งหนึ่งที่ฉันรักคือ

การขยายแบบละติน

Scansionคือการกำหนดมิเตอร์ของบทกวีหนึ่งบรรทัด สำหรับละตินนี่หมายถึงการกำหนดเขตของแต่ละพยางค์ในบรรทัดว่า "เบา" หรือ "หนัก"

ในการขยายละตินมีกฎมากมาย อย่างไรก็ตามแตกต่างจากภาษาอังกฤษละติน scansion เป็นธรรมและมักจะไม่ต้องการความรู้คำศัพท์ภาษาละตินหรือไวยากรณ์ที่จะดำเนินการ สำหรับปัญหานี้เราจะใช้ชุดย่อยที่เรียบง่ายของกฎเหล่านั้น (ละตินจริงไม่มีสเป็คที่เรียบร้อย)

ก่อนที่คุณจะเริ่มต้น scansion ที่คุณต้องมองข้าม Elision เป็นพยางค์ที่ลดลงระหว่างคำเพื่อความสะดวกในการออกเสียง (เช่น "เขาคือ" -> "เขา") ซึ่งแตกต่างจากภาษาอังกฤษละตินละตินตามกฎที่ดีมาก

  • สระสุดท้ายของคำที่ลงท้ายด้วยเสียงสระจะถูกตัดหากคำต่อไปเริ่มต้นด้วยเสียงสระ

    NAUTA EST -> ไร้เดียงสา

  • เช่นเดียวกับคำที่ลงท้ายด้วยสระตามด้วย "m"

    FIDUM AGRICOLAM -> FIDAGRICOLAM

  • คำว่า "h" เริ่มต้นตามด้วยเสียงสระนับเป็นเสียงสระเดี่ยวเพื่อจุดมุ่งหมายและมักจะถูกปล่อยทิ้งเมื่อ elided

    MORTAE HORAE -> MULTORAE

    หรือ

    มัลติคัลฮอร์ -> มัลติทาสก์

หลังจากการตัดขวางเราสามารถเริ่มการไต่สวน การขยายจะทำกับเครื่องวัดที่เฉพาะเจาะจง เมตรสำหรับความท้าทายนี้เป็นdactylic จังหวะ Dactylic hexameter มีหก "ฟุต" แต่ละเท้าประกอบด้วยสองหรือสามพยางค์ พยางค์อาจยาวหรือสั้นก็ได้ขึ้นอยู่กับเสียงสระ แต่ละห้าฟุตแรกจะเป็น dactyl, พยางค์ที่ยาวตามด้วยสองอันสั้นหรือ spondee, สองพยางค์ที่ยาว และเท้าสุดท้ายจะเป็นระยะเวลานานตามด้วย anceps (สั้นหรือยาวสำหรับปัญหานี้คุณจะไม่ต้องตัดสินใจว่าจะใช้อันไหน)

  • เสียงสระในละตินอาจจะสั้นหรือยาวก็ได้

  • "i" คั่นระหว่างสระสองสระ (เช่น eiectum) เป็นพยัญชนะ (เช่น "j")

  • "i" เริ่มต้นคำตามด้วยสระ (เช่น Iactus) เป็นพยัญชนะ

  • "u" หลังจาก "q" เป็นพยัญชนะ (เช่น "v")

  • Diphthongs (ae, au, ei, eu, oe, และ ui) ประกอบด้วยสองสระ แต่นับเป็นหนึ่งเสียงสระและมักจะยาว

  • เสียงสระที่มีพยัญชนะสองตัวขึ้นไปอยู่ระหว่างเสียงสระและเสียงสระถัดไปจะยาวเสมอ

  • สำหรับกฎก่อนหน้านี้ "l" หรือ "r" หลัง "b", "c", "d", "g", "p" หรือ "t" ไม่นับเป็นตัวอักษร

  • "x" นับเป็นพยัญชนะสองตัว

  • "ch", "ph", "th" และ "qu" นับเป็นหนึ่งพยัญชนะ

  • พยางค์ "que" ที่ท้ายคำ (หลัง elision) จะสั้นเสมอ

  • หากเสียงสระไม่ได้ถูกบังคับโดยกฎข้อใดข้อหนึ่งก่อนหน้านี้มันอาจเป็นแบบยาวหรือสั้นก็ได้ขึ้นอยู่กับมิเตอร์

งานของคุณคือการใช้สายของละตินและสร้างจำนวนของมัน คุณจะใช้เวลาในบรรทัดเป็นสตริงผ่านอินพุตมาตรฐานและส่งออกสตริงที่เป็นตัวแทนของการขยายสุดท้าย

อินพุตจะมีช่องว่างและตัวอักษร AZ เท่านั้น

เพื่อเป็นตัวแทนของการขยายคุณจะออกพยางค์ทั้งหมดด้วยการ|กำหนดเขตการแยกของเท้า พยางค์ยาวจะถูกแทนด้วย-ขณะที่พยางค์สั้นจะถูกทำเครื่องหมายด้วยvและ anceps (พยางค์สุดท้ายของทุกบรรทัด) xจะถูกทำเครื่องหมายโดย หากมีวิธีแก้ปัญหาหลายวิธีคุณอาจส่งผลให้ใครก็ตาม

กรณีทดสอบ

จุดเริ่มต้นของ Aeneid ของ 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

ข้อกำหนดเพิ่มเติม

ในแบบที่เหมาะสมของบทกวีภาษาละตินคำตอบทั้งหมดจะต้องเริ่มต้นด้วยการภาวนาให้แรงบันดาลใจ

ละตินมีเพียงหนึ่งตัวอักษรคำ "e" และ "a" คุณอาจคิดว่าจะไม่มีคำตัวอักษรอื่น ๆ ปรากฏเป็นอินพุต


2
โอ้พระเจ้านำความทรงจำกลับคืนมา ...
ThreeFx

1
"ฉัน" การดำเนินการสระอื่นเป็นพยัญชนะ (เช่น "j") ในLavinjaque ( --vv) มันเป็น แต่ในItaliam ( -vv-) ในข้อเดียวกันมันไม่ได้ อาจใส่ Js ในอินพุตหรือไม่ คุณมีวิธีแก้ปัญหาการทำงานที่สร้างผลลัพธ์นี้หรือไม่?
ลินน์

โอ้เท้าสุดท้ายคือ dactyl เสมอคลาสสิก คุณควรระบุว่าคำตอบสามารถสมมติได้หรือไม่
ลินน์

@Lynn เนื่องจากเท้าสุดท้ายไม่ได้เป็น dactyl ฉันตั้งใจทิ้งมันไว้อย่างคลุมเครือ มันอาจเป็นได้ทั้ง
Ad Hoc Garf Hunter

@Dave 1) ใช่คุณพูดถูก 2) ต้องจบทั้งคำ ฉันจะแก้ไขปัญหาเหล่านี้ในไม่ช้า
Ad Hoc Garf Hunter

คำตอบ:


5

sed, 402 392 374 359 363 334 333 ไบต์

“ ร้องเพลงเทพความโกรธของอาคีลเลอุสบุตรชายของเปเล่ลัสและการทำลายล้างซึ่งใส่ความเจ็บปวดเป็นพัน ๆ แก่ชาว Achians พุ่งเข้ามาในบ้านของเหล่าฮีโร่ที่แข็งแกร่งของวิญญาณนรก แต่ให้ร่างกายเป็นสุนัขเลี้ยงที่ละเอียดอ่อน ของนกทุกตัวและเจตจำนงของซุสก็สำเร็จลุล่วงตั้งแต่เวลานั้นเมื่อมีการขัดแย้งกันครั้งแรกในลูกชายของอาเทรอุสผู้เป็นเจ้าแห่งมนุษย์และ Achilleus ที่ยอดเยี่ยม”

- โฮเมอร์ (อีเลียด); สับสนทำไมคำพูดนี้อยู่ที่นี่? ตรวจสอบกฎ

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'

ไม่ได้ตีกอล์ฟอย่างแน่นอน แต่สิ่งนี้ใช้กฎที่กำหนดทั้งหมดในรูปแบบของการแสดงผลปกติซึ่งทำงานเพียงหนึ่งต่อหนึ่งเพื่อเข้าถึงโซลูชัน ซึ่งจัดการแต่ละบรรทัดแยกกันดังนั้นสามารถประมวลผลอินพุตหลายบรรทัดทั้งหมด

การใช้งาน:

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

ทำให้พังถล่ม:

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
"

ผลลัพธ์สำหรับกรณีทดสอบ:

-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

เป็นที่น่าสังเกตว่าฉันได้รับผลลัพธ์ที่แตกต่างกันสำหรับกรณีทดสอบ 2 และ 3 ซึ่งดูเหมือนจะเป็นโซลูชันทางเลือกที่ไม่รวมอยู่ในคำถาม อาจเป็นไปได้ว่าฉันตีความกฎผิดไป
เดฟ

ฉันไม่คิดว่าสโคปของคุณสำหรับกรณีทดสอบ 2 ใช้ได้ "U" ตัวสุดท้ายใน "PROFUGUS" ต้องยาวเพราะมีพยัญชนะสองตัว ("S" และ "L") หน้าตัวสระ ในการขยายของคุณคุณมีมันสั้น ฉันกำลังตรวจสอบที่สามตอนนี้ คำตอบที่ดีอยู่แล้ว :)
Ad Hoc Garf Hunter

@WheatWizard อาตกลงว่าเป็นกฎที่ผมสงสัยเกี่ยวกับ (ควรจะได้ถาม) - ฉันเอามันหมายถึง 2 พยัญชนะไม่มีช่องว่าง ง่ายต่อการแก้ไข ฉันจะโพสต์การอัปเดตในไม่ช้า
เดฟ

ดูเหมือนว่าฉันยังมีข้อผิดพลาดที่vccvccvจะกลายเป็น-??แทน--?- ตอนนี้คง ดูเหมือนว่ามันจะเห็นด้วยกับตัวอย่างของคุณในทุกกรณี แต่ # 2 ตอนนี้
เดฟ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.