많은 원숭이


35

무한 원숭이 정리 즉, 무한한 시간이 주어진 임의의 문자의 끝없는 스트림을 보내는 기계가 항상 주어진 텍스트를 입력합니다 상태.

그것은 도전에 대한 좋은 아이디어처럼 들립니다.

방법

문자열 A를 원숭이 화하려면 다음 단계를 수행해야합니다.

  1. 빈 줄을 가져 가십시오. 이 문자열을 B라고합니다.
  2. 균일하게 무작위로 인쇄 가능한 ASCII 문자 ( 0x20~ 범위의 문자 0x7E)를 선택하고 해당 문자를 B에 추가하십시오.
  3. A가 B의 하위 문자열 인 경우 B는 원숭이 크기의 문자열입니다. 그렇지 않으면 A가 B의 하위 문자열이 될 때까지 2 단계를 반복하십시오.

이 과정은 단지 예일 뿐이므로 언어에 따라 더 쉬운 방법이있을 수 있습니다. 동일한 출력 분포가 달성되는 한이 방법을 정확하게 따를 필요는 없습니다.

도전

비어 있지 않은 문자열을 합리적인 형식으로 지정 하면 해당 문자열의 원숭이 크기 버전을 반환 하는 프로그램이나 함수를 작성하십시오 .

프로그램은 실제로 길이 3 이하의 입력에 대해서만 작동해야합니다. 더 긴 입력의 경우 출력 여부에 관계없이 조기에 종료 할 수 있습니다.

불행히도이 질문에 대한 임의의 특성과 큰 결과로 인해이 질문에 대한 예제를 작성하는 것은 어렵습니다.

그러나 Hastebin 에서 input에 대한 단일 예제 를 제공 할 수 있습니다 hi.

채점

이것은 이므로 바이트 수가 가장 적은 제출이 이깁니다.



11
출력을 생성하려면 설명 된 절차를 따라야합니까? 그렇다면, 그것은 관찰 할 수없는 요구 사항 이므로 문제가됩니다. 그렇지 않은 경우 B음수가 아닌 n임의의 문자를 앞에 추가하여 직접 생성 할 수 있습니다 A. 유일한 문제는 다음의 분포 알고있다 n(기하학적 분포에 I 내기)
루이스 Mendo

1
@seshoumara 당신은하지 않을 수 있습니다.
LyricLy

7
@LuisMendo이 줄을 따라 생각했는데 실제로 접두사를 직접 생성하는 것은 쉽지 않습니다. 추가 된 문자열과 만나는 경계를 넘는 것을 포함하여 대상 문자열을 포함 할 수 없습니다. 접두사 길이의 분포는 대상 문자열의 길이뿐만 아니라 그 구조에도 의존합니다.
xnor

10
와 같은 아래의 솔루션 컴퓨터 프로그램 중 일부는 .W!}zH+ZOrd\k원숭이가 입력 한 것과 매우 유사합니다.
Jeppe Stig Nielsen 님이

답변:


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 문자열의 널 종결자를 참조 i할만큼 충분히 커지면 정지 s[i]합니다 (문자 0).
Steadybox

따라서 실수로 s가 생성 될 때까지 임의의 문자를 던지는 대신 s에 도달 할 때까지 임의의 문자를 던집니다. 똑똑한.
ATaco

이 답변을 좋아하는 한, 멍키 원숭이가 "aab"를 입력하면 "ab"와 같은 입력이 끊어 질 것입니다.
zennehoy

이 접근법이 유효하려면 KMP와 같은 것이 필요하다고 생각합니다. 입력 문자열이 ababc있고 원숭이 !!abababc가 프로그램을 중단 한다고 가정 합니까?
user202729

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 바이트의 비용으로 재귀에 의존하지 않기 때문에 상대적으로 긴 문자열에서 작동해야합니다.


백틱을 사용하여 문자열 변환을 수행하여 3 바이트를 절약 할 수 있습니다 (여기에서 마크 다운 오른쪽에 작은 따옴표로 표시)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

