Они говорят, что hate
это сильное слово. Я хотел выяснить, почему, поэтому я хорошо посмотрел на слово.
Я заметил, что у каждого согласного был гласный после этого. Это показалось мне достаточно сильным, поэтому я решил, что именно это делает слово сильным.
Я хочу найти более сильные слова, поэтому мне нужна программа для этого!
Находить сильные слова
Сильные слова - это слова, в которых после каждого согласного (буквы в наборе BCDFGHJKLMNPQRSTVWXZ
) следует гласная (буквы в наборе AEIOUY
). Вот и все. Остальное не важно.
Если слово начинается с гласной, вам не нужно беспокоиться ни о одной из букв перед первым согласным. Если в слове вообще нет согласных, это автоматически сильное слово!
Некоторые примеры сильных слов agate
, hate
и you
. agate
это все еще сильное слово, потому что, хотя оно начинается с гласной, за каждой согласной все еще следует гласная. you
это сильное слово, потому что оно не имеет согласных.
Для сильных слов нет ограничений по длине.
Соревнование
Напишите программу или функцию, которая принимает непустую строку в качестве входных данных и выводит истинное значение, если оно является сильным словом или ложным значением, если это не так.
Разъяснения
- Вы можете принять ввод в нижнем или верхнем регистре. Укажите, какой в вашем ответе.
- Слова не будут содержать знаков препинания любого рода. Они будут содержать только простые буквы в наборе
ABCDEFGHIJKLMNOPQRSTUVWXYZ
. - Вместо истинных и ложных значений вы можете выбрать два разных и непротиворечивых значения, которые будут возвращаться как истинные и ложные. Если вы сделаете это, укажите значения, которые вы выбрали в своем ответе.
- В качестве альтернативы вы можете вывести ложное значение для сильного слова и правдивое для не сильного слова.
Контрольные примеры
Input -> Output
hate -> true
love -> true
popularize -> true
academy -> true
you -> true
mouse -> true
acorn -> false
nut -> false
ah -> false
strong -> false
false -> false
parakeet -> false
счет
Поскольку это код-гольф , выигрывает ответ с наименьшим количеством байтов!
источник
""
возможным вводом?Ответы:
JavaScript (ES6),
362827 байтСохранено 1 байт путем инвертирования результата, как предлагает LarsW
Принимает ввод в нижнем регистре. Возвращает
false
для сильного слова иtrue
для не сильного слова.Как?
Мы добавляем
0
(не гласный) в конец входной строки и ищем два последовательных не гласных символа. Это позволяет нам охватить оба случая, которые делают слово не сильным:Контрольные примеры
Показать фрагмент кода
источник
+0
, хотя? Похоже, без него отлично работает+0
, это возвратило бы ложные срабатывания на словах, заканчивающихся согласной.!
(два разных значения)Python 2 , 48 байт
Неименованная функция, принимающая (строчную) строку
s
и возвращающая,False
если она сильная илиTrue
нет.Попробуйте онлайн! (инвертирует результаты в соответствии с ОП)
Как?
У не сильных слов есть согласная, сопровождаемая согласной, или конец согласной.
Код добавляет согласную в end (
s+'b'
), чтобы сделать обязательный тест только для двух согласных подряд.Он выясняет, является ли каждая буква в измененном слове гласной с пониманием списка
[v in'aeiouy'for v in s+'b']
.Теперь ему нужно проверить два
False
результата подряд (сигнализируя не сильное слово), это делается путем получения строкового представления (использования`...`
) этого списка и поиска существования'se, F'
. Это самая короткая строка, найденная в,'False, False'
но ни одна из'True, True'
:;'False, True'
; или'True, False'
.В качестве примера рассмотрим
'nut'
список постижение оценивает каждую букву,v
, из'nutb'
существования в'aeiouy'
давая список[False, True, False, False]
, строковое представление этого списка ,'[False, True, False, False]'
который содержит'e, F'
здесь:'[False, True, Fals>>e, F<<alse]'
следовательно , функция возвращает этоTrue
означает , что гайка не сильное слово.источник
Желе ,
109 байтМонадическая ссылка, содержащая список символов и возвращающая:
0
если сильный1
если неПопробуйте онлайн! или посмотрите набор тестов .
Как?
Примечание. Причиной использования
Ạ
является просто сохранение байта сверх использования1
(поскольку мы хотим сразу использовать11
).источник
Ạ
вещь в вашем коде ... иначе вы могли бы сделатьe€ØY;1w11
что-то ещеẇ
есть левый аргумент, который является числом, он неявно преобразуется в десятичный список цифр, так что получается одиннадцать[1,1]
.05AB1E , 8 байтов
Код
Использует кодировку 05AB1E . Попробуйте онлайн!
объяснение
пример
источник
R , 43 байта
Попробуйте онлайн!
Порт ответа Арнаулда на JavaScript; возвращает 1 для слабых слов и
integer(0)
для сильных; он добавляет(пробел) к концу строки.
Это на самом деле векторизация; с вектором строк он возвращает индексы (на основе 1) слабых слов.
источник
$
, не хочешь объяснить это дальше?paste0(s,0)
, но это просто шутка. Я думаю, что @Charlie ссылается на что-то вроде этого:grep("[^aeiouy]([^aeiouy]|$)",s)
Dyalog APL, 20 байтов
Попробуйте онлайн!
источник
⎕←
.Haskell ,
6154 байтаПопробуйте онлайн!
Мне пришлось добавить
z
в конце строки, чтобы обработать регистр в конце.источник
Java (OpenJDK 8) ,
9381 байтПопробуйте онлайн!
источник
s->{int w=0,p=w,l;for(char c:s){l="aeiouy".indexOf(c)>>31;w|=p&l;p=l;}return w+p>=0;}
.s->{int w=0,p=w,l;for(char c:s)w|=p&(p=l="aeiouy".indexOf(c)>>31);return w+p>=0;}
[a-z&&[^aeiouy]]
мой предыдущий ответ . ;)Шелуха , 12 байт
Попробуйте онлайн!
Спасибо H.PWiz за помощь с -4.
Возвращает противоречивые, но соответственно истинные или ложные значения.Спасибо Лео за -1, теперь возвращает непротиворечивое истинное / ложное значение.
источник
Pyth, 18 bytes
Verify all the test cases.
"Borrowed" the regex from the JS answer. This returns
False
for strong words,True
otherwiseисточник
13 ISO-8859-1 bytes, 13 chars
. I think that should be fineBrachylog,
181110 bytesTry it online!
Neat and simple (except maybe for the 2 extra initial bytes to handle the final consonant case, like "parakeet").
Is falsey for strong words and truthy for non-strong words.
источник
Python 2, 58 bytes
-30 bytes by realizing it can be as simple as Arnauld's JS answer.
Try it online!
источник
f=lambda s...
f=\
in a header).'[^aeiouy]([^aeiouy]|$)'
(24 bytes) with"[^aeiouy]("*2+")|$)"
(21 bytes) to save 3 bytes, as the empty group,()
, does not change the search behavior (TIO).Perl 5, 31 bytes (30 + 1)
+1 byte for
-p
command line flag. Prints the word if it's a strong word, or the empty string if it is not.источник
$_=$/if/[^aeiouy]{2}/
.Jelly, 11 bytes
Try it online!
Yes I know I've been beaten a lot by Jonathan Allan but I wanted to share my approach anyway :P
-4 bytes by stealing a little bit of Jonathan Allan's answer (instead of appending a consonant to check for last-letter edge case, just append 1)
-1 byte thanks to miles
источник
a2\
orȦ2Ƥ
instead ofṡ2Ȧ€
ØC
to make sureYy
was counted as a consonant because somehow I remembered backwards. Thanks!Awk, 39 bytes
prints
n
for non-strongword, nothing (or, just a newline) for strongwordfollowing the pack and searching for two consecutive non-vowels on lowercase input
testing
источник
Kotlin, 49 bytes
True and false are swapped
Beautified
Test
TryItOnline
Based on @Arnauld's Answer
источник
Retina,
2318 bytesTry it online! Outputs 0 for strong, 1 if not. Add 1 byte to support mixed case. Edit: Saved 5 bytes thanks to @ovs.
источник
Java 8,
5342 bytes-11 bytes by using the same regex as in @jrtapsell's Kotlin answer instead.
Try it here. (
false
if strong;true
if not)Explanation:
So it basically checks if we can find two adjacent consonants, or if the String ends with a consonant.
Old answer (53 bytes):
Try it here. (
true
if strong;false
if not)Uses regex to see if the input-String matches the 'strong'-regex. Note that
String#matches
in Java automatically adds^...$
to check if the String entirely matches the given regex.Explanation":
A search instead of matches (like a lot of other answers use) is actually longer in Java:
70 bytes:
Try it here. (
false
if strong;true
if not)источник
Ruby, 25 bytes
Try it online!
Everybody else is doing it, so why can't Ruby?
источник
SOGL V0.12,
1918 bytesTry it Here!
Explanation:
источник
05AB1E, 11 bytes
Try it online!
Uses Jonathan's algorithm, returns
0
for true and1
for false.источник
Swift 3.1, 85 bytes
Try it here!
This borrows Arnauld's regex.
источник
Lua, 41 bytes
Reads from standard input
Lua (loadstring'ed), 37 bytes
Reads from function parameter(s)
Input is lowercase
Sees if there is a string of length 2 or more, consisting only of not vowels (consonants) or if the string ends with a non-vowel
Returns true/false
источник
C++,
195194 bytes-1 bytes thanks to Zacharý
Uppercase, return true if input is a strong word, false otherwise ( C++ have simple int to bool implicit cast rules, 0 => false, true otherwise )
Code to test :
источник
return
and!
.C, 107 Bytes
Returns 1 for strong word and 0 for weak word. Tested with the words given in the main post.
источник
C (gcc), 59 bytes
Try it online!
источник
PHP, 69 bytes
Returns 1 is the word is not strong.
источник
/", str
->/",str
and[1]))) return
->[1])))return
but I don't know PHP too well so I can't be sure.[B-Z]
?[B-Z]
includes vowels.[^AEIOUY]
works, though.if
statement.CJam, 57 bytes
Try it online!
Reads input, converts to 1s for consonants, 0s for vowels. For every consonant, AND predefined variable X (predefined to 1) with next character's value. Output X
источник