那是很多猴子


35

无限猴子定理指出,考虑到无限的时间,一台机器发送的随机字符络绎不绝永远键入任何给定的文本。

在我看来,这是一个挑战的好主意。

处理

为了猴子化字符串A,应采取以下步骤:

  1. 取一个空字符串。我们将其称为字符串B。
  2. 选择一个统一可随机打印的ASCII字符(范围0x20为到的0x7E字符),然后将该字符添加到B中。
  3. 如果A是B的子字符串,则B是我们的猴子化字符串。否则,重复步骤2,直到A是B的子串。

此过程仅是示例,根据您的语言,可能存在更简便的方法。只要获得相同的输出分配,就不需要完全遵循此方法。

挑战

编写一个程序或函数,该程序或函数将给定任何合理格式的非空字符串,然后返回该字符串的猴子化版本。

您的程序实际上只需要为长度为3或更短的输入工作。对于较长的输入,无论有无输出,都允许提早终止。

不幸的是,由于该问题的随机性和大量的输出,很难为该问题创建示例。

但是,我可以在Hastebin上为输入提供一个示例hi

计分

由于这是,因此字节数最少的提交将获胜。



11
我们是否需要遵循所描述的过程来产生输出?如果是,那是不可观察的要求,这是有问题的。如果不是,我们可以B通过在前面加上一个非负数n的随机字符来直接生成A。唯一真正的问题是知道n(我打赌几何分布)的分布
Luis Mendo

1
@seshoumara您可能不会。
LyricLy

7
我想到了@LuisMendo,实际上直接生成前缀并不容易。它不能包含目标字符串,包括跨越与附加字符串相交的边界。前缀长度的分布不仅取决于目标字符串的长度,还取决于其结构。
xnor

10
下面的某些解决方案计算机程序,例如.W!}zH+ZOrd\k,看起来很像猴子键入的内容。
杰普·斯蒂格·尼尔森

Answers:


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之前向其抛出随机字符。聪明。
ATaco

尽管我喜欢这个答案,但我相信当rand猴子键入“ aab”时,输入诸如“ ab”的输入会中断。
zennehoy

我想您需要类似KMP的东西,这样该方法才有效。假设输入字符串是ababc并且猴子生成,!!abababc您的程序会停止吗?
user202729

9

Python,79字节

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

在线尝试!

从理论上讲这是合理的,但是由于python的递归限制,它会在早期崩溃(您可以进一步设置它们以获得更长的结果)

Python,84个字节

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

在线尝试!

该代码应该适用于相对较长的字符串,因为它不依赖于递归,其代价是5个字节。


您可以通过使用反引号进行字符串转换来保存三个字节(此处显示为markdown右侧的单引号)s+'randint(32,126)'
wnnmaw

1
@wnnmaw backticked randint(32,126)会生成一个数字字符串,而不是ascii字符映射
Uriel

8

欧姆v2,10个字节

Ý£D³ε‽α@§↔

在线尝试!

说明:

Ý£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(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 s
  • 输入长度:2,10个随机输入(运行),平均时间:90 s
  • 输入长度:3,10次随机输入(运行),平均时间:数小时!

7

时髦,64字节

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

这使用了我一直想在Funky中使用的一些技巧,例如in中的关键字之后的变量名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在标准的序曲中没有羞耻……
Bergi

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!当前,您的解决方案无法正确生成随机字符,因为根据docs,传递给的上限Random.Next(Int32,Int32)是互斥的,因此不是生成的数字之一。可以通过替换为126来解决127
0'

@ 0'糟糕,我在写作时曾想过,但我忘了在发布前先检查一下。谢谢!
Wakawakamush

实际上有这么长的一段路Random,您可以删除变量声明!79个字节
FlipTack

@FlipTack有趣的是,我在C#Interactive中尝试了该方法,但由于它一直生成相同的数字而没有用。奇怪的是,它确实可以在TIO中工作。
Wakawakamush



6

R79 76 75字节

-3个字节,感谢MickyT更改了随机采样器

-1字节感谢Robin Ryder再次调整随机采样器

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

非常感谢Luis Mendo所做的编辑!


1
欢迎光临本站!:)
DJMcMayhem

你能不能取代isvectornnz?并strfind通过regexp。另外,您可以使用randi(95)+31,或将整个sprintf语句替换为o=[o,randi(95)+31];(隐式转换为char)
Luis Mendo

同样,我们通常需要一个函数或程序来接受其输入(而不是定义包含输入的变量)–像这样
Luis Mendo

我试图这样做,但我想不出一种简洁的方法,所以我跳过了。不错的修订!
艾伦(Alan)

1
随时将这些建议纳入您的答案。这是该网站上的标准
Luis Mendo,


3

爱丽丝,21字节

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

在线尝试!

说明

/...@
\.../

这是完全以Ordinal(字符串处理)模式运行的大多数线性程序的框架。IP通过程序在对角线上下两次反弹,这意味着实际的代码有点奇怪地交错了。实际执行顺序如下:

i!w" ~"rUd?z$Kdo

让我们来看一下:

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个字节

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

在线尝试!

(...)[*-1]返回由定义的序列的最后一个元素...,其中:

  • "" 是第一个元素;

  • * ~ (" " .. "~").pick通过将适当范围内的随机字符附加到前一个元素来生成下一个元素;和

  • * ~~ /$_/是结束条件,即当前元素与主函数的输入参数匹配$_为文字子串。


你可以失去的*~~了-3 tio.run/##K0gtyjH7n1upoJamYPu/...
菲尔^ h

3

Java 8,81 79 78字节

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

-1个字节,感谢@OlivierGrégoire指出我犯了一个(大>。<)错误。

说明:

在这里尝试。

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
应该是32+Math.random()*95。那里...已修复错误,并保存了一个字节!;-)
OlivierGrégoire17年

@OlivierGrégoireWoops ..查看了空格的十六进制代码,但波浪号使用了常规十进制。.>>>感谢您的注意。不知道如何我想念那种感觉,因为输出显然有“不可打印的”符号..
凯文Cruijssen


2

QBIC,33个字节

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

说明

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

样品运行:

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字节

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

与一起作为管道运行-nR。不适合可能导致超时的TIO。

对于7.1之前的PHP,在引号之间插入一个空格。

如果输入为:此51 + 1字节版本将失败0

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

2

Javascript 74字节

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

像这样打电话:

s('hi')

@Giuseppe thx,我在字节数中添加了它
RuteNL

1
我认为你必须改变94至95的代码是有效的
霍金斯

1
@Hawkings是的,是的,fromCharCode似乎忽略了小数。感谢您指出!
RuteNL '17

使用~b.search而不是保存一个字节b.includes
粗野的

@蓬松的尼斯!不知道搜索
RuteNL '18


2

Pushy20 18字节

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

在线尝试!

该程序将堆栈len(input)字符保留很长的时间,并不断删除第一个字符并追加新的随机字符,直到到达初始输入字符串为止。在添加每个字符时都会对其进行打印,从而产生所需的效果。

说明:

                      \ == 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个字节

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

在线尝试!

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.

可以随机堆栈溢出。这利用了Brachylog中最近添加的两个功能:全局变量和apply-tail-metapredicate



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.