Как мы все знаем, лимерики - это короткие, пятистрочные, иногда непристойные стихи со схемой рифмования AABBA и метром анапестика (что бы это ни было):
Написание абсурдного лимерика
Строка первая и строка пять рифмуются в слове
И так же, как вы рассчитывали
Они рифмуются со вторым
Четвертая строка должна рифмоваться с третьим
Вам поручено написать самый короткий программу, которая при подаче вводимого текста печатает, считает ли он, что ввод является допустимым лимериком. Ввод может быть либо в командной строке, либо через стандартный ввод, по вашему выбору, а вывод может быть простым «Y» / «N» или доверительным счетом, опять же по вашему выбору.
Вот еще один пример правильного лимерика:
Была молодая леди, чьи глаза
были уникальны по цвету и размеру,
когда она широко их открыла.
Люди все отвернулись
и с удивлением ушли.
Но стихотворение ниже явно не лимерик, так как оно не рифмуется:
Был пожилой человек св. Пчелы,
которого ужалила в руке оса.
Когда его спросили: "Это больно?"
Он ответил: «Нет, это не так,
я так рад, что это не шершень».
И это не так, так как метр все не так:
Я слышал о человеке из Берлина,
который ненавидел комнату, в которой он находился.
Когда я спросил, почему
Он со вздохом сказал:
«Ну, вы видите, вчера вечером была пара хулиганов, которые праздновали, как Медведи побеждают проклятых. Чемпионат мира, и они были очень громкими, поэтому я не мог уснуть из-за шума ».
Улики
Вот некоторые из подсказок, которые вы могли бы использовать, чтобы решить, является ли ваш вклад лимерикой:
- Лимерики всегда в пять строк.
- Строки 1, 2 и 5 должны рифмоваться.
- Строки 3 и 4 должны рифмоваться.
- Строки 1, 2 и 5 имеют около 3x3 = 9 слогов, в то время как третий и четвертый имеют 2x3 = 6 слогов
Обратите внимание, что ни один из них, за исключением первого, не является жестким и быстрым: 100% -ая оценка правильности невозможна.
правила
Ваша запись должна по крайней мере правильно классифицировать примеры с 1 по 3 детерминистическим образом.
Вы имеете право использовать любой язык программирования , который вы хотите, за исключением, конечно , языков программирования , специально предназначенных для этого конкурса (см здесь ).
Вам не разрешается использовать любую библиотеку, кроме стандартных предложений вашего языка программирования.
Вы можете предположить, что этот файл , словарь произношения CMU Sphinx, находится в файле с именем «c» в текущем каталоге.
Вы не можете жестко программировать входные данные теста: ваша программа должна быть общим классификатором лимериков.
Вы которые позволили предположить , что вход ASCII, без какого - либо специального форматирования (например , в примерах), но программа не следует путать interpunction.
Бонусы
Доступны следующие бонусы:
- Ваша программа выводит свой результат как лимерик? Вычтите бонус в 150 символов !
- Ваша программа также правильно определяет сонеты? Вычтите дополнительный бонус в 150 символов !
- Ваша программа выводит свой результат как сонет при использовании в сонете? Вычтите дополнительный бонус в 100 символов !
В заключение...
Не забудьте упомянуть, какие бонусы, по вашему мнению, вы заслуживаете, если таковые имеются, и вычесть бонус из вашего числа персонажей, чтобы получить ваш счет. Это кодовое соревнование по гольфу : выигрывает самая короткая заявка (то есть заявка с наименьшим количеством очков).
Если вам нужны дополнительные (положительные) данные испытаний, ознакомьтесь с OEDILF или Книгой чепухи . Данные отрицательного теста должны быть легко построены.
Удачи!
источник
code-challenge
из-за бонусов. Пожалуйста, прочитайте описание тегаОтветы:
Питон: 400 - 150 - 150 = 100
Самый короткий сценарий, который я мог придумать, это тот ...
... но даже не пытайся. Он анализирует предоставленный словарь для каждого слова, которое встречается, поэтому он очень медленный. Кроме того, ошибка генерируется всякий раз, когда слово отсутствует в словаре.
Код по-прежнему соответствует требованиям: распознает, был ли текст передан через stdin лимерикой, сонетом или ни тем, ни другим.
Оптимизированная версия содержит всего 20 символов.
Характеристики
использование
Возможны 3 разных выхода:
Расширенный код с пояснениями
источник
sys.stdin.read()
илиopen(sys.argv[1]).read()
где-то) и пересчитать.ECMAScript 6 (138 баллов; попробуйте в Firefox):
288
-150
бонусные баллы за включение лимерика (взято из @MathieuRodic).Примечания:
Ожидает переменную
c
будет содержать содержимое файла словаря, поскольку вы не можете читать файлы в обычном ECMAScript.ECMAScript не имеет стандартного ввода, но
prompt
обычно считается «стандартным вводом»; однако, посколькуprompt
в большинстве браузеров (если не во всех) браузеры преобразуют разрывы строк в пробелы, я принимаю входные данные из переменнойi
.Код Ungolfed:
источник