在一个独特的难题中扫描准六边形


10

作为一个可怕的拉丁学生,几年来,我学会了讨厌拉丁。然而,我有一件事是爱。

拉丁丑闻。

扫描是确定特定诗词的计量标准的行为。对于拉丁语,这意味着将行中的每个音节划分为“轻”或“重”。

在拉丁语中,丑闻有很多规则。但是,与英语不同的是,拉丁语扫描是相当常规的,并且通常不需要任何拉丁语词汇或语法知识。对于这个问题,我们将使用这些规则的简化子集(真实的拉丁文没有整齐的规范)。

在开始之前,韵律必须的Elid。Elision是在单词之间插入音节以简化发音的过程。(例如,“他是”->“他是”)。与英语不同,拉丁语省略遵循非常好的规则。

  • 如果下一个单词以元音开头,则省略以单词元音结尾的单词的最终元音。

    诺埃斯特EST->诺埃斯特

  • 以元音后跟“ m”结尾的单词也是如此。

    FIDUM AGRICOLAM-> FIDAGRICOLAM

  • 单词首字母“ h”后跟一个元音,出于简化目的,被视为单个元音,并且在被省略时始终会被丢弃。

    MULTAE HORAE-> MULTORAE

    要么

    MULTAM HORAM-> MULTORAM

清除后,我们可以开始扫描。扫描到特定的仪表。应对这一挑战的计量器是dactylic hexameter。乳状六边形有六个“脚”,每只脚由两个或三个音节组成。音节的长短取决于元音。前五个脚的每一个要么是一个长音节的dactyl,然后是两个短的音节,要么是一个spondee,两个长音节。最后一脚是长脚,后跟脚尖(短脚或长脚,对于此问题,您不必确定是哪一个)。

  • 拉丁语中的元音可以短也可以长

  • 夹在两个元音之间的“ i”是一个辅音。(即“ j”)

  • 单词后面跟元音(例如Iactus)开头的“ i”也是辅音

  • “ q”之后的“ u”也是辅音(即“ v”)

  • Diphthongs(ae,au,ei,eu,oe和ui)由两个元音组成,但是算作一个元音,并且总是很长

  • 与下一个元音之间有两个或多个辅音的元音总是很长

  • 对于先前的规则,在“ b”,“ c”,“ d”,“ g”,“ p”或“ t”之后的“ l”或“ r”不算作辅音

  • “ x”算作两个辅音

  • “ ch”,“ ph”,“ th”和“ qu”被视为一个辅音

  • 单词末尾(省略后)的音节“ que”总是短的

  • 如果元音不是由前面的规则之一强制的,则它可以长或短,这取决于电表

您的任务将是上一行拉丁文,并制作出它的小样。您将通过标准输入将线作为字符串,并输出代表最终扫描的字符串。

输入将仅包含空格和字符AZ。

为了表示这种感觉,您将输出所有音节并标出|脚的间距。一个长音节将由a表示,-而一个短音节将由a表示v,一个anceance(每行的最后一个音节)将由a表示x。如果存在多种解决方案,那么您可能会输出其中任何一个。

测试用例

维吉尔的《埃涅瓦》的开始。

 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
另一个元音后面的“ i”是辅音(即“ j”)。Lavinjaque--vv)中是,但在Italiam-vv-)中则不是。也许将Js输入?您实际上是否有可行的解决方案来生成此输出?
林恩

哦,倒数第二只脚通常是一个仙人掌。您应指定答案是否可以假设。
林恩

@Lynn因为倒数第二只脚并不总是一个仙人掌,所以我故意让它含糊不清。可能是。
Ad Hoc Garf Hunter

@Dave 1)是的,您是对的2)它必须以整个单词结尾。我将尽快修复这些
问题

Answers:


5

sed的,402个 392 374 359 363 334 333字节

“歌唱,女神,贝勒斯儿子阿奇里乌斯的愤怒及其破坏,这使阿契亚人痛苦万倍,他们向众人投奔了黑德斯坚强的英雄灵魂之地,但他们的身体却像狗一样微妙地盛宴,从那时起,宙斯的意志就实现了。宙斯的意志是从那时起第一次出现的。当时阿特雷乌斯的儿子是人类的主宰,也是杰出的阿基琉斯。

—荷马(伊利亚特);困惑为什么这句话在这里?检查规则。

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'

并不是完全打高尔夫球,但是它以正则表达式的形式实现了所有给定的规则,而sed只是一个接一个地运行才能找到解决方案。这样可以独立处理每条线,因此可以处理整个多线输入。

用法:

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的审查不起作用。在“ PROFUGUS”中的最后一个“ U”必须很长,因为在下一个元音之前有两个辅音(“ S”和“ L”)。在您的丑闻中,它很短。我正在检查第三个。无论如何,好的回答是:)
Ad Hoc Garf Hunter'Sep

@WheatWizard啊,好的,这是我想知道的一条规则(应该问)—我将其表示为2个没有空格的辅音。易于修复。我会尽快发布更新。
戴夫

看来我也有一个bug,vccvccv现在变成-??--?-现在已修复。看起来它与您的样本(第2种情况除外)都相同。
戴夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.