Scannen Sie den daktylischen Hexameter in einem einzigartigen Puzzle

10

Als schrecklicher Lateinstudent habe ich mehrere Jahre lang gelernt, viele Dinge über Latein zu hassen. Es gibt jedoch eine Sache, die ich liebe.

Lateinische Scansion.

Scansion ist der Akt der Bestimmung des Meters einer bestimmten Gedichtzeile. Für Latein bedeutet dies, jede Silbe in der Zeile als "leicht" oder "schwer" abzugrenzen.

Im Lateinischen hat Scansion viele Regeln. Im Gegensatz zu Englisch ist das lateinische Scansion jedoch ziemlich regelmäßig und erfordert oft keine Kenntnisse des lateinischen Vokabulars oder der lateinischen Grammatik. Für dieses Problem werden wir eine vereinfachte Teilmenge dieser Regeln verwenden (echtes Latein hat keine ordentliche Spezifikation).

Bevor Sie mit dem Scansion beginnen, müssen Sie sich entziehen . Elision ist das Ablegen von Silben zwischen Wörtern, um die Aussprache zu erleichtern. (zB "er ist" -> "er ist"). Im Gegensatz zu Englisch folgt die lateinische Elision sehr guten Regeln.

  • Der letzte Vokal eines Wortes, das mit einem Vokal endet, wird weggelassen, wenn das nächste Wort mit einem Vokal beginnt.

    NAUTA EST -> NAUTEST

  • Gleiches gilt für Wörter, die mit einem Vokal gefolgt von "m" enden.

    FIDUM AGRICOLAM -> FIDAGRICOLAM

  • Das Wortinitial "h" gefolgt von einem Vokal zählt zu Elisionszwecken als einzelner Vokal und wird immer gelöscht, wenn es entfernt wird.

    MULTAE HORAE -> MULTORAE

    oder

    MULTAM HORAM -> MULTORAM

Nach der Wahl können wir mit der Scansion beginnen. Die Scansion erfolgt auf einen bestimmten Meter. Das Messgerät für diese Herausforderung ist ein daktylischer Hexameter . Dactylic Hexameter hat sechs "Fuß" jeder Fuß besteht aus zwei oder drei Silben. Die Silben können je nach Vokal entweder lang oder kurz sein. Jeder der ersten fünf Fuß ist entweder eine Daktylle, eine lange Silbe, gefolgt von zwei kurzen, oder eine Spondee, zwei lange Silben. Und der letzte Fuß wird ein langer sein, gefolgt von einem Anceps (kurz oder lang, für dieses Problem müssen Sie nicht bestimmen, welcher).

  • Ein Vokal in Latein kann entweder kurz oder lang sein

  • Ein "i" zwischen zwei Vokalen (z. B. Eiectum) ist ein Konsonant. (dh ein "j")

  • Ein "i", das ein Wort gefolgt von einem Vokal (z. B. Iactus) beginnt, ist ebenfalls ein Konsonant

  • Ein "u" nach einem "q" ist auch ein Konsonant (dh ein "v")

  • Diphthongs (ae, au, ei, eu, oe und ui) bestehen aus zwei Vokalen, zählen aber als ein Vokal und sind immer lang

  • Ein Vokal mit zwei oder mehr Konsonanten zwischen ihm und dem nächsten Vokal ist immer lang

  • Für die vorherige Regel zählt ein "l" oder ein "r" nach einem "b", "c", "d", "g", "p" oder "t" nicht als Konsonant

  • "x" zählt als zwei Konsonanten

  • "ch", "ph", "th" und "qu" zählen als ein Konsonant

  • Die Silbe "que" am Ende eines Wortes (nach der Elision) ist immer kurz

  • Wenn ein Vokal nicht durch eine der vorherigen Regeln erzwungen wird, kann er entweder lang oder kurz sein. Dies hängt vom Messgerät ab

Ihre Aufgabe wird es sein, eine Linie Latein zu nehmen und die Scansion davon zu produzieren. Sie nehmen die Zeile als Zeichenfolge über die Standardeingabe auf und geben eine Zeichenfolge aus, die die endgültige Erweiterung darstellt.

Die Eingabe enthält nur Leerzeichen und Zeichen AZ.

