Это хайку?


19

Итак, вы хотите создать хайку, но не уверены, что он соответствует правилам слога для хайку.

Я не мог потрудиться написать правильную рекламу, как обычно, поэтому вам придется с этим справиться. Давайте застрять прямо в.

Найти хайку в дикой природе

Для целей этого испытания мы будем проверять, удовлетворяет ли данное стихотворение следующим критериям:

  • Есть три строки.
  • В первой строке 5 слогов.
  • Во второй строке 7 слогов.
  • Третья строка состоит из 5 слогов.

Каждая строка состоит из одного или нескольких слов, разделенных группами пробелов. Эти слова не обязательно являются действительными английскими словами.

Каждое слово разбивается на слоги, и затем эти слоги считаются, чтобы получить общее количество слогов строки.

В слоге есть 2 или 3 части: начало, конец и, возможно, середина. Каждая часть представляет собой либо группу согласных (также называемую группой согласных, например s, skили spl), либо группу гласных (например i, eaили oui).

Если начало - это группа согласных, середина - это группа гласных, а конец - группа согласных. Если начало - это группа гласных, то конец будет группой согласных, а середины не будет.

Например, слово exampleсостоит из трех слогов ex, amи ple. pleне имеет окончания, поскольку оно было прервано к концу слова.

В качестве другого примера, слово syllableтакже имеет три слога syll, ablи e, который также не имеет окончания.

В одном последнем примере слово wordимеет один слог word, который заканчивается группой согласных.

Соревнование

Если дана строка, список строк, список списков или любой другой разумный формат, представляющий стихотворение, содержащее хотя бы одну строку, определите, соответствует ли оно критериям хайку, изложенным выше, и верните результат.

Вы можете вернуть результат в любом из следующих форматов:

  • Истинная ценность, если стихотворение хайку и ложное в противном случае.
  • Ложная ценность, если стихотворение хайку и правдивое в противном случае.
  • Значение из конечного диапазона значений, указанных в представлении, если стихотворение является хайку, и значение из взаимоисключающего конечного диапазона значений, также указанных в представлении.

Вы также можете предположить, что стихотворение не содержит не алфавитных символов, но вы не можете предполагать, что оно полностью в верхнем или нижнем регистре.

Для целей этого вызова, Yгласный.

Контрольные примеры

Truthy

This is a haiku
Yes it truly is one
See what I did man

I am so tired
of writing this already
when can I stop this

Writing another
Of these horrific things
Come on please

Consonant only
Counts as one syllable
ghjk tgh knmb wrts vbc

Falsy

oh boy writing non haiku is so much easier

This is
so good
on my
poor dear brain

The syllables do not match
at least I do not think so
I have not checked

It does not really matter
these test cases will help
At least I think they will

I am done here
This is enough
Goodbye

счет

Так как это
Самый короткий ответ победит
Удачи всем вам



Ответы:


4

Желе ,  25  23 байта

-2 благодаря Эрику Аутгольферу (используйте список строк в качестве входных данных)

e€Øy0;ŒgP€
ḲLÐfÇ€ḣ8µ€ḣ4

Монадическая ссылка, берущая список списков символов (строк) и возвращающая список списков списков нулей и единиц. Действительное хайку будет иметь длину 3, и как только любой из самых глубоких списков, представляющих собой один ноль, будет заменен одним, сумма сглаженных списков составит 5, 7 и 5 соответственно. Формирование (будь то пробегами писем являются согласными и только принимая первые 8 слов каждого из только до 4 линий) гарантирует , что только конечное каждый из допустимых и недопустимых диапазонов.

Попробуйте онлайн! или посмотрите (еще более запутанный!) набор тестов


Здесь гораздо проще использовать  32- байтовую версию 32  , просто выводя 1 или 0:

e€Øy0;ŒgP€SȯL$
ḲLÐfÇ€Sµ€⁼5,7,5

Попробуйте это или посмотрите его набор тестов .


