Хайку стихотворение с тремя линиями, с 5/7/5 слога счета, соответственно.
Хайку-ш стихотворение с тремя линиями, с 5/7/5 слова графа, соответственно.
Вызов
Напишите программу, которая будет возвращать истину, если ввод является haiku-w, и ложь, если нет.
Допустимый ввод haiku-w должен состоять из 3 строк, разделенных новой строкой.
- Строка 1 должна состоять из 5 слов, каждое слово разделяется пробелом.
- Строка 2 должна состоять из 7 слов, каждое слово разделяется пробелом.
- Строка 3 должна состоять из 5 слов, каждое слово разделяется пробелом.
Примеры
The man in the suit
is the same man from the store.
He is a cool guy.
Результат: правда
Whitecaps on the bay:
A broken signboard banging
In the April wind.
Результат: Ложь
правила
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
- Применяются стандартные лазейки для игры в гольф. Обман запрещен.
- Другие логические возвращаемые значения, такие как
1
и0
, являются приемлемыми. - Список строк длины 3 в качестве входных данных также допустим.
- Допустимые входные данные haiku-w не должны иметь начальных или конечных пробелов или нескольких пробелов, разделяющих слова.
code-golf
decision-problem
DomTheDeveloper
источник
источник
Ответы:
JavaScript (ES6),
73726463544239 байтСпасибо Нейлу за сохранение 13 байтов
объяснение
Это функция жирной стрелки, которая принимает массив строк в качестве аргумента. Он заменяет каждую строку количеством слов. Если это хайку-в,
a
теперь он содержит массив из пяти, семи и пяти раз. Поскольку JavaScript не позволяет сравнивать 2 массива одновременно, массив сначала преобразуется в строку, а затем сравнивается. Это приводит к логическому значению, которое возвращается.источник
%
и*
имеют такой же приоритет, так что вам не нужны()
s, хотя я думаю, что(d*2|5)
может также работать. Также вы можете сойти с рук с одним&
, хотя я думаю, что вы можете улучшить даже с помощью(b...).length==3>b.some(...length-...)
.a=>a.map(c=>c.split
.length)=='5,7,5'
.+''
-==
если другой аргумент является строкой.AWK (GNU Awk),
24,30,2820 байтовGolfed
Выведет «517253» для True и пустую строку для False .
Руководство пользователя GNU Awk
Как это работает
Каждый оператор (правило) awk состоит из шаблона (или выражения) со связанным действием:
Awk будет читать входные данные построчно (запись за записью) и оценивать выражение шаблона, чтобы увидеть, должно ли быть вызвано соответствующее действие.
Приведенный выше код является автономным выражением (шаблоном) Awk без блока действий, что подразумевается
{print $0}
в этом случае.Следует читать справа налево:
q=q NF NR
Присоединять Н умбру из F ields (слова) и N умбры из R ecords (т.е. номер текущей строки), к переменному ц .
Таким образом, при обработке правильного Haiku-w, q будет установлен в:
$0=q
Присвоить вновь вычисленное значение ц к $ 0 (который содержит всю текущую строку / запись по умолчанию).
517253==$0
Сравните его с «подписью» для правильного Haiku-w (517253), если есть совпадение, все выражение оценивается как «true», и выполняется соответствующее действие (неявное
print $0
), отправляя «517253» в stdout (True) иначе вывод будет пустым (False).Обратите внимание, что это правильно распознает Haiku-w, даже если за ним следует произвольное количество строк мусора, но я считаю, что это нормально, так как:
(то есть мы можем предположить, что входное значение имеет длину 3 строки)
Тест
Попробуйте онлайн!
источник
питон , 42 байта
Попробуйте онлайн!
Вводит в виде списка строк со словами, разделенными пробелами.
Поскольку мы гарантируем, что не будет начальных или конечных пробелов, и каждое слово будет разделять только отдельные пробелы, мы можем проверить w-haiku, просто посчитав пробелы в каждой строке.
Мы делаем это в понимании списка, чтобы создать список счетчиков пробелов. Если это правильный хайку, он должен выглядеть следующим образом
[4, 6, 4]
, поэтому мы сравним его с этим и вернем результат.источник
map(str.count,l,' ')
.Желе ,
109 байтПопробуйте онлайн!
объяснение
источник
ċ€⁶⁼4,6,4
иċ€⁶⁼464D¤
... я не могу найти ничего короче, хотя. (Ах, вы можете перевернуть его, тоже:464D⁼ċ€⁶$
)ċ€⁶Ḍ=464
отлично работает на 8.Пакет, 102 байта
Выход с ненулевым уровнем ошибки, как только он читает строку с неправильным количеством слов.
источник
Mathematica, 21 байт
Безымянная функция, принимающая список символов в качестве входных данных и возвращающая
True
илиFalse
. Просто подсчитывает, сколько пробелов в каждом списке символов, которые по правилам задачи прекрасно соотносятся с количеством слов в каждой строке.Предыдущее представление:
Mathematica, 31 байт
Безымянная функция, принимающая список строк в качестве входных данных и возвращающая
True
илиFalse
.источник
Haskell,
3433 байтаПопробуйте онлайн! ,
Редактировать: спасибо @xnor за байт!
источник
f l=[sum[1|' '<-c]|c<-l]==[4,6,4]
.Сетчатка , 12 байт
(после первой строки есть пробел)
Попробуйте онлайн!
M%`
- Подсчитайте количество пробелов в каждой строке.M
- Режим матча - вывести количество матчей.%
- для каждой строки`
- отдельная конфигурация и шаблон регулярных выражений^4¶6¶4$
- должно быть 4, 6 и 4 пробела и ровно три строки.¶
соответствует новым строкам Остальное - простое регулярное выражение.Печать
1
для правильного ввода,0
для недействительного.источник
Python,
5844 байта-14 от tbodt
источник
split("\n")
.lambda h:[len(l.split())for l in h]==[5,7,5]
Perl , 26 байт
24 байта кода + 2 байта для
-ap
флагов.Попробуйте онлайн!
источник
Pyth, 9 байт
Программа, которая принимает ввод списка
"quoted strings"
и печатаетTrue
илиFalse
при необходимости.Тестирование
Как это работает
источник
Japt , 11 байт
Сохранено много байтов благодаря @ETHproductions
Это принимает массив из трех строк в качестве входных данных.
Запустите его онлайн!
источник
PowerShell , 43 байта
Попробуйте онлайн!
объяснение
Принимает ввод в виде строки, разделенной новой строкой.
Удаляет все непустые пробелы, затем проверяет, что он точно соответствует «4 пробела, новая строка, 6 пробелов, новая строка, 4 пробела новая строка», используя регулярное выражение.
Группа захвата соответствует 4 пробелам, обратная ссылка
\1
относится к этому. Новые строки встраиваются в строку. Обратите внимание, что вторая строка регулярного выражения содержит два пробела после обратной ссылки.источник
Пайк,
119 байтПопробуй это здесь!
После
u
байта идут следующие байты:0x03 0x04 0x06 0x04
источник
J, 12 байт
Ввод представляет собой список строк в штучной упаковке.
объяснение
Это вилка с постоянным левым зубцом. Это проверяет результат правильного зубца
#@;:@>
на равенство с4 6 4
. Правильное время распаковывает каждый (>
), затем (@
) преобразует каждую строку в слова (;:
), затем (@
) принимает длину каждого (#
).источник
R, 48 байтов
Читает 3-х символьный вектор из стандартного ввода и работает, считая количество пробелов. Для подсчета количества пробелов мы используем пакет
str_count
fromstringr
, который может рассчитывать вхождения на основе шаблона регулярных выражений.Альтернативный подход без использования пакетов может быть:
источник
el
, спасибо за это.C 142 байта
Безголовая версия:
Возвращает 1 для последовательности 5/7/5, иначе 0.
Положительный тест:
источник
C ++, 357 байт
Что-то новенькое в коде гольфа, но это лучшее, что я мог сделать быстро
источник
Ruby 1.9.3
Не в гольф, но сам по себе хайку
или...
К сожалению, не работает с пробелами в начале строки, но справляется с трейлингом.
источник
Python 2 ,
5764 байтаРедактирование Исправлено с добавлением 7 байтов после обратной связи от @Dada. Благодарность!
Попробуйте онлайн!
Не самый короткий Python-ответ на долгом пути, а просто хотел использовать новый трюк, который я недавно узнал,
input()
чтобы отобразить вывод и сохранитьprint
оператор. Принимает список строк в качестве входных данных. Требуется Ctrl C (или любое другое нажатие клавиши), чтобы завершить программу (за исключением) в терминале, но прекрасно работает без TIO.источник
MATL, 16 байт
Входные данные представляют собой массив ячеек строк и возвращают массив правдивости или ложности .
Попробуйте онлайн
объяснение
источник
MATLAB / Octave, 38 байт
Это решение принимает массив ячеек строк в качестве входных данных, подсчитывает количество пробелов в каждой строке, а затем сравнивает результат с массивом
[4 6 4]
и выдает массив true (все значения равны 1) или false (любое значение равно нулю).Онлайн демо
источник
Perl 6 , 25 байт
источник
Clojure, 44 байта
Ввод списка строк. Функция находит только пробелы и считает их. Это объяснение хайку. :)
источник
Java 7, 154 байта
Требование программы и возможность иметь менее или более трех строк, не говоря уже о многословности Java, делают этот «гольфовый» код довольно большим.
Ungolfed:
Попробуй это здесь.
источник
SimpleTemplate, 77 байт
К сожалению, регулярное выражение aproach является самым коротким.
Требует, чтобы в качестве первого аргумента был указан текст с символами новой строки * NIX. Это не будет работать с переводами в стиле Windows.
Ungolfed:
Не на основе регулярных выражений, 114 байтов
Это требует, чтобы каждая строка была задана в качестве аргумента функции.
Ungolfed:
источник
Stacked, 22 байта
Принимает ввод с вершины стека как список строк символов, как таковой:
объяснение
источник
Java (OpenJDK) , 82 байта
-2 байта благодаря @ corvus_192!
Попробуйте онлайн!
Выглядит так хорошо, но без встроенной функции карты я не могу найти хороший способ. Итерация по массиву занимает несколько байтов дольше, так же как и запись функции карты с использованием потоков.
Лямбда-выражение принимает массив строк и возвращает логическое значение.
источник
Arrays.stream
, но этого достаточно, чтобы ее не стоило использовать (особенно если вам нужно импортироватьArrays
)&
вместо того,&&
чтобы сохранить два байтаSmileBASIC,
9694 байтаисточник
R, 100 байт
Принимает в качестве аргумента список строк длиной 3. Вероятно, дальше не будут играть в гольф, так как дальнейший гольф превращает его в ответ @ Billywob.
источник