Um die Scansion darzustellen, geben Sie alle Silben mit der |Abgrenzung der Fußtrennung aus . Eine lange Silbe wird durch eine -Weile dargestellt, eine kurze Silbe durch ein vund ein Anceps (die letzte Silbe jeder Zeile) durch ein x. Wenn es wie so oft mehrere Lösungen gibt, können Sie jede davon ausgeben.

Testfälle

Der Beginn von Virgils 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

Weitere Bestimmungen

In der richtigen Weise der lateinischen Poesie müssen alle Antworten mit einer Anrufung der Musen beginnen .

Latein hat nur zwei Ein-Buchstaben-Wörter "e" und "a". Sie können davon ausgehen, dass keine anderen Wörter mit einem Buchstaben als Eingabe angezeigt werden.

Ad-hoc-Garf-Jäger
quelle
2
Oh Gott, das bringt Erinnerungen zurück ...
ThreeFx
1
Ein "i", das einen anderen Vokal weiterführt, ist ein Konsonant (dh ein "j"). In Lavinjaque ( --vv) ist es, aber in Italiam ( -vv-) im gleichen Vers ist es nicht. Vielleicht Js in die Eingabe setzen? Haben Sie tatsächlich eine funktionierende Lösung, die diese Ausgabe generiert?
Lynn
Oh, der vorletzte Fuß ist klassisch immer eine Daktylle. Sie sollten angeben, ob Antworten dies annehmen können.
Lynn
@Lynn Da der vorletzte Fuß nicht immer eine Daktylle ist, habe ich ihn absichtlich mehrdeutig gelassen. Es kann entweder sein.
Ad-hoc-Garf-Jäger
@ Dave 1) Ja, du hast Recht 2) Es muss das ganze Wort beenden. Ich werde diese in Kürze beheben
Ad-hoc-Garf-Jäger

Antworten:

5

sed, 402 392 374 359 363 334 333 Bytes

„Sing, Göttin, der Zorn von Peleus 'Sohn Achilleus und seine Verwüstung, die den Achianern tausendfach Schmerzen bereitete, schleuderten in ihrer Menge starke Seelen von Helden in das Haus des Hades, gaben aber ihren Körpern das zarte Festmahl der Hunde. von allen Vögeln, und der Wille des Zeus wurde seit jener Zeit erfüllt, als zuerst Atreus 'Sohn, der Herr der Menschen und brillanter Achilleus, in Konfliktsituation stand. “

- Homer (Die Ilias); verwirrt, warum dieses Zitat hier ist? Überprüfen Sie die Regeln.

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'

Nicht gerade Golf gespielt, aber dies implementiert alle vorgegebenen Regeln in Form von regulären Ausdrücken, die nur einzeln ausgeführt werden, um die Lösung zu erreichen. Dadurch wird jede Zeile unabhängig behandelt, sodass eine gesamte mehrzeilige Eingabe verarbeitet werden kann.

Verwendungszweck:

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

Nervenzusammenbruch:

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
"

Ergebnisse für Testfälle:

-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
Dave
quelle
Bemerkenswert ist, dass ich für die Testfälle 2 und 3 unterschiedliche Ergebnisse erhalte. Dies scheinen alternative Lösungen zu sein, die nicht in der Frage enthalten sind. Könnte sein, dass ich eine Regel falsch interpretiert habe.
Dave
Ich glaube nicht, dass Ihre Scansion für Testfall 2 funktioniert. Das letzte "U" in "PROFUGUS" muss lang sein, da vor dem nächsten Vokal zwei Konsonanten ("S" und "L") stehen. In deiner Villa hast du es kurz. Ich überprüfe jetzt den dritten.
Trotzdem eine gute
@WheatWizard ah ok, das war eine Regel, über die ich mich gewundert habe (hätte fragen sollen) - ich habe 2 Konsonanten ohne Leerzeichen verstanden . Einfach genug zu reparieren. Ich werde bald ein Update veröffentlichen.
Dave
Sieht so aus, als hätte ich auch einen Fehler vccvccv, -??der --?jetzt behoben würde. Sieht so aus, als ob es mit Ihren Proben in allen Fällen außer Fall 2 übereinstimmt.
Dave