Então, você deseja criar um haiku, mas não tem certeza se ele segue as regras da sílaba para um haiku.
Não me incomodei em escrever uma sinopse adequada, como normalmente faço, então você terá que se contentar com isso. Vamos ficar presos.
Encontrar um haiku na natureza
Para os propósitos deste desafio, verificaremos se o poema fornecido atende a estes critérios:
- Existem três linhas.
- A primeira linha possui 5 sílabas.
- A segunda linha possui 7 sílabas.
- A terceira linha possui 5 sílabas.
Cada linha é composta por uma ou mais palavras, separadas por grupos de espaços. Essas palavras não são necessariamente válidas em inglês.
Cada palavra é dividida em sílabas e, em seguida, essas sílabas são contadas para obter a contagem total de sílabas da linha.
Uma sílaba tem 2 ou 3 partes: o começo, o fim e, possivelmente, o meio. Cada parte é um grupo de consoantes (também conhecido como cluster de consoantes, como s
, sk
ou spl
) ou um grupo de vogais (como i
, ea
ou oui
).
Se o começo é um grupo de consoantes, o meio será um grupo de vogais e o final será um grupo de consoantes. Se o começo é um grupo de vogais, o fim será um grupo de consoantes e não haverá meio.
Por exemplo, a palavra example
é composta de três sílabas, ex
, am
e ple
. ple
não tem final, pois foi interrompido no final da palavra.
Como outro exemplo, a palavra syllable
também tem três sílabas, syll
, abl
e e
, que também não tem fim.
Para um exemplo final, a palavra word
tem uma sílaba word
, que termina com um grupo de consoantes.
O desafio
Dada uma sequência, lista de sequências, lista de listas ou qualquer outro formato razoável que represente um poema com pelo menos uma linha, determine se ele atende aos critérios de um haiku descritos acima e retorne o resultado.
Você pode retornar o resultado em qualquer um destes formatos:
- Um valor verdadeiro, se o poema é um haiku e, caso contrário, um falso.
- Um valor falso se o poema for um haiku e, de outra forma, um verdadeiro.
- Um valor de um intervalo finito de valores especificado na submissão se o poema for um haiku e um valor de um intervalo finito mutuamente exclusivo de valores também especificado na submissão.
Você também pode assumir que o poema não contém caracteres não alfabéticos, mas não pode assumir que esteja inteiramente em maiúsculas ou minúsculas.
Para os propósitos deste desafio, Y
é uma vogal.
Casos de teste
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
Pontuação
Uma vez que este é o código-golfe
A resposta mais curta ganhará
Boa sorte para todos vocês
fonte
Respostas:
Geléia ,
2523 bytes-2 graças a Erik the Outgolfer (use uma lista de linhas como entrada)
Um link monádico que obtém uma lista de listas de caracteres (as linhas) e retorna uma lista de listas de listas de zeros e uns. O haiku válido terá o comprimento 3 e, quando uma das listas mais profundas, que é um único zero, for substituída por uma única, a soma das listas niveladas será 5, 7 e 5, respectivamente. A formação (se as corridas de letras são consoantes e apenas as 8 primeiras palavras de cada uma das 4 linhas) garante que haja apenas finito para cada um dos intervalos válidos e inválidos.
Experimente online! ou veja o (ainda mais confuso!) conjunto de testes
A seguir, é muito mais fácil usar a versão de
32bytes de32, simplesmente produzindo 1 ou 0:Experimente este ou veja sua suíte de testes .
fonte
Ỵµ
, como você pode ter uma lista de linhas.JavaScript (ES6),
8475 bytesRecebe a entrada como uma lista de listas de palavras. Retorna
true
para haiku oufalse
não-haiku.Casos de teste
Mostrar snippet de código
fonte
Retina , 49 bytes
Experimente online!
Saídas
1
para haiku,0
para não haiku.fonte
^
e$
porque osx
haikus seguidos dariamx
como uma string.Python 2 ,
126125120121 bytesExperimente online!
fonte
s
Perl 5 , 63 + 1 (
-p
) = 64 bytesExperimente online!
fonte
Limpo ,
162... 115 bytesDefine a função
@
, levando[[[Char]]]
(lista de lista de palavras) e dandoBool
.Retorna
True
quando a entrada é um haiku,False
caso contrário.Experimente online!
fonte
Mathematica 119 Bytes
Aqui está uma versão que está em conformidade com as regras fornecidas para sílabas:
Aqui está uma versão de 83 bytes que realmente conta sílabas:
por exemplo
retorna
False
desde que a segunda linha possui seis sílabas, em vez das sete necessárias.fonte