O teorema do macaco infinito afirma que, com tempo infinito, uma máquina que envia um fluxo interminável de caracteres aleatórios sempre digita qualquer texto.
Isso me parece uma ótima idéia para um desafio.
Processo
Para fazer o macaco de uma string A, as seguintes etapas devem ser seguidas:
- Pegue uma corda vazia. Vamos chamar essa string B.
- Escolha um caractere ASCII imprimível uniformemente aleatório (caracteres no intervalo
0x20
para0x7E
) e adicione esse caractere a B. - Se A é uma subcadeia de caracteres de B, B é a nossa string izacizada. Caso contrário, repita a etapa 2 até A ser uma subcadeia de B.
Esse processo é apenas um exemplo. Podem existir métodos mais fáceis, dependendo do seu idioma. Você não precisa seguir esse método exatamente, desde que a mesma distribuição de saídas seja alcançada.
O desafio
Escreva um programa ou função que, dada uma string não vazia em qualquer formato razoável , retorne uma versão em macaco dessa string.
Seu programa precisa trabalhar praticamente para entradas de comprimento 3 ou menos. Para entradas mais longas, é permitido terminar cedo com ou sem gerar nada.
Exemplo
Infelizmente, é meio difícil criar exemplos para essa pergunta devido à natureza aleatória e aos grandes resultados.
No entanto, posso fornecer um único exemplo para a entrada hi
, no Hastebin.
Pontuação
Como se trata de código-golfe , a submissão com o menor número de bytes vence.
B
diretamente adicionando um número não negativon
de caracteres aleatórios aA
. O único verdadeiro problema então é saber a distribuição den
(aposta I em uma distribuição geométrica).W!}zH+ZOrd\k
, se parecem muito com o que um macaco digitou.Respostas:
C, 192 bytes
Experimente online!
Agora está uma bagunça, mas pelo menos funciona mesmo nos casos de canto ...
C,636261 bytesAgradecemos a Jonathan Frech por salvar um byte!
Experimente online!fonte
i
cresce o suficiente, ques[i]
se refere ao terminador nulo da string (caractere 0).ababc
e o monkey generate!!abababc
irá interromper seu programa?Python , 79 bytes
Experimente online!
Teoricamente, isso é bom, mas falhará cedo devido aos limites de recursão do python (você pode configurá-los ainda mais para obter resultados mais longos)
Python, 84 bytes
Experimente online!
Este deve funcionar para cadeias relativamente maiores, já que não depende de recursão, ao custo de 5 bytes.
fonte
s+'randint(32,126)'
randint(32,126)
produziria uma série do número, o mapeamento não ASCII de charOhm v2 , 10 bytes
Experimente online!
Explicação:
fonte
GNU sed + coreutils, 75 + 1 (sinalizador r) = 76 bytes
Experimente online! (São necessárias muitas execuções para obter uma resposta para uma entrada de comprimento 2, porque na maioria das vezes você fica sem o tempo permitido de computação do TIO.)
Explicação:
Referência: aproximada, apenas para fins de dimensionamento
fonte
Funky , 64 bytes
Isso usa alguns truques que eu estava querendo usar no Funky, como um nome de variável após uma palavra-chave como em
whileS
, e usando o fato de que as seqüências implicitamente são originárias dastring
biblioteca.Ungolfed
Experimente online!
fonte
Haskell , 100 bytes
Experimente online!
A idéia básica é gerar uma lista infinita de caracteres
randomRs
e pará-la quando encontrarmos a string.fonte
isPrefixOf
não está no Prelude padrão ...C # (.NET Core) , 86 bytes
Não gosto muito da criação da
Random
instância, mas acho que não há uma maneira de contornar isso.Experimente online!
fonte
Random.Next(Int32,Int32)
é exclusivo e, portanto, não é um dos números gerados. Isso pode ser corrigido substituindo126
por127
.Random
, você pode remover a declaração da variável! 79 bytesPerl 5, 31 +2 (-pa) bytes
Experimente online
fonte
\E$
é estranhoJaponês , 26 bytes
Experimente online!
fonte
R ,
797675 bytes-3 bytes graças ao MickyT por alterar o amostrador aleatório
-1 byte graças a Robin Ryder por ajustar o amostrador aleatório novamente
Experimente online!
fonte
intToUtf8(runif(1,32,127))
32+95*runif(1)
como seu amostrador aleatório.Carvão,
151412 bytesExperimente online! Link é a versão detalhada do código. Editar: salvou 2 bytes devido a uma correção de bug subsequente no carvão vegetal. Explicação:
fonte
Ruby , 42 bytes
Experimente online!
fonte
Pitão - 14 bytes
Experimente online aqui .
fonte
W!}Qk=+kpOrd\
é de 14 bytes, bem como, SE sujam com a formatação por causa de não imprimível mas gama é gerada da mesma maneiraMathematica, 65 bytes
Experimente online!
-3 bytes de Jonathan Frech
fonte
FromCharacterCode[RandomInteger@94+32]
é equivalente ao menorRandomChoice@CharacterRange[32,126]
.Lua ,
99102 bytesExperimente online!
fonte
MATL ,
1716 bytesExperimente online!
-1 byte graças a Giuseppe
fonte
Oitava , 62 bytes
Experimente online!
Explicação:
Muito obrigado a Luis Mendo pelas edições!
fonte
isvector
pornnz
? Estrfind
porregexp
. Além disso, você pode usarrandi(95)+31
, ou talvez substituir toda asprintf
declaraçãoo=[o,randi(95)+31];
(conversão implícita para Char)Japonês ,
161411 bytesTente
fonte
Alice , 21 bytes
Experimente online!
Explicação
Essa é a estrutura para programas principalmente lineares que operam inteiramente no modo Ordinal (processamento de string). O IP salta diagonalmente para cima e para baixo no programa duas vezes, o que significa que o código real é um pouco estranhamente intercalado. Os comandos na ordem em que são realmente executados são:
Vamos passar por isso:
fonte
Perl 6 , 39 bytes
Experimente online!
(...)[*-1]
retorna o último elemento da sequência definida por...
, dos quais:""
é o primeiro elemento;* ~ (" " .. "~").pick
gera o próximo elemento anexando um caractere aleatório no intervalo apropriado ao elemento anterior; e* ~~ /$_/
é a condição final, que é o elemento atual que corresponde ao argumento de entrada da função principal$_
como uma substring literal.fonte
*~~
para -3 tio.run/##K0gtyjH7n1upoJamYPu/…Java 8,
817978 bytes-1 byte graças a @ OlivierGrégoire por me indicar um (grande>. <) Erro que cometi ..
Explicação:
Experimente aqui.
fonte
32+Math.random()*95
. Aí ... bug corrigido e um byte salvo! ;-)05AB1E ,
109 bytes (-1 @ Emigna)Experimente online!
Faça o macaco comigo.
fonte
Ω
vez de.R
.QBIC , 33 bytes
Explicação
Exemplo de execução:
fonte
PHP, 55 + 1 bytes
Corra como cano com
-nR
. Não é adequado para a causa do TIO de provável tempo limite.Insira um espaço entre aspas para PHP anterior a 7.1.
este versão de 51 + 1 bytes falhará se a entrada for
0
:fonte
Javascript 74 bytes
chame assim:
fonte
~b.search
vez deb.includes
.Julia 0.6 , 53 bytes
Experimente online!
fonte
Pushy ,
2018 bytesExperimente online!
O programa mantém os
len(input)
caracteres de uma pilha de comprimento e remove constantemente o primeiro e anexa um novo caractere aleatório, até que a string de entrada inicial seja atingida. Cada caractere é impresso à medida que é adicionado, criando o efeito desejado.Explicação:
fonte
Braquilog , 17 bytes
Experimente online!
Pode empilhar aleatoriamente o estouro. Isso utiliza dois recursos recentemente adicionados ao Brachylog: variáveis globais e o metapredicado de aplicar à cauda
ᵗ
.fonte
Pitão, 13 bytes
onde o caractere não imprimível é 0x7F.
Teste
fonte
Bash 94 bytes
Experimente online
fonte