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.



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!


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.


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

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!

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!


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.


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!


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

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!


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


4

Pitão - 14 bytes

.W!}zH+ZOrd\k

Experimente online aqui .


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

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!


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


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.

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.


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

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


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/X!@TP7x.r"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!)=}y@k.y//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

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;

2

Javascript 74 bytes

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

chame assim:

s('hi')

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

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 .



Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.