독창적 인 퍼즐로 독창적 인 hexameter 스캔


10

몇 년 동안 끔찍한 라틴 학생으로서 나는 라틴어에 관한 많은 것들을 미워하는 법을 배웠습니다. 그러나 내가 좋아하는 것이 있습니다.

라틴 스캔 션.

스캔 은시의 특정 라인의 미터를 결정하는 행위입니다. 라틴어의 경우 이는 줄의 각 음절을 "가벼운"또는 "무거운"으로 구분하는 것을 의미합니다.

라틴어 스캔에는 많은 규칙이 있습니다. 그러나 영어와 달리 라틴어 스캔은 상당히 규칙적이며 종종 라틴어 어휘 나 문법에 대한 지식이 필요하지 않습니다. 이 문제를 위해 우리는 규칙의 단순화 된 부분 집합을 사용할 것입니다 (실제 라틴어는 깔끔한 스펙이 없습니다).

당신이 운율 분석을 시작하기 전에 다음을 수행해야 생략하다 . 제거는 발음을 쉽게하기 위해 단어 사이의 음절을 떨어 뜨립니다. (예 : "그는"-> "그는"). 영어와 달리 라틴어 제거는 매우 훌륭한 규칙을 따릅니다.

  • 다음 단어가 모음으로 시작하면 모음으로 끝나는 단어의 마지막 모음은 생략됩니다.

    NAUTA EST-> NAUTEST

  • 모음으로 끝나는 단어 다음에 "m"이 적용됩니다.

    FIDUM AGRICOLAM-> FIDAGRICOLAM

  • 단어 이니셜 "h"다음에 모음이 있으면 제거 목적으로 하나의 모음으로 간주되며 생략시 항상 삭제됩니다.

    MULTAE HORAE-> 멀티 레아

    또는

    MULTAM HORAM-> MULTORAM

제거 후 스캔을 시작할 수 있습니다. 스캔은 특정 미터로 수행됩니다. 이 도전에 대한 미터는 독창적 인 hexameter 입니다. Dactylic hexameter는 각 발에 2 개 또는 3 개의 음절로 구성된 "피트"가 6 개 있습니다. 모음에 따라 음절이 길거나 짧을 수 있습니다. 처음 5 피트는 각각 짧은 음절, 두 개의 짧은 음절 또는 두 개의 긴 음절로 구성됩니다. 그리고 마지막 발은 길고 팔뚝이 이어집니다 (짧거나 길다,이 문제의 경우 어느 것을 결정할 필요가 없습니다).

  • 라틴어 모음은 짧거나 길 수 있습니다

  • 두 모음 (예 : 전자) 사이에 끼워진 "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팔꿈치 (모든 줄의 마지막 음절)는로 표시됩니다 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
오 신이 기억을
되찾아

1
다른 모음을 진행하는 "i"는 자음 (즉 "j")입니다. 에서는 Lavinjaque ( --vv)는하지만에 Italiam ( -vv-동일한 운문)는 아니다. 입력에 J를 넣을 수 있습니까? 실제로이 출력을 생성하는 작동중인 솔루션이 있습니까?
Lynn

아, 두 번째로 발은 항상 독창적입니다. 답을 추측 할 수 있는지 여부를 지정해야합니다.
Lynn

@Lynn 두 번째 발은 항상 독창적이지는 않기 때문에 의도적으로 모호하게 남겨 두었습니다. 둘 중 하나 일 수 있습니다.
Ad Hoc Garf Hunter

@ 데이브 1) 네 맞아요 2) 단어 전체를 끝내야합니다. 나는 이것을 곧 고칠 것이다
Ad Hoc Garf Hunter

답변:


5

나오지, 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에 대해 다른 결과를 얻습니다.이 질문에는 포함되지 않은 대체 솔루션으로 보입니다. 그래도 규칙을 잘못 해석했을 수 있습니다.
Dave

테스트 사례 2에 대한 귀하의 스캔 션이 효과가 없다고 생각합니다. 다음 모음 앞에 두 개의 자음 ( "S"및 "L")이 있으므로 "PROFUGUS"의 마지막 "U"는 길어야합니다. 당신의 스캔에서 당신은 짧습니다. 나는 지금 세 번째를 확인하고 있습니다. 어쨌든 좋은 대답 :)
Ad Hoc Garf Hunter

@WheatWizard 아 알았어, 그것은 내가 궁금했던 규칙이었다 (물어야한다) – 나는 공백이없는 2 개의 자음을 의미하도록했다 . 쉽게 고칠 수 있습니다. 곧 업데이트를 게시하겠습니다.
Dave

내가 대신에 버그가있는 vccvccv것 같습니다 . 이제 수정되었습니다. 현재 사례 2를 제외한 모든 샘플에 동의하는 것 같습니다. -??--?
Dave
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.