Я не думаю, что «диапазон» возможностей не-хайку конечен - в них может быть неограниченное количество слов / строк.
Эрджан Йохансен

О черт, когда было сделано изменение, я думал, что только диапазон хайку должен быть конечным. Это возвращает его к 32 байту, я думаю.
Джонатан Аллан

OK адресовано для четырех байтов путем ограничения количества слов в строке до восьми и строк до четырех.
Джонатан Аллан

Я думаю, что вы можете удалить Ỵµ, как вы можете взять список строк.
Эрик Outgolfer

3

JavaScript (ES6), 84 75 байт

Вводит в виде списка списков слов. Возвращает trueза хайку или falseне-хайку.

a=>a.map(s=>(s.map(w=>w.match(/[aeiouy]+/gi))+'').split`,`.length)=='5,7,5'

Контрольные примеры


2

Сетчатка , 49 байт

i`[aeiouy]+
1
T`lL`2
2*12+
3
[12]+
3
%M`3
^5¶7¶5$

Попробуйте онлайн!

Выходы 1для хайку, 0для не хайку.


@FryAmTheEggman Это сработало, за исключением того, что я должен был добавить, ^и $потому, что xхайкус подряд выдавал бы xв виде строки.
fireflame241

1
Я думаю, что это может работать на 45 байтов.
Нил

2

Python 2 , 126 125 120 121 байт

lambda s:[len(split('\s+',sub('[aeiouy][^aeiouy ]+','X ',t,0,I).strip()))for t in s.split('\n')]==[5,7,5]
from re import*

Попробуйте онлайн!


Ваше последнее редактирование нарушило требование, чтобы слова только для согласных считались одним слогом.
Орджан Йохансен

@ Эрджан Йохансен: исправлено; Спасибо!
Час Браун


1
Вы можете отыграть несколько простых байтов, взяв входные данные в виде списка строк и заменив s.split () на простоs
Rɪᴋᴇʀ


1

Чистый , 162 ... 115 байт

import StdEnv,StdLib
@t=[sum[max(sum(map hd(group[sum[1\\v<-:"AaEeIiOoUuYy"|c==v]\\c<-w])))1\\w<-l]\\l<-t]==[5,7,5]

Определяет функцию @, беря [[[Char]]](список списка слов), и даваяBool .
Возвращает, Trueкогда вход является хайку, в Falseпротивном случае.

Попробуйте онлайн!


Похоже, что в слове «регистр слов» только для согласных.
Орджан Йохансен

@ ØrjanJohansen фиксированной
Οurous

1

Mathematica 119 байт

Вот версия, которая соответствует заданным правилам для слогов:

Tr/@Map[Length@StringCases[#,("a"|"e"|"i"|"o"|"u"|"y")..]/. 0->1&,(s=StringSplit)/@s[ToLowerCase@#,"\n"],{2}]=={5,7,5}&

Вот 83-байтовая версия, которая на самом деле считает слоги:

Tr/@Map[Length@WordData[#,"Hyphenation"]&,(s=StringSplit)/@s[#,"\n"],{2}]=={5,7,5}&

например

%@"This is a haiku
Yes it truly is one
See what I did man"

возвращается, Falseпоскольку во второй строке записано шесть слогов, а не семь.


Это терпит неудачу, потому что задача явно определяет свой собственный счет слогов, который не использует обычные английские правила.
Орджан Йохансен

Ну, спасибо, что не понизили голосование. Я вижу попытку определения слога, но это не ясно. Я предполагаю, что «один» имеет два слога по этому определению. Похоже, люди просто считают смежные гласные.
Келли Лоудер

Почти, но слова без гласных считаются одним слогом. Смотрите комментарии к вопросу. Я полагаю, это просто сбивает с толку, что делать с согласными группами, но это на самом деле не влияет на окончательный счет.
Орджан Йохансен

«один» имеет две гласные, и они не являются смежными.
Келли Лоудер

Правильно, поэтому они считаются двумя слогами.
Орджан Йохансен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.