Dada uma cadeia de entrada, de saída que string com todas as vogais a
, e
, i
, o
e u
trocou de forma aleatória entre si.
Por exemplo, na seqüência this is a test
, há 4 vogais: [i, i, a, e]
. Um embaralhamento válido dessas vogais poderia, [a, i, e, i]
portanto, produzir a saída thas is e tist
.
Sobre embaralhar
Todos os shuffles devem ser igualmente prováveis se considerarmos que vogais iguais são distintas . Para o exemplo acima, esses 24 shuffles são possíveis:
[i 1 , i 2 , a, e] [i 1 , i 2 , e, a] [i 1 , a, i 2 , e] [i 1 , a, e, i 2 ] [i 1 , e, i 2 , a] [i 1 , e, a, i 2 ] [i 2 , i 1 , a, e] [i 2 , i 1 , e, a] [i 2 , a, i 1 , e] [i 2 , a, e, i 1 ] [i 2 , e, i 1 , a] [i 2 , e, a, i 1 ] [a, i 1 , i 2 , e] [a, i 1 , e, i 2 ] [a, i 2 , i 1 , e] [a, i 2 , e, i 1 ] [a, e, i 1 , i 2 ] [a, e, i 2 , i 1 ] [e, i 1 , i 2 , a] [e, i 1 , a, i 2 ] [e, i 2 , i 1 , a] [e, i 2 , a, i 1 ] [e, a, i 1 , i 2 ] [e, a, i 2 , i 1 ]
Cada um deve ser igualmente provável.
Você não pode tentar embaralhar aleatoriamente toda a cadeia até encontrar uma onde todas as vogais estejam no lugar certo. Em resumo, o tempo de execução do seu código deve ser constante se a entrada for constante.
Entradas e saídas
Você pode assumir que todas as letras da entrada serão minúsculas ou maiúsculas. Você também pode oferecer suporte a maiúsculas e minúsculas, embora isso não lhe dê nenhum bônus.
A entrada sempre consistirá em caracteres ASCII imprimíveis. Todos os caracteres que estão na entrada devem estar na saída, apenas as vogais devem ser embaralhadas e nada mais.
A entrada pode estar vazia. Não há garantia de que a entrada contenha pelo menos uma vogal ou pelo menos uma não vogal.
Você pode obter a entrada de
STDIN
, como um parâmetro de função, ou qualquer coisa semelhante.Você pode imprimir a saída
STDOUT
, retorná-la de uma função ou algo semelhante.
Casos de teste
A primeira linha é a entrada fornecida. A segunda linha é uma das saídas possíveis.
<empty string>
<empty string>
a
a
cwm
cwm
the quick brown fox jumps over the lazy dog.
tho qeuck brewn fax jumps ovir the lozy dog.
abcdefghijklmnopqrstuvwxyz
abcdefghujklmnipqrstovwxyz
programming puzzles & code golf
pregromming pezzlos & coda gulf
fatalize
fitaleza
martin ender
mirten ander
Pontuação
Isso é código-golfe , para que usuários logistas e bytes ganhem .
fonte
y
como vogal ..;)y
uma vogal, mas no último desafio em que eu disse quey
era uma vogal, me perguntaram por que escolhi isso!Respostas:
Gelatina , 15 bytes
Experimente online!
Como funciona
fonte
/usr/share/dict/words
do meu computador e o incluí no interpretador de geléia.R,
9291Ainda não posso comentar, por isso estou adicionando minha própria resposta, embora muito parecida com a resposta @ Andreï Kostyrka (acredite ou não, mas veio com ela de forma independente).
Ungolfed
Guardou um byte graças a @Vlo
fonte
s=strsplit(readline(),"")[[1]];s[v]=sample(s[v<-s%in%c("a","e","i","o","u")]);cat(s,sep="")
el()
vez de[[1]]
.R,
999889 bytesParece ser a primeira solução legível por humanos! Obrigado a Giuseppe por salvar 9 bytes!
Casos de teste:
Parece que não há como fazer uma atribuição interna de variável (interna, como,
cat
) e, novamente, algumas pessoas vão provar que estou errado ...fonte
letters[c(1,5,9,15,21)]
é 1 byte mais longo, e OEIS A161536 e A215721 também parecem ter pouca ou nenhuma ajuda.z=grepl("[aeiou]",x)
seria mais curto?CJam, 23 bytes
Experimente online!
Explicação
fonte
05AB1E , 17 bytes
Explicação
Experimente online!
fonte
Python 3, 109 bytes
Suporta apenas vogais em minúsculas.
Agradecemos a @Alissa por salvar um byte extra.
Ideone it!
fonte
a.pop(random.randrange(0,len(a)))
, em vez de baralhar umTSQL, 275 bytes
Golfe:
Ungolfed:
Violino
fonte
Perl, 38 bytes
Inclui +1 para
-p
Corra com a frase em STDIN
vawols.pl
:fonte
Java 7,
243241 bytesSim, isso provavelmente pode ser bastante praticado, mas o Java não possui nenhum recurso útil para esse afaik .. Além disso, eu meio que esqueci a variante de array codificada para
Collections.shuffle
..Casos não testados e de teste:
Experimente aqui.
Saída possível:
fonte
i
no segundo loop?Arrays.shuffle
me parou ali ...import java.util.*;String c(char[]z){List l=new ArrayList();int i=0,j=z.length;for(;i<j;i++)if("aeiou".indexOf(z[i])>=0){l.add(z[i]);z[i]=0;}Collections.shuffle(l);String r="";for(i=0;i<j;i++)r+=z[i]<1?(char)l.remove(0):z[i];return r;}
Perl 6 , 65 bytes
Função anônima. Pressupõe entrada em letras minúsculas.
( experimente online )
fonte
Ruby 45 + 1 = 46 bytes
+1 byte para
-p
sinalizadorfonte
Braquilog , 39 bytes
Experimente online!
Explicação
Predicado principal:
Predicado 1:
Predicado 2:
fonte
Javascript (ES6),
7876 bytesEconomizou 2 bytes graças a apsillers
Versão alternativa proposta pelos apsillers (76 bytes também)
Teste
fonte
l=...
inteiramente e use a função bound[].pop.bind(s.match(r).sort(_=>Math.random()-.5)))
como o segundo argumento parareplace
(em vez de uma função de seta). Talvez haja uma melhoria nesse caminho, mas ainda não a encontrei. Se você usou uma linguagem JS-superconjunto que possui o operador de ligação::
, acho que você poderia fazer(s.match(r).sort(_=>Math.random()-.5)))::pop
.MATL , 15 bytes
Experimente online!
Explicação
fonte
Japt v2.0a0,
1413 bytesTente
Explicação
fonte
Pitão, 26 bytes
Um programa que recebe a entrada de uma sequência de caracteres citada e imprime a sequência aleatória.
Experimente online
Como funciona
fonte
PHP,
144129 bytesUsando entrada em minúscula
Explicação:
fonte
Na verdade, 24 bytes
Experimente online!
Explicação:
fonte
Bash, 75 bytes
Pega a string como argumento e imprime o resultado em stdout.
Por exemplo
impressões
fonte
Bash, 89
Supõe que todas as entradas sejam minúsculas.
fonte
PowerShell v3 +,
15599 bytesGrandes adereços para Ben Owen para o golfe de 56 bytes
Recebe entrada
$n
, esperando todas as letras minúsculas, lança-a imediatamente como umachar
matriz.Nós canalizamos isso em uma
Where-Object
cláusula para extrair os elementos que-match
uma vogal, canalizamosSort-Object
com{Get-Random}
o mecanismo de classificação. ChamarGet-Random
sem qualificadores retornará um número inteiro entre0
e[int32]::MaxValue
- ou seja, atribuir pesos aleatórios a cada elemento em tempo real. Armazenamos as vogais aleatórias em$a
.Finalmente, nós passamos
$n
. Para cada elemento,|%{...}
se o caractere atual estiver em algum lugar-in
$a
, enviaremos o próximo elemento para$a
pós-incremento$i
da próxima vez. Caso contrário, produzimos o caractere atual. Tudo isso é encapsulado em parênteses e edificado-join
em uma string. Essa string é deixada no pipeline e a saída é implícita na conclusão do programa.Casos de teste
fonte
$n
os caracteres de e correspondendo em cada vogal para produzir achar
matriz de vogais. Algo como:$a=[char[]]$n|?{$_-match'[aeiou]'}|sort{random}
$a
.Python 3, 106 bytes
Apenas em minúsculas.
fonte
PHP> = 5.3 ,
139136 bytes (e nenhum erro foi lançado)fonte
K (oK) , 29 bytes
Solução:
Experimente online!
Exemplos:
Explicação:
Encontre os locais das vogais e substitua-os pelas vogais desenhadas em uma ordem aleatória.
fonte
APL (Dyalog Unicode) , 21 bytes
Experimente online!
Assume maiúsculas.
fonte
{⍵∊'AEIOU'}
→∊∘'AEIOU'
trabalho?({⍵[?⍨≢⍵]}@∊)∘'AEIOU'
.Kotlin ,
122118 bytesExperimente online!
fonte