São muitos macacos

35

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:

  1. Pegue uma corda vazia. Vamos chamar essa string B.
  2. Escolha um caractere ASCII imprimível uniformemente aleatório (caracteres no intervalo 0x20para 0x7E) e adicione esse caractere a B.
  3. 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 , a submissão com o menor número de bytes vence.

LyricLy
fonte
Sandbox
LyricLy
11
Precisamos seguir o procedimento descrito para produzir a saída? Se sim, esse é um requisito não observável , o que é problemático. Caso contrário, podemos gerar Bdiretamente adicionando um número não negativo nde caracteres aleatórios a A. O único verdadeiro problema então é saber a distribuição de n(aposta I em uma distribuição geométrica)
Luis Mendo
11
@seshoumara Você não pode.
LyricLy
7
@LuisMendo Pensei nesse sentido, e na verdade não é fácil gerar o prefixo diretamente. Ele não pode conter a sequência de destino, incluindo cruzar o limite onde ela encontra a sequência anexada. E a distribuição dos comprimentos dos prefixos depende não apenas do comprimento da cadeia de destino, mas também de sua estrutura.
Xnor
10
Alguns dos programas de solução abaixo, como, por exemplo .W!}zH+ZOrd\k, se parecem muito com o que um macaco digitou.
Jeppe Stig Nielsen

Respostas:

12

C, 192 bytes

i;g(s,b,i,n,j)char*s,*b;{for(b[i+1]=0;b[n+j];++n)s[n]-b[n+j]&&(n=-1,++j);return n;}f(char*s){char*b=calloc(strlen(s),1);for(i=0;s[i];)i=(b[i]=putchar(rand()%95+32))-s[i]?i?g(s,b,i,0,0):0:i+1;}

Experimente online!

Agora está uma bagunça, mas pelo menos funciona mesmo nos casos de canto ...


C,  63   62  61 bytes

Agradecemos a Jonathan Frech por salvar um byte!

i;f(char*s){for(i=0;s[i=putchar(rand()%95+32)-s[i]?0:i+1];);}

Experimente online!

Steadybox
fonte
Eu não tenho absolutamente nenhuma idéia porque este pára quando bate é, +1
Ataco
11
@ATaco Para quando icresce o suficiente, que s[i]se refere ao terminador nulo da string (caractere 0).
Steadybox 5/11
Ah, então, em vez de jogar caracteres aleatórios nele até que s seja criado acidentalmente, ele lança caracteres aleatórios nele até atingir s. Inteligente.
ATaco 5/11
Por mais que eu goste desta resposta, acredito que quebra para uma entrada como "ab" quando os macacos rand digitam "aab".
Zennehoy 6/11
Eu acho que você precisa de algo como o KMP para que essa abordagem possa ser válida. Suponha que a string de entrada seja ababce o monkey generate !!abababcirá interromper seu programa?
user202729
9

Python , 79 bytes

f=lambda x,s='':x in s and s or f(x,s+chr(randint(32,126)))
from random import*

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

from random import*
x,s=input(),''
while x not in s:s+=chr(randint(32,126))
print(s)

Experimente online!

Este deve funcionar para cadeias relativamente maiores, já que não depende de recursão, ao custo de 5 bytes.

Uriel
fonte
Você pode salvar três bytes usando backticks para fazer a conversão string (mostrado aqui como aspas simples ao da remarcação direita)s+'randint(32,126)'
wnnmaw
11
@wnnmaw backticked randint(32,126)produziria uma série do número, o mapeamento não ASCII de char
Uriel
8

Ohm v2 , 10 bytes

Ý£D³ε‽α@§↔

Experimente online!

Explicação:

Ý£D³ε‽α@§↔  Main wire, arguments: a (string)

Ý           Push empty string to top of stack
 £          Start infinite loop
  D³ε‽        If a is a substring of the ToS, break out of the loop
      α@§     If not, select a random printable ASCII character...
         ↔    ...and concatenate it with the ToS
Nick Clifford
fonte
8

GNU sed + coreutils, 75 + 1 (sinalizador r) = 76 bytes

