Будучи ужасным латинским студентом, в течение нескольких лет я научился ненавидеть многие вещи о латыни. Однако есть одна вещь, которую я люблю.
Латинская развертка.
Сканирование - это акт определения метра определенной строки стихов. Для латыни это означает разграничение каждого слога в строке как «легкий» или «тяжелый».
В латинице есть много правил. Однако, в отличие от английского, латиноамериканское сканирование довольно регулярно и часто не требует знания латыни или грамматики. Для этой задачи мы будем использовать упрощенное подмножество этих правил (реальная латынь не имеет аккуратной спецификации).
Прежде чем начать сканирование, вы должны пройти тестирование . Elision - это падающие слоги между словами, облегчающие произношение. (например, «он есть» -> «он»). В отличие от английского, латинский elision следует очень хорошим правилам.
Последний гласный слова, заканчивающийся гласным, опускается, если следующее слово начинается с гласного.
НАУТА ЭСТ -> НАУТЕСТ
То же самое касается слов, оканчивающихся на гласную, за которой следует «m».
ФИДУМ АГРИКОЛАМ -> ФИДАГРИКОЛАМ
Начальная буква «h», за которой следует гласная, считается единственной гласной в целях исключения и всегда исключается при исключении.
MULTAE HORAE -> МУЛЬТОРА
или
МУЛЬТАМ ХОРАМ -> МУЛЬТОРАМ
После исключения мы можем начать сканирование. Сканирование производится на определенный метр. Метром для этой задачи является дактильный гексаметр . Дактильный гексаметр имеет шесть «футов», каждая нога состоит из двух или трех слогов. Слог может быть длинным или коротким в зависимости от гласного. Каждый из первых пяти футов будет либо дактилом, длинным слогом, за которым следуют два коротких, либо спондее, двумя длинными слогами. И последним шагом будет длинный, за которым следует анцепс (короткий или длинный, для этой проблемы вам не нужно будет определять, какой именно).
Гласный на латинском языке может быть коротким или длинным
«I», заключенное между двумя гласными (например, eiectum), является согласной. (то есть "J")
«Я», начинающее слово, за которым следует гласный (например, Iactus), также является согласной
«U» после «q» также является согласной (то есть «v»)
Дифтонги (ae, au, ei, eu, oe и ui) состоят из двух гласных, но считаются одним гласным и всегда длинные
Гласный с двумя или более согласными между ним и следующим гласным всегда длинный
Для предыдущего правила «l» или «r» после «b», «c», «d», «g», «p» или «t» не считаются согласными
«х» считается двумя согласными
"ch", "ph", "th" и "qu" считаются одним согласным
Слог "que" в конце слова (после пропуска) всегда короткий
Если гласная не навязывается одним из предыдущих правил, она может быть длинной или короткой, это будет зависеть от метра
Ваша задача - взять строку латиницы и произвести ее сканирование. Вы берете строку как строку через стандартный ввод и выводите строку, представляющую окончательное сканирование.
На входе будут только пробелы и символы AZ.
Для представления отсканированного изображения вы выведите все слоги с |
разграничением ступней. Длинный слог будет представлен, в -
то время как короткий слог будет отмечен как a, v
а anceps (последний слог каждой строки) будет отмечен как 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
Дальнейшие условия
В правильной манере латинской поэзии все ответы должны начинаться с обращения к музам .
В латыни только два однобуквенных слова «е» и «а». Вы можете предположить, что никакие другие однобуквенные слова не появятся в качестве входных данных.
источник
--vv
) это так, но в Italiam (-vv-
) в том же стихе это не так. Может поставить Js на входе? У вас действительно есть рабочее решение, генерирующее этот вывод?Ответы:
sed,
402392374359363334333 байта- Гомер (Илиада); растерялся, почему эта цитата здесь? проверьте правила.
Не совсем в гольфе, но это реализует все данные правила в форме регулярных выражений, которые sed просто запускает один за другим, чтобы найти решение. Это обрабатывает каждую строку независимо, поэтому может обрабатывать весь многострочный ввод.
Применение:
Сломать:
Результаты для тестовых случаев:
источник
vccvccv
стало бы-??
вместо--?
- теперь исправлена. Похоже, что теперь он согласен с вашими образцами во всех случаях, кроме случая №2.