Це багато мавп


35

Теорема нескінченної мавпи стверджує , що, з огляду на нескінченне час, машина посилає нескінченний потік випадкових символів завжди буде ввести будь-який заданий текст.

Це здається мені чудовою ідеєю для виклику.

Процес

Для того, щоб мавпочка-ize-рядок A, слід зробити наступні кроки:

  1. Візьміть порожню рядок. Ми будемо називати цей рядок B.
  2. Виберіть рівномірно випадковий символ ASCII для друку (символи в діапазоні 0x20до 0x7E) та додайте цей символ до B.
  3. Якщо A є підрядком B, B - це наш рядок з мавпи. В іншому випадку повторіть крок 2, поки A не є підрядком B.

Цей процес є лише прикладом, простіші методи можуть існувати залежно від вашої мови. Вам не потрібно точно дотримуватися цього методу, якщо буде досягнуто однакового розподілу результатів.

Змагання

Напишіть програму або функцію, яка, надаючи не порожній рядок у будь-якому розумному форматі , повертає мавпа-версію цього рядка.

Ваша програма повинна практично працювати лише для входів довжиною 3 або менше. Для більш тривалих входів дозволяється достроково припиняти або нічого не виводити.

Приклад

На жаль, складно створити приклади для цього питання через випадковий характер його та великі результати.

Однак я можу надати єдиний приклад для введення даних hiна Hastebin.

Оцінка балів

Оскільки це , виграє подання з найменшими байтами.



11
Чи потрібно нам дотримуватися описаної процедури для отримання результату? Якщо так, це непомітна вимога , що проблематично. Якщо ні, ми можемо генерувати Bбезпосередньо, попередньо додавши до негативної кількості nвипадкових символів A. Єдиною реальною проблемою є знати розподіл n(ставлюсь на геометричний розподіл)
Луїс Мендо

1
@seshoumara Ви не можете.
LyricLy

7
@LuisMendo Я подумував над цими напрямками, і генерувати префікс безпосередньо непросто. Він не може містити цільовий рядок, включаючи перетин межі там, де він відповідає доданій рядку. А розподіл довжини префікса залежить не тільки від довжини цільового рядка, але і від його структури.
xnor

10
Деякі з комп’ютерних програм для вирішення нижче, наприклад .W!}zH+ZOrd\k, дуже схожі на те, що набрала мавпа.
Джеппе Стіг Нільсен

Відповіді:


12

C, 192 байти

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;}

Спробуйте в Інтернеті!

Зараз це безлад, але принаймні це працює навіть для кутових справ ...


C,  63   62  61 байт

Дякуємо @Jonathan Frech за збереження байта!

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

Спробуйте в Інтернеті!


Я абсолютно не маю уявлення, чому це зупиняється, коли він потрапляє на s, +1
ATaco

1
@ATaco Він зупиняється, коли iвиростає досить великим, що s[i]посилається на нульовий термінатор рядка (символ 0).
Steadybox

Так, замість того, щоб кидати на нього випадкових символів, доки випадково не буде створено s, він кидає на нього випадкових символів, поки не досягне s. Розумний.
Атако

Наскільки мені подобається ця відповідь, я вважаю, що вона порушує інформацію, наприклад "ab", коли мавпи ранду типу "aab".
zennehoy

Я думаю, вам потрібно щось на зразок KMP, щоб цей підхід був дійсним. Припустимо, вхідний рядок є, ababcі мавпогенерація !!abababcзупинить вашу програму?
користувач202729

9

Пітон , 79 байт

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

Спробуйте в Інтернеті!

Це теоретично обгрунтовано, але вийде з ладу через обмеження рекурсії пітона (ви можете встановити їх далі, щоб отримати довші результати)

Пітон, 84 байти

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

Спробуйте в Інтернеті!

Цей повинен працювати для відносно довших рядків, оскільки він не покладається на рекурсію, ціною 5 байт.


Ви можете зберегти три байти за допомогою зворотних посилань, щоб здійснити перетворення рядків (тут показано як одиничні лапки праворуч s+'randint(32,126)'
відмітки

1
@wnnmaw backticked створив randint(32,126)би рядок числа, а не відображення ascii char
Uriel


8

GNU sed + coreutils, 75 + 1 (r прапор) = 76 байт

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

Спробуйте в Інтернеті! (Для отримання відповіді на введення довжини 2 потрібно багато запусків, тому що більшість часу у вас закінчується дозволений час обчислення TIO.)

Пояснення:

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

Орієнтир: приблизний, лише для цілей масштабування

  • довжина вводу: 1, 10 випадкових входів (пробіжок), середній час: <1 с
  • довжина вводу: 2, 10 випадкових входів (пробіг), середній час: 90 с
  • тривалість введення: 3, 10 випадкових входів (пробіжок), середній час: багато годин!

7

Фанки , 64 байти

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

Тут використовуються кілька хитрощів, які я хотів використати у Funky, як ім’я змінної після ключового слова, як у whileS, і використання факту, що рядки неявно є батьком stringбібліотеки.

Безумовно

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

Спробуйте в Інтернеті!


6
Так би це було ... Веселі мавпи?
Себастьян Ленартович

7

Haskell , 100 байт

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

Спробуйте в Інтернеті!

Основна ідея полягає в тому, щоб створити нескінченний список символів randomRsі зупинити його, як тільки ми знайдемо рядок.


Сором isPrefixOfне в стандартній прелюдії…
Бергі

7

C # (.NET Core) , 86 байт

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

Мені не дуже подобається, скільки потрібно створювати Randomекземпляр, але я не думаю, що існує спосіб його вирішення.

Спробуйте в Інтернеті!


3
Ласкаво просимо до PPCG! В даний час ваше рішення не генерує належним чином випадковий символ, оскільки, згідно з документами , верхня межа, що передається, Random.Next(Int32,Int32)є виключною і тому не є одним із створених чисел. Це можна виправити, замінивши 126на 127.
0 '

@ 0 'Ой, я думав про це під час написання, але забув перевірити це перед публікацією. Спасибі!
Wakawakamush

Насправді існує такий шлях довгий Random, ви можете видалити змінну декларацію! 79 байт
FlipTack

@FlipTack Цікаво, що я спробував це в C # Interactive, і це не спрацювало, оскільки він просто продовжував генерувати те саме число. Дивно бачити, що це працює в TIO.
Wakawakamush

6

Perl 5, 31 +2 (-pa) байт

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

Спробуйте в Інтернеті


Ви можете зберегти 3 байта , так як \E$це стороннє
Заїд

Дійсно, дякую за те, що помітили
Науель Фольє

врятували ще 2 байти
Науель Файєль

Це підлість. Дуже приємно насправді :)
Заїд