h
:
s:.*:shuf -i32-126|dc -e?P:e
H;g
s:\n::2g
/^(.+)\n(.*)\1/{s::\2\1:;q}
b

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:

h                                # copy input string 'A' to hold space
:                                # start loop
    s:.*:shuf -i32-126|dc -e?P:e # run shell script: shuf outputs a rnd permutation
                                 #of the set of numbers from 32 to 126, and '?P' in
                                 #dc converts the 1st read decimal to an ASCII char
    H;g                          # append char to hold space ('A\n.'), then copy
                                 #result back to pattern space
    s:\n::2g                     # remove all '\n's from pattern space, but first
    /^(.+)\n(.*)\1/{             # if pattern is 'A\n.*A' (A substring of B), then
        s::\2\1:;q               # search previous regex used and leave only '.*A',
                                 #then quit (implicit printing before exit)
    }
b                                # repeat loop

Referência: aproximada, apenas para fins de dimensionamento

  • comprimento de entrada: 1, 10 entradas aleatórias (execuções), tempo médio: <1 s
  • comprimento de entrada: 2, 10 entradas aleatórias (execuções), tempo médio: 90 s
  • comprimento da entrada: 3, 10 entradas aleatórias (execuções), tempo médio: muitas horas!
seshoumara
fonte
7

Funky , 64 bytes

