Para os propósitos deste desafio, um polifongo é definido como uma fatia contígua de uma String, que contém apenas vogais e tem comprimento pelo menos 2. Dada uma String não vazia como entrada, sua tarefa é gerar todos os polyphthongs que ele contém .
Por exemplo, "abeoic"
possui as seguintes fatias contíguas (separadas por espaço):
a b e o i c ab be eo oi ic abe beo eoi oic abeo beoi eoic abeoi beoic abeoic
Removendo aqueles que contêm algo além de vogais ou que têm comprimento menor que 2, obtemos os polifongues desejados:
eo oi eoi
Seus envios devem obedecer às seguintes regras:
Você pode escolher minúsculas ou maiúsculas para E / S, mas o caso de saída deve corresponder ao caso de entrada.
As vogais são
aeiou
(para minúsculas) eAEIOU
(para maiúsculas).y
/Y
não é considerado uma vogal.A entrada conterá apenas ASCII imprimível.
Se um polifongo aparecer várias vezes, você pode escolher produzi-lo apenas uma vez ou todas as suas ocorrências.
Qualquer formato e método de E / S razoáveis são permitidos (listas de caracteres também são boas, tanto para entrada quanto para saída).
Casos de teste
Entrada -> Saída (minúscula) r67 ^^ () * 6536782! 87 -> [] quebra-cabeças de programação e código de golfe -> [] aaand ... eu ganhei! -> ['aa', 'aa', 'aaa'] abeoic -> ['eo', 'oi', 'eoi'] yah eioo ala -> ['ei', 'io', 'oo', 'eio', 'ioo', 'eioo'] @yabeeeayio__e -> ['ee', 'ee', 'ea', 'io', 'eee', 'eea', 'eeea'] 0ioen0aaiosnjksd -> ['io', 'oe', 'aa', 'ai', 'io', 'ioe', 'aai', 'aio', 'aaio']
Observe que, nos casos de teste 3 e 6, você pode produzir 'aa'
e, 'ee'
respectivamente, apenas uma vez (consulte a quarta regra).
Este é o código-golfe , o menor envio em bytes em todos os idiomas vence!
'aa'
aparece duas vezes. É necessário produzir a mesma sequência várias vezes se ela aparecer em vários locais ou é possível produzir apenas polifongos exclusivos?Respostas:
Python 2 ,
10297 bytesgraças a @ JonathanFrech por -5 bytes
Experimente online!
E / S minúscula
fonte
...AEIOU'
, pois você pode receber apenas letras minúsculas como entrada.print([w[a:b]for a in l for b in l[a+2:]if{*w[a:b]}<={*'aeiou'}])
trabalha para 93.JavaScript (ES6),
7775 bytesEspera entrada em minúsculas. Produz polifongos exclusivos sem repetir.
Casos de teste
Mostrar snippet de código
Quão?
Criamos recursivamente a árvore de todos os polifongos possíveis, removendo ramificações assim que o nó atual não estiver mais contido na entrada e salvando todos os nós correspondentes de pelo menos 2 caracteres.
fonte
Retina ,
2320 bytesExperimente online!
Isso imprime todas as ocorrências de um polifongo.
Explicação
O Retina tem uma maneira de obter todas as correspondências sobrepostas , mas o que isso realmente significa é que procurará uma correspondência de cada posição. Portanto, se houver várias correspondências da mesma posição, isso retornará apenas uma delas. A única maneira de realmente obter todas as correspondências sobrepostas é usar esse recurso duas vezes, uma vez correspondendo da esquerda para a direita e outra da direita para a esquerda (para que possamos obter a correspondência mais longa possível de cada posição inicial possível e, em seguida, também obteremos todas as correspondências para as possíveis posições finais).
Então, o programa atual:
Obtenha todas as execuções de vogais sobrepostas. O que isso realmente significa é obter todos os sufixos de todas as execuções de vogal.
Agora obtenha todos os prefixos que tenham pelo menos o comprimento 2, correspondendo da direita para a esquerda. O
M
está implícito aqui, porque é a linha final do programa.fonte
!&`[aeiou]{2,}
está tão perto de corrigir , existe uma maneira de torná-lo mais ganancioso para que ele corresponda contraio
?&
pode fazer é tentar uma correspondência de cada posição, para que você não possa ter várias correspondências de comprimento diferente na mesma posição. É por isso que eu preciso de um segundo estágio.QuadS , 20 + 1 = 21 bytes
com a
o
bandeiraExperimente online!
Para que as coisas aconteçam:
[aeiou]+
em cada partida deste PCRE,\⍵M
prefixos da partida1↓
solte a primeira (que possui uma vogal),/⍵
concatenar todas as listas de prefixos⊃
divulgar (porque as reduções/
incluem)Isso é equivalente à função tácita Dyalog APL:
Experimente online!
fonte
Mathematica, 92 bytes
Experimente online!
fonte
Java (OpenJDK 8) ,
138135134 bytesExperimente online!
fonte
i<y-1
pode seri<=y
eString#matches
verifica implícita toda a String, para que você não precise do^
e$
. 1 por me vencer, no entanto. Estava prestes a postar minha própria resposta de 138 bytes (mas com essas alterações, propus que a sua seja mais curta). :)J ,
3429 bytesExperimente online!
fonte
Geléia , 9 bytes
Experimente online!
Explicação
-4 bytes graças ao Sr. Xcoder
fonte
L>1$$
porL’$
.L’$
comḊ
a 9 bytes . Um equivalente seriaẆṫLḊḟÐḟØc
.C (gcc) , 104 bytes (99 bytes apenas em minúsculas ou maiúsculas)
Sim, vaza - e daí?
Experimente online!
fonte
#include
e você só precisa manipular uma letra maiúscula para reduzi-lo para 80 bytes.R , 137 bytes
superado por Mark !
Experimente online!
fonte
unique
.Perl 5, 53 +1 (-p)
Experimente Online
fonte
PowerShell ,
9388 bytesExperimente online!
Usa E / S em minúsculas ou maiúsculas (ou uma mistura!).
Toma emprestado o código da minha resposta em Substrings explodidas para obter todas as subseqüências e, em seguida, retira aquelas que regex
-match
contra^[aeiou]{2,}$
- ou seja, aquelas que têm pelo menos duas vogais de comprimento e apenas vogais. Essas strings são deixadas no pipeline e a saída é implícita.fonte
Haskell ,
148137130123 123118 bytesGraças a @Laikoni por -11 bytes, mais -7 bytes, apontando-me para dicas de golfe, outros -7 bytes e ainda outros -5 bytes, para um total de -30 bytes.
Isso pareceu um bom ajuste para Haskell, mas o resultado não parece concordar.Eu acho que Haskell era uma boa escolha, afinal. Ainda estou irritado com a maneira comosubsequences
funciona.Experimente online!
fonte
;
, mas aumentam a legibilidade do código. Você sempre usae
junto comv
, para poder declarare=(
elem diretamente"aeiou")
.y!!0
é mais curto quehead y
. Existe emconcatMap
vez deconcat.map
, mas ainda menor é(=<<)
da lista mônada que tem o mesmo efeito.Data.Lists
vez deData.List
. O primeiro tem todas as funções do último, mas também coisas adicionais, comopowerslice
, que fornece uma lista de todas as subsequências contínuas.y@(h:_:_)
cairlength y>1
e encurtarv(y!!0)
av h
.(\x y->v x&&v y)
pode ser encurtado convertendo para sem pontos, usando manualmente essa dica ou usando o pointfree.io . (2) A mônada da lista também pode ser usada com ado
notação, ou seja,do x<-l;[...]
é a mesma quel>>=(\x->[...])
. Aliás, no TIO, você pode colocá-lomain
no campo de cabeçalho ou rodapé para que a contagem de bytes corresponda ao envio real.Perl, 45 bytes
fonte
R ,
120 bytes110 bytesExperimente online!
Como funciona
fonte
C, 119 bytes
Experimente online!
fonte
JavaScript (ES6), 105 bytes
Provavelmente ainda resta muito golfe para fazer.
fonte
Perl 5 , 44 + 1 (
-n
) = 45 bytesExperimente online!
fonte
05AB1E , 10 bytes
Experimente online!
Explicações:
fonte
ŒʒžMм_}ʒg≠
ŒD1ùKʒžMм_
por 10 bytes. Eu estou tentando encontrar uma maneira de jogar golfeC,
10575 bytesUma função que aceita um ponteiro para entrada em minúscula e produz seqüências separadas por espaço na saída padrão:
Programa de teste
Demo
Explicação
Usando o GCC no Debian Linux, pareço me safar com as declarações implícitas incompatíveis de
strchr()
eprintf()
. Outras plataformas podem exigir<stdio.h>
e<string.h>
ser incluídas.Experimente online (requer Javascript).
fonte
f(p)char*p;
serf(char*p)
?f(s,d)char*s,*d
.APL (Dyalog) , 53 bytes
Este é um
Dfn
( d espirre f unctio n ). O uso ép '<argument>'
. Aviso justo: isso não é muito eficiente einput > 8 characters
atinge o tempo limite no TIO, mas funciona normalmente quando é dado tempo suficiente.Experimente online!
Obrigado a @ Adám por 16 bytes!
Como funciona:
Isso é mais fácil de entender se quebrarmos o código em partes menores:
G←⊃,/{(,v∘.,⊢)⍣⍵⊢v←'aeiou'}¨⍳≢1↓⍵
: Esta parte da função pega o comprimento do argumento (à direita) e mistura o vetoraeiou
consigo mesmo várias vezes, produzindo todas as combinações possíveis de[2, length(right arg)]
vogais.(G∊⊃,/⌽,\∘⌽¨,\⌽⍵)/
: Esta parte verifica quais elementos de G são membros das substrings da entrada. Isso retorna um vetor booleano, com1
s nos índices das combinações de vogais que estão presentes na entrada e0
onde eles não estão. O vetor resultante é então mapeado (/
)G
, retornando os elementos correspondentes aos valores de verdade.A coisa toda é então atribuída
p
.p←
não é incluído na contagem de bytes porque não é necessário , apenas facilita o uso da função.fonte
⊆
para filtrar. Use/
.Haskell , 74 bytes
Experimente online!
fonte
Ruby 2.4, 100 bytes
Esta é minha primeira tentativa de jogar golfe e tenho certeza de que há várias maneiras de diminuir esse código.
fonte
Ruby , 80 bytes
Experimente online!
fonte
.compact
pode ser-[nil]
Pitão , 15 bytes
Experimente online!
Definitivamente jogável, quero melhorar antes de escrever uma explicação.
fonte
T-SQL (SQL Server 2014), 281 bytes
Entrada dada por
Usa uma expressão de tabela comum
s
para separar a entrada em letras individuais ordenadas e, em seguida, uma segunda expressão de tabela comumc
para gerar todas as combinações ordenadas, jogando fora não vogais.SQL Fiddle
fonte
PHP, 139 bytes
Demonstração online
Como funciona
Selecione as sub-strings (começando com o comprimento de 2) que consistem em caracteres adjacentes e mova-as ao longo da string. Colete quaisquer sub-strings que contenham apenas vogais. Repita com sub-strings mais longas.
Para a string 'abcdef', estas são as substrings geradas e verificadas:
fonte