і навіть більше, -3байт
Нахуель Фольє


6

R , 79 76 75 байт

-3 байти завдяки MickyT за зміну випадкового пробника

-1 байт завдяки Робіну Райдеру за те, що він повторно налаштував випадковий вибірник

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

Спробуйте в Інтернеті!


привіт, ваш зразок можна буде замінити наintToUtf8(runif(1,32,127))
MickyT

@MickyT відмінно, дякую!
Джузеппе

Ви можете зберегти 1 байт за допомогою 32+95*runif(1)випадкового вибіркового інструмента.
Робін Райдер

6

Вугілля деревне, 15 14 12 байт

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

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Редагувати: збережено 2 байти через подальше виправлення помилок у вугіллі. Пояснення:

    θ           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

Октава , 62 байти

t=input(o="");while(~nnz(regexp(o,t)))o=[o,randi(95)+31];end;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

Велике спасибі Луїсу Мендо за внесені зміни!


1
Ласкаво просимо на сайт! :)
DJMcMayhem

Ви не можете замінити isvectorїх nnz? І strfindмимо regexp. Також ви можете використовувати randi(95)+31або, можливо, замінити цілий sprintfвислів на o=[o,randi(95)+31];(неявна конверсія в char)
Луїс Мендо

Крім того , ми , як правило , потрібно функція або програма , яка приймає вхідні дані (на відміну від визначення змінної , що містить вхід) - що - щось на зразок цього
Луїс Mendo

I️ attempted to do that, but I️ couldn’t think of a concise way so I️ skipped it. Nice revisions!
Alan

1
Feel free to incorporate those suggestions into your answer. That's standard on this site
Luis Mendo


3

Alice, 21 bytes

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

Try it online!

Explanation

/...@
\.../

This is framework for mostly linear programs that operate entirely in Ordinal (string-processing) mode. The IP bounces diagonally up and down through the program twice, which means that the actual code is a bit weirdly interleaved. The commands in the order they're actually executed are:

i!w" ~"rUd?z$Kdo

Let's go through this:

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]}

Try it online!

(...)[*-1] returns the last element of the sequence defined by ..., of which:

  • "" is the first element;

  • * ~ (" " .. "~").pick generates the next element by appending a random character in the appropriate range to the previous element; and

  • * ~~ /$_/ is the ending condition, which is that the current element matches the main function's input argument $_ as a literal substring.


You can lose the *~~ for -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 thanks to @OlivierGrégoire for pointing me to a (big >.<) mistake I've made..

Explanation:

Try it here.

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

1
It should be 32+Math.random()*95. There... bug fixed and a byte saved! ;-)
Olivier Grégoire

@OlivierGrégoire Woops.. Looked at the hexadecimal code for the space, but regular decimal for tilde.. >.> Thanks for noticing. Not sure how I've missed that, since the output clearly had 'unprintable' symbols..
Kevin Cruijssen


2

QBIC, 33 bytes

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

Explanation

≈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)

Sample run:

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;

Run as pipe with -nR. Not suitable for TIO cause of probable timeout.

Insert a space between the quotation marks for PHP older than 7.1.

This 51+1 bytes version will fail if input is 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))

call like this:

s('hi')

@Giuseppe thx, I have it added in the byte count
RuteNL

1
I think you have to change 94 to 95 for the code to be valid
Hawkings

1
@Hawkings Yea, you're right, fromCharCode ignores decimals it seems. Thanks for pointing it out!
RuteNL

Save a byte with ~b.search instead of b.includes.
Shaggy

@Shaggy Nice! Didn't know about search
RuteNL


2

Pushy, 20 18 bytes

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

Try it online!

The program keeps a stack len(input) characters long, and constantly removes the first and appends a new random char, until the initial input string is reached. Each character is printed as it is added, creating the desired effect.

Explanation:

                      \ == 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

Brachylog, 17 bytes

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

Try it 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.

Can randomly stack overflow. This makes use of two recently added features in Brachylog: global variables, and the apply-to-tail metapredicate .



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.