s=>{S=""whileS::sub((#S)-#s)!=s S+=S.char(math.random(32,126))S}

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 da stringbiblioteca.

Ungolfed

function monkey(target){
    monkeyCode = ""
    while (monkeyCode::sub((#monkeyCode)-#target)!=target){
        monkeyCode += string.char(math.random(32,126))
    }
    monkeyCode
}

Experimente online!

ATaco
fonte
6
Então isso seria ... Macacos descolados?
Sebastian Lenartowicz
7

Haskell , 100 bytes

import System.Random
s#(a:b)|and$zipWith(==)s$a:b=s|1>0=a:s#b
m a=(a#).randomRs(' ','~')<$>newStdGen

Experimente online!

A idéia básica é gerar uma lista infinita de caracteres randomRse pará-la quando encontrarmos a string.

user1472751
fonte
A vergonha isPrefixOfnão está no Prelude padrão ...
Bergi
7

C # (.NET Core) , 86 bytes

a=>{var b="";for(var r=new Random();!b.Contains(a);b+=(char)r.Next(32,127));return b;}

Não gosto muito da criação da Randominstância, mas acho que não há uma maneira de contornar isso.

Experimente online!

Wakawakamush
fonte
3
Bem-vindo ao PPCG! Atualmente, sua solução não gera corretamente um caracter aleatório, pois, de acordo com os documentos , o limite superior passado Random.Next(Int32,Int32)é exclusivo e, portanto, não é um dos números gerados. Isso pode ser corrigido substituindo 126por 127.
0 '
@ 0 'Opa, pensei nisso enquanto escrevia, mas esqueci de verificar antes de postar. Obrigado!
Wakawakamush
Existe realmente uma maneira de contornar esse tempo Random, você pode remover a declaração da variável! 79 bytes
FlipTack 9/17
@FlipTack Interessante, tentei isso em C # Interactive e não funcionou porque continuava gerando o mesmo número. Estranho ver que ele funciona no TIO.
Wakawakamush
6

Perl 5, 31 +2 (-pa) bytes

}{$_.=chr 32+rand 95until/\Q@F/

Experimente online

Nahuel Fouilleul
fonte
Você pode salvar 3 bytes desde o \E$é estranho
Zaid
de fato, obrigado por ter notado
Nahuel Fouilleul 8/11
salvou mais 2 bytes
Nahuel Fouilleul 8/11
Isso é sorrateiro. Very nice indeed :)
Zaid
e ainda mais, -3bytes
Nahuel Fouilleul 8/11
6

R , 79 76 75 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

function(S){G=""
while(!grepl(S,G))G=paste0(G,intToUtf8(32+95*runif(1)))
G}

Experimente online!

Giuseppe
fonte
oi, sua amostra pode ser substituída porintToUtf8(runif(1,32,127))
MickyT 6/17/17
@MickyT excelente, obrigado!
Giuseppe
Você pode economizar 1 byte 32+95*runif(1)como seu amostrador aleatório.
Robin Ryder
6

Carvão, 15 14 12 bytes

W¬№ωθ≔⁺ω‽γωω

Experimente 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:

    θ           Input string
   ω            Predefined variable `w`
  №             Count number of occurrences
 ¬              Logical not
W               Loop while true
       ω        Predefined variable `w`
      ⁺         Concatenated with
         γ      Predefined printable characters
        ‽       Random element
     ≔    ω     Assign to predefined variable `w`
           ω    Predefined variable `w`
                Implicitly print
Neil
fonte
5

Ruby , 42 bytes

->w,s=""{s+=[*" "..?~].sample;s[w]?s:redo}

Experimente online!

Restabelecer Monica iamnotmaynard
fonte
4

Pitão - 14 bytes

.W!}zH+ZOrd\k

Experimente online aqui .

Maltysen
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 maneira
Dave
4

Mathematica, 65 bytes

""//.x_/;x~StringFreeQ~#:>x<>RandomChoice@CharacterRange[32,126]&

Experimente online!

-3 bytes de Jonathan Frech

J42161217
fonte
Eu acho que FromCharacterCode[RandomInteger@94+32]é equivalente ao menor RandomChoice@CharacterRange[32,126].
Jonathan Frech
@JonathanFrech sim, é!
precisa saber é o seguinte
4

Lua , 99 102 bytes

  • Salvou um bug graças ao ATaco , que adicionou três bytes.
function f(B)s=string S=""while not(s.find(S,B,1,1))do S=S..s.char(math.random(32,126))end print(S)end

Experimente online!

Jonathan Frech
fonte
4

Oitava , 62 bytes

t=input(o="");while(~nnz(regexp(o,t)))o=[o,randi(95)+31];end;o

Experimente online!

Explicação:

t=input(o="");               % get stdin and define output
while(~nnz(regexp(o,t)))     % while no matches
    o=[o,randi(95)+31];      % concatenate string with ascii char
end;                            
o                            % output result

Muito obrigado a Luis Mendo pelas edições!

Alan
fonte
11
Bem vindo ao site! :)
DJMcMayhem
Você não pode substituir isvectorpor nnz? E strfindpor regexp. Além disso, você pode usar randi(95)+31, ou talvez substituir toda a sprintfdeclaração o=[o,randi(95)+31];(conversão implícita para Char)
Luis Mendo
Além disso, nós normalmente requerem uma função ou um programa que tem a sua entrada (em oposição a definir uma variável que contém a entrada) - algo parecido com isso
Luis Mendo
Tentei fazer isso, mas não consegui pensar de maneira concisa, então pulei. Revisões agradáveis!
Alan
11
Sinta-se à vontade para incorporar essas sugestões em sua resposta. Isso é padrão neste site
Luis Mendo
4

Japonês , 16 14 11 bytes

;_øU}a@P±Eö

Tente

Shaggy
fonte
3

Alice , 21 bytes

/U!?"$~dr@
\idwz K"o/

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:

i!w" ~"rUd?z$Kdo

Vamos passar por isso:

i       Read all input.
!       Store the input on the tape for later.
w       Push the current IP address onto the return address stack.
        This marks the beginning of the main loop.

  " ~"    Push this string.
  r       Range expansion. Turns the string into " !...}~", i.e. a string
          with all printable ASCII characters.
  U       Random choice. Picks a uniformly random character from this
          string. This will remain on the stack throughout the rest of
          the program and will form part of the resulting string.
  d       Join stack. This takes all strings on the stack and joins them
          into a single string and pushes that (it does this without actually
          removing any elements from the stack).
  ?       Retrieve the input from the tape.
  z       Drop. If the joined string contains the input, everything up to
          and including the input will be discarded. Otherwise, nothing
          happens to the joined string. This means that the result will be
          an empty string iff the joined string ends with the input.
$K      If the top of the stack is not empty, jump back to the w to continue
        with another iteration of the main loop.
d       Join the stack into a single string once more.
o       Print it.
Martin Ender
fonte
3

Perl 6 , 39 bytes

{("",*~(" ".."~").pick...*~~/$_/)[*-1]}

Experimente online!

(...)[*-1]retorna o último elemento da sequência definida por ..., dos quais:

  • "" é o primeiro elemento;

  • * ~ (" " .. "~").pickgera 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.

Sean
fonte
Você pode perder o valor *~~para -3 tio.run/##K0gtyjH7n1upoJamYPu/…
Phil H
3

Java 8, 81 79 78 bytes

a->{String b="";for(;!b.contains(a);b+=(char)(32+Math.random()*95));return b;}

-1 byte graças a @ OlivierGrégoire por me indicar um (grande>. <) Erro que cometi ..

Explicação:

Experimente aqui.

a->{                    // Method with String as both parameter and return-type
  String b="";          //  Result-String, starting empty
  for(;!b.contains(a);  //  Loop as long as the result does not contain the input
    b+=(char)(32+Math.random()*95)
                        //   Append a random character to `b`
  );                    //  End of loop
  return b;             //  Return the result-String
}                       // End of method
Kevin Cruijssen
fonte
11
Deveria ser 32+Math.random()*95. Aí ... bug corrigido e um byte salvo! ;-)
Olivier Grégoire
@ OlivierGrégoire Woops .. Observou o código hexadecimal do espaço, mas o decimal regular para o til ..>.> Obrigado por perceber. Não sei como eu perdi que, desde a saída claramente tinha símbolos 'não imprimíveis' ..
Kevin Cruijssen
3

05AB1E , 10 9 bytes (-1 @ Emigna)

[žQΩJD¹å#

Experimente online!


Faça o macaco comigo.


[              | Loop forever.
 žQ            | Push 0x20-0x7E as a single string.
   .R          | Pick from it randomly.
     J         | Join stack (B) with new char.
      D        | Duplicate (B).
       ¹å      | Push input (A) and check if input (A) is in (B).
         #     | If the previous statement is true, break loop.
Urna de polvo mágico
fonte
11
Você pode fazer em Ωvez de .R.
Emigna
2
Lol, usando um Ohm, para vencer o Ohm v2. Quão legal.
Magic Octopus Urn
2

QBIC , 33 bytes

≈instr(Z,;)<1|Z=Z+chr$(_r32,126|)

Explicação

≈instr( , )<1|   WHILE InStr() can't find
         ;        the input (cmd line string argument) as part of
       Z          the output (Z$, which is printed automatically on exit)
Z=Z+             add to the output
chr$(         )  an ASCII character
     _r32,126|   with a random codepoint between 32 and 126 (incl)

Exemplo de execução:

Command line: hi

`;7L3f$qy )H99tZ@>(-Z1efL|Q-5'BE=P8BdX?Lem/fp|G#~WY[ Q4s9r~Af*T})P4`4d$#ud3AiuTwQPFS@8c7_59C$ GlJ%iJ[FA(rNt<y>Hl=r,wSbBB%q!8&#*CixWbnwE."wrZ:R53iKJkN*@hpQt aMj6Mw<KfT@hkik>_k'_>$~3)jl|J!S`n\Yw|lXi:WAKWp?K"F.cAGI/:~uR8*[;Die{]B*]@;Vhjv,$9]Ys:AIdy!j{aXlr:0=txCP-n{/3lgq,;jXaP\]u}.Zl/7eKF+N54[J9^r:>%/.e~*9aK%de>^TW%p%(_uJPvuV%d<&]zu`t;vkEPC>7pofok0Kj}j?9G{TUxSccth)[)J>@'E)NMzA(i!UV7%;$.Z#j3q@#9Q%}<" &VsbL*<SrG-$NC MAQ\`iIT+.P|5}nv )FZl5_.Kc*AUV9u&fvk.USt3Y!s7^UEL{|D$k#k8.9Fgqn#3dgr(0G.gw1#j$HfU3a|)3-O(d<)<A|`%pJ^/\{[w[H4N/>8J@z/YNsU,zY4o*X+h\Dy!~)Xr8.3"%.39v0d5_-8QBYR".Z]MZ}N>9e?f@hj#hor1IhJ[krrHOamRPxQC>^'dOh,cF_e2;8R@K**Jsx_~t9r~4J$Y;kPsb)8w~:o-`@MwP]OA{8yD%gL(=&M>$nTKw] R[}rS|~}&*gD 'g|gRSDLld+`,,}(1=]ao3Z%2*?wlqU$7=$8q$Fig:7n&+XKQ LV/Aq?BYl_*Ak-PqI$U_>`/`-yD5.3|Zg>,mC"RC`IV^szu:I;0ntn(l'/ZnK}T&i)9!zkd?7Ec/X+IN=-5wwsSV@^<?:K=9m%*@C;zDjc%:d>/E@f7@0NVt4Vz/E;8*0A25F1:JUQ/G#2)un9hQI>2^}&+cY+JP*-#$p+cFs}R|>E;w#q>pN"Jkv<>E_ZtCvV05Lh;0 9bCBXgA7aIe+9B1<G)YCH\Yqn.0%g$_4Q4 xIR)gt]W*a|gGX}hP4b)6#M:Dh!kmuX;nW]'n]Mm5y=ET|O9p\,j>Bc|7J5I%UCZla-2g(Mm9cE"}c1Q0@yTF|A\FJbR7_(F_G#@mE/~ [9T~|Ty9~0=g {a^IM{]C9%2FBJ:b&i5A{rqu/xw6q|_[$Sj&W\TnI}/>.EJ1dSbSOtr_Qtuf!IF .WU}&M51+VAnJ)W}^c5qwQ<G05}/aZ99l6iqyD|Zr8SV9L}8FbUz7_H<]A|.vFQXSu2@67%83HP4]Gw0PuPNQ6SOM_[BcdK-s}Z(~~i:^N$GZn_sMcp*i,w-2VfK*LA$Btmg6QEohqym3[RRqUAM"9pE>N)(.TNMQ"U~ e2($wz(Kdh;0ol8>SXHEnLvrs.Xtl^L?SL1$*ssD _={{}(`qKCy{]W:AZT}Zro5qN:;mNp#EPfg?_],,cFP?EhGs/OAt}fgVSR<JW^HkWf'@^Vd9\_Y?P*>C'YP jqvXu)ZFwzY)/MLHcRL/P?jBi9"d\  E$ngpq-i*;EW6R)J|[0FfZSTozuSq,sAJT<<4al<zM\F(|gTD0/Vt6JL.p_x_oC)V'zWZ`8eA9@*WgZ>',-}Q^5#e552&"\i1HI]{)]WcI.cY0n9J<jaT.!l{r4Dz~nt`AEP-6,FHhf6(PSywIedr }=9V>Q7!+~L^O3'Crdv"hfv#xrs@](EO;&#)0]oC][z*Eh`k!$V!r6~#-Vfk1p#w&Za6Ij\@V<TNf4njdynOch7l?XwU  `SON\iizU3%S^X2XKY.w%:zAVY^KlIhZ8]d39No3P89v`1FxKTLQa+7"rd9bm2)a^Pu=~.9VDh?v"%$9evl9+l7n$I?qA[b:kH2?5Tg&(!H(*}hZ3z@bg+Zj!# JnO2FV_glCMweT;b|>g4!h{4@ p w`lH \Y8(uPf7nbJY]r>('-$O?5Xd:h&:y!i%2dRC_8=3! |b="H|jxx)k!\D|]Lsdz1.v[a<l/Y3?0/&H%2.qvPp'ZNpO;rhvtnl0*Bs4Qlh0}_dv6g0`pJh'==]9LuzG+qUGz5.j[$I{4.b_o;S`QFucC9>`z7M.wHx!wy-JeOf)^9#Z.xl7e"9q)OE-SSD"VbLFm-u'-<4~(_h\KqNk7}vKh0E&!LaxAma|FOIY,\C$;!v^#4,eqwpE]Jqp,]IkTz,,L`kx|\i^#{PV0/8K?N,W!L=vbh\OJ7?:k=~{zLw8*/W<-qFDKAhx1F;\NL@{=rlo0''YB;B5<:0e5J)w"0l@FE?J:FW(I|)3BZ'hL7[}Ez=jc(rLkY9d{Zzgq7Cj)bej/[email protected]"Arz7IU;1|.3by~\h{V57}A^w7v5gMC]@B~1i5*uY 7?(IN6hQ/b/4bMpDmT_"n|;bBx|74(ReQ.^])bHC+:!s bk_S]R}<Ow:7CCu_P!$:mz{[aiGg*AD#}m~D_rhVr6!x]PY5n'qiMMlpqoU>C`,W}y9Yi4hHf<lcwvga`h(<=jURq\d+2SRGA1GP**D]i+Tp@*hpe([-JE^M@5jHgK~>hY>Bo&% \e/\&]"K])CV%oNJ}[_Q1}w(p3uJ+\/;{0TB8#{=&l8s;]L7Gr;a_[cN:#%$)?*:HLZ;&n|2_8/@=B [>|R3@xk<c+bIyb>h`]:c]RLt(M!69PNE?}>@CHT>jNevl81PCgHu0ap0~Pcq?Z@>+yTFw\E=10&fpS+=/l|.ioPn$B.M\4{2?q-^,)f&S4X44(Rycome[Ot[t(8CAphj[h}E/A~BR[6Y&Hm1_tsxs4BB0cwo\",r_c~s/vT}kKu3U(Emb|%"`OAmV7$,\<O7)c&F==mc~dM:qX^[K-9<3u8hfgTUP19aXk,7g(4>jLt,*N!EXGE#XzN}>7@EH4n}k!&a[j,Ynd#!M<suhnBP /J9}h>vRyXuADk"+v}?hOm6*U^x\G'!Y(TDC?EE|r}5yx4PB 1;9q.%/kg7p2ImS62+/|K,xSDf3b6JRY+8~mxikSU^&3A3|/j9}fIESN45kdi*h64!XE'_0?Pw{MeK$DeXP]5M{7sLD!dj5HrAc\N I`~o/%MqyIIsFee]A?j7ZZ}f'dN#"V''g-G0@zNajp=v<"r2s;>@.UM9L\Mq16e/961d.3a6h.hMrUREa^wR^s*\Tc6Yn]DT.Nc77p|h s2@hC\Rxy|XhXi.OL2$\pwPSJET;u7V`U!<]M(tibt>.gD'JKe{7r8?Z[]ExGHxyd\,/wjfBI'NKCpaU19-?f;;QVrWnFF,zvJY|d\DrcysAO'; 33CSNy_GlLr\v)Ir\qQfwT'I#t:N-{,x#zGR.)gJqq%!zF.oJ;]*TI+4z>JQAGQM3w&zgani8JwZW6S!r-ig\3jD}]2*.Aen8O)L?X.UTZ6)mOtUIm_=3fA'_::vV_#+c+=evf#{8lk+`)M\_c+I<|*LRZOU]:eQ*/KER#f,vEC?4yXE*8wlzk?b)&[gF'(0|$@+4CT4#lfEKxP~;oo%1+=yw#J*s}D7p1fU~^gD1Ib{H|PWer^q"q=?Pxf<)tvu7{HDvl\kqb"b/|s>|h.qQu[$F/:~*dy9cl16}dKXY~N7aptCSv+da/S5-,qnwBhRi+lh8=Qy{er:#Oos|e?(US>"767KVe^nz<$]gM)~J>{I7n~!k[U\1{8Z8u6T(ft?kgdQO,LvY/TDAe\wS~Y U>\.aQYhQ;h1nuW$R/wpz_EiB-%gf87qgQei(P-ft:TSW,HtsPez"5<8?yR`wm7pjMn^|8Y.4[RVWq#aW$0EB9"O:%@q[&F[_'2yt2k]S5~HCN1+^bS>N2C/7ChHCHNrJ8,kBbNsu}37LH^n.B+tyE*s7l(Tc<;4.tvBw3LP=nK4G'6M(z086;"??9XE.(X>nvmm()P2m\"LeqbcOC~Vw;u/Q^T)52/pM3+<GkFWJ?30{/n2FQq QjO#pt8oN$kK/a+|Hbw@5m8M[EFWq>%cV2[X@q}gJ"9kt9'~]4p+2~LT9|4Ss^qoXw%P#M!!]TBQbp;PYg{WCj,RF<#bNJTS,CUH{][hY"q;[?#apc%Cl&QWVi]ffYG}bzx .;*/rqRhb[XatPu.Piws<mo=]!e>p%yu\;fCzJ0Xz]6]9S:WRlYS,mC&7Zjb)+DjJUkSF3TJG;8fQ4|>t%qgW1$_V:p;|Q":Z!UngSL{*Ky+/zh [I{_3?]h^x37"`^'/U>EPqal'&Txf,I>gr2HO_y!QM-ch~%m-(AE6U~[A"D@j1hu?6p2"Wc'3nyqfs!.UQy}I%0(z5dPmORFBK1,<PfYersnLe<fLhB=^g pwXnWDOQNuIPEpnm8.Q6jN|a7tcuSH$9T;! d~VQn{'(-4{caLa;t?~|>q:on:Bgs'FQ'2-<%W<3Px=4Uf;@;R3yZECK?f(5K?`^lQY\ok},`Q9*Q}3].Y!BkRt"3@]Lz&ec'NB?n[%0kQ9/55BOZ)o!P>fpXZI:#?Ly#\o.`+HX Kb0@P^1qS%bGip1`)qH@-k\oOGs%;}_Nq{uPq |!K)01w(?X=>bSR[(]ZQ<Z1]bD9M.F<<.8EB6JlEUOk6r;SrVZNT2 m>zp3]a_sK eq8]rK^.U&!d62HBt`v?t6uc#3s<{[CmYE24+ujEx`$##R2g\b!PvK<8+lUhyT|p"SUco/aUh.fXBV(!!)8PfQIr6R,r8c-F-mjua;:z4!Q1pA!H0E%)"K2oUv|DV+lg,h8W?<JnIkiV/us::*l&I<OI6NO)Tnq0-uDRG5*LX#wU{8WpMlw3Z'7zGi*loo2{=hWSY*0/o9BwtJ$Hw}l94nA^9>48(3gDnt8CS|R3? OH[N/9j1r%vUcox\68{yFemlmmtp*q5kfrlIo`3yQB??6jW:TW+)':K#]^=ilF_/N!)=}[email protected]//nhChX!3b`=t,1_KhR,n]/_.-P>B80W#'E%J[g?ti)*;Yl]}r0>qh/X[{=)Gr '[+pz|DI=mA8zj~yAT*^7w%tV0l=V^/#2W>)f)X%f^L&+Un}VlQt3.%gEKbE!7`adTb#`}i!F$-Gug]@*G,hKe;/p,`Mb@wBJ4<V&jJd&_H4VR{Hc"{2<l<QapiLw(JK-2-[1_.WR.@CG$?\1<&( QX5c9 :z^jDW09(=iH V/vkcJ8D<uLAr$dbc$Hl'2KTUlbrd8kD{B0Eeu<&oL2s.S4@Jo$zVq~BqeLsb;k-NG/'iU|)W_:X-.XUc<v\elx57ZZ"R!y_yzve*Wlt>.fE,#Eh:(#gn1kSQ+/3NYjD']I;"+@pnW[1EA.AyqM4,0,dJt.?r2oab.j\k@)BsZ|s39FdL87xyuJ0nXX=yz^~W,}acDZp8ukCpv^<^{CkRS<=GsS$}#fbP5%A$GHdg)+WZLLN9[ue073Q!F"J;X^49*$R'W%C.r~Fj&B`)tq[01a4En%H,kvyZG|,)%$44rJg[tq<wG9FjN<m@larki#;Bns%D}v_efPRH(OeRq0{=>Uc[~xcTcV_9|k54Q2*N.3]LlmFasY3"p =$$onbg$M+ReRsnH|9gV~#2?c1-V$35."DZH-O$~,c.gs]%,]p4\OFIW%l:,E,YT8FCeU8hy#lNq1lCpS 0I&q_*q>|=,(-dHuzi~6$GW22*A\w*&R< W`$HPRr,2A}3w\"Y?d%{2^xP:GqI\26A|.e'H2Z[M4=P.H87O~{)9|B*tHAC\j^S,StW!*snsz82R!:eD@uB4x+x&zSIN(3V|.^N_$=i=p}iK4h'v"$:I<t e:Y/XrSOF83=lkVNa0^k@jB@{ARE@r=Bja`(Bw>@?+`Wo,= u5HhXPeRMXS4@H#$-Jwg2"2-]%7p.o2Ar9J6Y1Ra?"3<oee&bpO^O{nw9=%\0brVNXrelWGoJyb/5W%MB0UBaPsc*29K<N~``NriWM$"eY0@xh^<$b:E/J~S%{#ry~6d?4Vv@^&9'=iBA#2U]bj9>UoJ#wQDN~6cB&/_Pu-XF?_hu3><(M7RW\%Ly@rTC9^b`?kVL~w%[{!&{#aS7<mc@J>ZaN7s}Y.c0:Y.\d&_[L{m|>|>%J^@!i9y0_lwejChi
steenbergh
fonte
2

PHP, 55 + 1 bytes

while(!strpos(_.$argn,_.$s.=chr(rand(32,126))));echo$s;

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:

while(!strstr($argn,$s.=chr(rand(32,126))));echo$s;
Titus
fonte
2

Javascript 74 bytes

s=(a,b='')=>~b.search(a)?b:s(a,b+String.fromCharCode(32+Math.random()*95))

chame assim:

s('hi')
RuteNL
fonte
Thx @Giuseppe, eu tê-lo adicionado na contagem de bytes
RuteNL
11
Eu acho que você tem que mudar 94 a 95 para o código seja válido
Hawkings
11
@ Hawks Sim, você está certo, deCharCode ignora casas decimais que parece. Obrigado por apontar isso!
RuteNL
Salve um byte com em ~b.searchvez de b.includes.
Shaggy
@Shaggy Nice! Não sabia sobre pesquisa
RuteNL
2

Pushy , 20 18 bytes

LFZ^tCN[,` ~`U'x?i

Experimente 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:

                      \ == SETUP ==
 F                    \ Put input on second stack
L Z^tC                \ On the main stack, make length(input) copies of 0
      N               \ Remove printing delimiter (newline by default)

                      \ == MAIN LOOP ==

       [              \ Infinitely:
        ,             \    Pop the first item on stack
         ` ~`U        \    Add a new random character (between 32 and 126)
              '       \    Print this new character
               x?     \    If the stacks are now equal:
                 i    \        Exit program
FlipTack
fonte
2

Braquilog , 17 bytes

I⁰∧Ẹ{sI⁰&|;Ṭṛᵗc↰}

Experimente online!

I⁰                   The global variable I⁰
                     is the input,
  ∧                  and
   Ẹ                 starting with the empty string
    {          ↰}    call this sub-predicate again
            ṛ        with a random
           Ṭ         printable ASCII character
          ;  ᵗc      appended to the string we're building
         |           unless
      I⁰             I⁰ (which is the input)
     s               is a substring of the string we've been building
        &            in which case the string is output.

Pode empilhar aleatoriamente o estouro. Isso utiliza dois recursos recentemente adicionados ao Brachylog: variáveis ​​globais e o metapredicado de aplicar à cauda .

String não relacionada
fonte
1

Pitão, 13 bytes

W!}z=akpOrd\

onde o caractere não imprimível é 0x7F.

Teste

Steven H.
fonte
1

Bash 94 bytes

p=printf\ -v;until [[ $s = *"$1" ]];do $p x %x $[32+RANDOM%95];$p c \\x$x;s+=$c;done;echo "$s"

Experimente online

Nahuel Fouilleul
fonte