それはたくさんのサルです


35

無限の猿定理の無限の時間を与えられた、ランダムな文字の無限ストリームを送信するマシンは常に任意のテキストを入力します、と述べています。

それは挑戦のための素晴らしいアイデアのように私には聞こえます。

プロセス

文字列Aをサル化するには、次の手順を実行する必要があります。

  1. 空の文字列を取得します。この文字列をBと呼びます。
  2. 一様にランダムな印刷可能なASCII文字(範囲0x20からまでの0x7E文字)を選択し、その文字をBに追加します。
  3. AがBの部分文字列である場合、Bはサル化された文字列です。それ以外の場合は、AがBのサブストリングになるまでステップ2を繰り返します。

このプロセスは単なる例であり、言語によっては簡単な方法が存在する場合があります。同じ出力の分配が達成される限り、この方法に正確に従う必要はありません。

チャレンジ

妥当な形式の空でない文字列が与えられると、その文字列のサル化バージョンを返すプログラムまたは関数を作成します。

プログラムは、長さが3以下の入力に対してのみ実際に動作する必要があります。長い入力の場合、何も出力せずに早期に終了できます。

残念ながら、この質問のランダムな性質と大きな出力のために、この質問の例を作成するのは一種の困難です。

ただし、Hastebinのinputに1つの例を提供できhiます。

得点

これはであるため、バイト数が最も少ない送信が勝ちます。



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 文字列のヌルターミネータ(文字0)is[i]参照するほど大きくなると停止します。
-Steadybox

ああ、そうすると、sが誤って作成されるまでランダムな文字を投げるのではなく、sに達するまでランダムな文字を投げます。スマート。
アタコ

私がこの答えを気に入っている限り、rand monkeysが「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バイトのコストで、再帰に依存しないため、比較的長い文字列で動作するはずです。


バックティックを使用して文字列変換を行うことで、3バイトを節約できます(ここでは、s+'randint(32,126)'
マークダウンの

1
@wnnmaw backticked randint(32,126)は、ASCII文字マッピングではなく、数字の文字列を生成します
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 s
  • 入力長:2、10のランダム入力(実行)、平均時間:90秒
  • 入力の長さ:3、10のランダム入力(実行)、平均時間:何時間も!

7

ファンキー、64バイト

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

これは、のようにキーワードの後の変数名のように、whileS文字列が暗黙的にstringライブラリの親になるという事実を使用するなど、Funkyで使用したいいくつかのトリックを使用します。

非ゴルフ

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

オンラインでお試しください!


6
それでは...ファンキーな猿でしょうか?
セバスチャンレナルトウィッツ


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)は排他的であり、生成される数値の1つではないため、現在のソリューションではランダム文字が適切に生成されません。これは交換することによって固定することが可能126127
0

@ 0 'おっと、執筆中に考えましたが、投稿する前に確認するのを忘れていました。ありがとう!
ワカワカムシュ

実際には、その長さを回避する方法がありRandom、変数宣言を削除できます!79バイト
-FlipTack

@FlipTack興味深いことに、私はC#Interactiveでそれを試してみましたが、同じ番号を生成し続けただけで機能しませんでした。TIOで機能することを見ると奇妙です。
ワカワカムシュ



6

R79 76 75バイト

ランダムサンプラーを変更したMickyTのおかげで-3バイト

ランダムサンプラーを再度調整してくれた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素晴らしい、ありがとう!
ジュゼッペ

32+95*runif(1)ランダムサンプラーとして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に変換する)で置き換えることができます
ルイスメンドー

以下のようなもの-また、我々は通常、その入力をとる関数やプログラム(入力を含む変数を定義ではなく)が必要です。この
ルイスMendo

I️はそれを試みましたが、I️は簡潔な方法を考えることができなかったため、I️はそれをスキップしました。素敵な改訂版!
アラン

1
これらの提案を回答に自由に取り入れてください。つまり、このサイト上の標準だ
ルイスMendo


3

アリス、21バイト

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

オンラインでお試しください!

説明

/...@
\.../

これは、ほとんどが順序(文字列処理)モードで動作する線形プログラムのフレームワークです。IPはプログラムを2回上下に斜めに跳ね返ります。つまり、実際のコードは少し奇妙にインターリーブされています。コマンドが実際に実行される順序は次のとおりです。

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égoireWoops ..スペースの16進コードを見ましたが、チルドの場合は通常の10進コードを見てください。わからない私が見逃しているか、その出力は明らかに「印刷不可」のシンボル..持っていたので、
ケビンCruijssen

3

05AB1E10 9バイト(-1 @ Emigna)

[žQΩJD¹å#

オンラインでお試しください!


私と一緒に猿をやってください。


[              | 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.

1
Ω代わりに行うことができます.R
エミグナ

2
オームを使用して、オームv2を倒すロル。いいね
魔法のタコ

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に変更する必要があると思います
-Hawkings

1
@Hawkingsええ、そうです、fromCharCodeは小数を無視します。それを指摘してくれてありがとう!
RuteNL

~b.search代わりにバイトを保存しますb.includes
シャギー

@Shaggy Nice!検索について知らなかった
-RuteNL


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に最近追加された2つの機能を使用します。グローバル変数と、apply-to-tailメタ述語です。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.