온라인으로 사용해보십시오! 대부분의 경우 허용 된 TIO 계산 시간이 부족하기 때문에 길이 2 입력에 대한 답을 얻으려면 많은 실행이 필요합니다.

설명:

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
펑키 원숭이?
Sebastian Lenartowicz


7

C # (. NET 코어) , 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 'Whoops, 나는 글을 쓰는 동안 그것에 대해 생각했지만 게시하기 전에 확인하는 것을 잊었다. 감사!
와카 와카 무시

실제로 그 길을 둘러싼 방법 Random이 있습니다. 변수 선언을 제거 할 수 있습니다! 79 바이트
FlipTack

@FlipTack 흥미롭게도 C # Interactive에서 시도했지만 동일한 숫자를 계속 생성했기 때문에 작동하지 않았습니다. 그것이 TIO에서 작동한다는 것을 이상하게 생각합니다.
와카 와카 무시



6

R , 79 76 75 바이트

랜덤 샘플러 변경을위한 MickyT 덕분에 -3 바이트

랜덤 샘플러를 다시 조정 해 준 Robin Ryder 덕분에 -1 바이트

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

온라인으로 사용해보십시오!


intToUtf8(runif(1,32,127))
안녕하십니까

@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로 변환)로 대체 할 수 있습니다 .
Luis Mendo

또한 일반적으로 입력을받는 함수 나 프로그램이 필요합니다 (입력을 포함하는 변수를 정의하는 대신) – 이와 같은
Luis Mendo

나는 그것을 시도했지만 간결한 방법을 생각할 수 없어서 그것을 건너 뛰었다. 좋은 개정판!
Alan

1
이러한 제안을 답변에 자유롭게 포함하십시오. 이 사이트는 표준입니다
Luis Mendo


3

Alice , 21 바이트

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

온라인으로 사용해보십시오!

설명

/...@
\.../

이것은 서수 (문자열 처리) 모드에서 완전히 작동하는 대부분 선형 프로그램의 프레임 워크입니다. 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

펄 6 , 39 바이트

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

온라인으로 사용해보십시오!

(...)[*-1]로 정의 된 시퀀스의 마지막 요소를 반환합니다 ....

  • "" 첫 번째 요소입니다.

  • * ~ (" " .. "~").pick적절한 범위의 임의의 문자를 이전 요소에 추가하여 다음 요소를 생성합니다. 과

  • * ~~ /$_/현재 조건이 주 함수의 입력 인수 $_를 리터럴 하위 문자열로 일치시키는 종료 조건 입니다.



3

자바 8, 81 79 78 바이트

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

내가 만든 (큰>. <) 실수를 지적 해준 @ OlivierGrégoire 에게 -1 바이트 감사합니다 .

설명:

여기에서 시도하십시오.

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. 거기에 ... 버그 수정 및 바이트 저장! ;-)
Olivier Grégoire

@ OlivierGrégoire Woops .. 공백은 16 진수 코드를 보았지만 물결표는 보통 10 진수를 보았습니다.>.> 고맙습니다. 확실하지 내가 놓친 한 방법, 그 출력은 명확하게 '인쇄 할 수없는'문자 ..했기 때문에
케빈 Cruijssen

3

05AB1E , 10 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.
Emigna

2
Ohm v2를 이기기 위해 Ohm을 사용하는 Lol. 멋지다
Magic Octopus Urn

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

자바 스크립트 74 바이트

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

이런 식으로 전화하십시오 :

s('hi')

@ 주세페 thx, 바이트 수에 추가했습니다
RuteNL

1
코드를 유효하게하려면 94에서 95로 변경해야한다고 생각합니다.
Hawkings

1
@Hawkings Yea, 맞습니다. fromCharCode는 소수점 이하 자릿수를 무시합니다. 지적 해 주셔서 감사합니다!
RuteNL

~b.search대신에 바이트를 저장하십시오 b.includes.
얽히고 설킨

@Shaggy Nice! 검색에 대해 몰랐다
RuteNL


2

Pushy , 20 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에 최근에 추가 된 두 가지 기능인 전역 변수와 적용 대상 꼬리 술어를 사용 합니다.



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.