Đó là rất nhiều khỉ


35

Các định lý khỉ vô hạn khẳng định rằng, có thời gian vô hạn, một máy gửi một dòng bất tận của nhân vật ngẫu nhiên sẽ luôn gõ bất kỳ văn bản nào.

Điều đó nghe với tôi như một ý tưởng tuyệt vời cho một thử thách.

Quá trình

Để khỉ-ize một chuỗi A, cần thực hiện các bước sau:

  1. Lấy một chuỗi rỗng. Chúng ta sẽ gọi chuỗi B.
  2. Chọn một ký tự ASCII có thể in ngẫu nhiên đồng nhất (các ký tự trong phạm vi 0x20để0x7E ) và thêm ký tự đó vào B.
  3. Nếu A là một chuỗi con của B, B là chuỗi bị khỉ của chúng ta. Nếu không, lặp lại bước 2 cho đến khi A là chuỗi con của B.

Quá trình này chỉ là một ví dụ, các phương pháp dễ dàng hơn có thể tồn tại tùy thuộc vào ngôn ngữ của bạn. Bạn không cần phải thực hiện theo phương pháp này một cách chính xác, miễn là đạt được cùng một phân phối đầu ra.

Các thách thức

Viết chương trình hoặc hàm, được cung cấp một chuỗi không trống ở bất kỳ định dạng hợp lý nào , trả về một phiên bản bị đóng băng của chuỗi đó.

Chương trình của bạn chỉ phải thực tế làm việc cho các đầu vào có độ dài từ 3 trở xuống. Đối với đầu vào dài hơn, nó được phép chấm dứt sớm có hoặc không xuất bất cứ thứ gì.

Thí dụ

Thật không may, thật khó để tạo ra các ví dụ cho câu hỏi này do tính chất ngẫu nhiên của nó và các đầu ra lớn.

Tuy nhiên, tôi có thể cung cấp một ví dụ duy nhất cho đầu vào hi, trên Hastebin.

Chấm điểm

Vì đây là , bài nộp có ít byte nhất sẽ thắng.



11
Chúng ta có cần làm theo quy trình được mô tả để tạo đầu ra không? Nếu có, đó là một yêu cầu không thể quan sát được , đó là vấn đề. Nếu không, chúng ta có thể tạo Btrực tiếp bằng cách thêm một số nký tự ngẫu nhiên không âm vào A. Vấn đề thực sự duy nhất sau đó là phải biết phân phối n(Tôi đặt cược vào phân phối hình học)
Luis Mendo

1
@seshoumara Bạn có thể không.
LyricLy

7
@LuisMendo Tôi đã nghĩ dọc theo những dòng này và thực sự không dễ để tạo tiền tố trực tiếp. Nó không thể chứa chuỗi mục tiêu, bao gồm cả việc vượt qua ranh giới nơi nó gặp chuỗi được nối thêm. Và việc phân phối độ dài tiền tố không chỉ phụ thuộc vào độ dài của chuỗi mục tiêu, mà cả cấu trúc của nó.
xnor

10
Một số chương trình máy tính giải pháp dưới đây, chẳng hạn như .W!}zH+ZOrd\k, trông rất giống với những gì một con khỉ đã gõ.
Jeppe Stig Nielsen

Câu trả lời:


12

C, 192 byte

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

Hãy thử trực tuyến!

Bây giờ nó là một mớ hỗn độn, nhưng ít nhất nó hoạt động ngay cả đối với các trường hợp góc ...


C,  63   62  61 byte

Cảm ơn @Jonathan Frech vì đã tiết kiệm một byte!

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

Hãy thử trực tuyến!


Tôi hoàn toàn không biết tại sao điều này dừng lại khi nó đạt s, +1
ATaco

1
@ATaco Nó dừng lại khi iphát triển đủ lớn có s[i]nghĩa là bộ kết thúc null của chuỗi (ký tự 0).
Steadybox

Ồ, vì vậy thay vì ném các ký tự ngẫu nhiên vào nó cho đến khi s vô tình được tạo, nó sẽ ném các ký tự ngẫu nhiên vào nó cho đến khi đạt đến s. Thông minh.
ATaco

Nhiều như tôi thích câu trả lời này, tôi tin rằng nó bị hỏng cho một đầu vào như "ab" khi khỉ rand gõ "aab".
zennehoy

Tôi đoán bạn cần một cái gì đó như KMP để cách tiếp cận này có thể hợp lệ. Giả sử chuỗi đầu vào là ababcvà khỉ tạo ra !!abababcchương trình của bạn sẽ dừng lại?
dùng202729

9

Python , 79 byte

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

Hãy thử trực tuyến!

Đây là lý thuyết hợp lý, nhưng sẽ sụp đổ sớm do giới hạn đệ quy của trăn (bạn có thể đặt chúng xa hơn để có kết quả lâu hơn)

Python, 84 byte

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

Hãy thử trực tuyến!

Chuỗi này phải hoạt động với các chuỗi tương đối dài hơn, vì nó không dựa vào đệ quy, với chi phí là 5 byte.


Bạn có thể lưu ba byte bằng cách sử dụng backticks để thực hiện chuyển đổi chuỗi (được hiển thị ở đây dưới dạng dấu ngoặc đơn ở bên phải đánh dấu)s+'randint(32,126)'
wnnmaw

1
@wnnmaw backticky randint(32,126)sẽ tạo ra một chuỗi số, không phải là ánh xạ char ascii
Uriel

8

Ohm v2 , 10 byte

Ý£D³ε‽α@§↔

Hãy thử trực tuyến!

Giải trình:

Ý£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 (cờ r) = 76 byte

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

Hãy thử trực tuyến!(Phải mất rất nhiều lần chạy để có câu trả lời cho đầu vào có độ dài 2, vì hầu hết thời gian bạn hết thời gian tính toán TIO được phép.)

Giải trình:

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

Điểm chuẩn: gần đúng, chỉ dành cho mục đích mở rộng

  • độ dài đầu vào: 1, 10 đầu vào ngẫu nhiên (chạy), thời gian trung bình: <1 s
  • độ dài đầu vào: 2, 10 đầu vào ngẫu nhiên (chạy), thời gian trung bình: 90 s
  • độ dài đầu vào: 3, 10 đầu vào ngẫu nhiên (chạy), thời gian trung bình: rất nhiều giờ!

7

Funky , 64 byte

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

Điều này sử dụng một vài thủ thuật mà tôi muốn sử dụng trong Funky, như một tên biến sau một từ khóa như trong whileSvà sử dụng thực tế là các chuỗi ngầm định cha mẹ chostring thư viện.

Ung dung

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

Hãy thử trực tuyến!


6
Vậy đó có phải là ... những con khỉ ngộ nghĩnh?
Sebastian Lenartowicz

7

Haskell , 100 byte

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

Hãy thử trực tuyến!

Ý tưởng cơ bản là tạo ra một danh sách vô hạn các ký tự randomRsvà dừng nó lại khi chúng ta tìm thấy chuỗi.


Một sự xấu hổ isPrefixOfkhông có trong bản Prelude tiêu chuẩn
Bergi

7

C # (.NET Core) , 86 byte

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

Tôi không thực sự thích việc tạo ra Randomví dụ này mất bao nhiêu , nhưng tôi không nghĩ có cách nào khác.

Hãy thử trực tuyến!


3
Chào mừng đến với PPCG! Hiện tại giải pháp của bạn không tạo đúng một ký tự ngẫu nhiên vì theo các tài liệu , giới hạn trên được truyền Random.Next(Int32,Int32)là độc quyền và do đó không phải là một trong các số được tạo. Điều này có thể được sửa chữa bằng cách thay thế 126bằng 127.
0 '

@ 0 'Rất tiếc, tôi đã nghĩ về nó trong khi viết, nhưng tôi quên kiểm tra nó trước khi đăng. Cảm ơn!
Wakawakamush

Thực sự có một cách xung quanh đó Random, bạn có thể loại bỏ khai báo biến! 79 byte
FlipTack

@FlipTack Thú vị, tôi đã thử điều đó trong C # Interactive và nó không hoạt động vì nó cứ tạo ra cùng một số. Thật kỳ lạ khi thấy nó hoạt động trong TIO.
Wakawakamush



6

R , 79 76 75 byte

-3 byte nhờ MickyT đã thay đổi bộ lấy mẫu ngẫu nhiên

-1 byte nhờ Robin Ryder đã điều chỉnh lại bộ lấy mẫu ngẫu nhiên

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

Hãy thử trực tuyến!


xin chào, mẫu của bạn có thể được thay thế bằngintToUtf8(runif(1,32,127))
MickyT

@MickyT xuất sắc, cảm ơn bạn!
Giuseppe

Bạn có thể lưu 1 byte với 32+95*runif(1)bộ lấy mẫu ngẫu nhiên.
Robin Ryder

6

Than, 15 14 12 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Chỉnh sửa: Đã lưu 2 byte do sửa lỗi tiếp theo trong Char than. Giải trình:

    θ           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

Octave , 62 byte

t=input(o="");while(~nnz(regexp(o,t)))o=[o,randi(95)+31];end;o

Hãy thử trực tuyến!

Giải trình:

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

Rất cám ơn Luis Mendo cho các chỉnh sửa!


1
Chào mừng đến với trang web! :)
DJMcMayhem

Bạn không thể thay thế isvectorbằng nnz? Và strfindbởi regexp. Ngoài ra, bạn có thể sử dụng randi(95)+31hoặc có thể thay thế toàn bộ sprintfcâu lệnh bằng cách o=[o,randi(95)+31];(chuyển đổi ngầm định thành char)
Luis Mendo

Ngoài ra, chúng tôi thường yêu cầu một chức năng hoặc một chương trình lấy đầu vào của nó (trái ngược với việc xác định một biến chứa đầu vào) - đại loại như thế này
Luis Mendo

Tôi đã cố gắng làm điều đó, nhưng tôi không thể nghĩ ra một cách ngắn gọn nên tôi đã bỏ qua nó. Sửa đổi tốt đẹp!
Alan

1
Hãy kết hợp những gợi ý đó vào câu trả lời của bạn. Đó là tiêu chuẩn trên trang web này
Luis Mendo


3

Alice , 21 byte

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

Hãy thử trực tuyến!

Giải trình

/...@
\.../

Đây là khuôn khổ cho hầu hết các chương trình tuyến tính hoạt động hoàn toàn trong chế độ Ordinal (xử lý chuỗi). IP bị trả lại theo đường chéo lên xuống thông qua chương trình hai lần, điều đó có nghĩa là mã thực tế có một chút xen kẽ kỳ lạ. Các lệnh theo thứ tự chúng thực sự được thực hiện là:

i!w" ~"rUd?z$Kdo

Chúng ta hãy đi qua điều này:

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 byte

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

Hãy thử trực tuyến!

(...)[*-1]trả về phần tử cuối cùng của chuỗi được xác định bởi ..., trong đó:

  • "" là yếu tố đầu tiên;

  • * ~ (" " .. "~").picktạo phần tử tiếp theo bằng cách nối thêm một ký tự ngẫu nhiên trong phạm vi thích hợp vào phần tử trước đó; và

  • * ~~ /$_/là điều kiện kết thúc, là phần tử hiện tại khớp với đối số đầu vào của hàm chính $_là một chuỗi con theo nghĩa đen.


Bạn có thể mất *~~-3 tio.run/##K0gtyjH7n1upoJamYPu/ Kẻ
Phil H

3

Java 8, 81 79 78 byte

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

-1 byte cảm ơn @ OlivierGrégoire đã chỉ cho tôi một lỗi (lớn>. <) Tôi đã mắc phải ..

Giải trình:

Hãy thử nó ở đây.

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
Nó phải 32+Math.random()*95. Có ... lỗi đã được sửa và một byte được lưu! ;-)
Olivier Grégoire

@ OlivierGrégoire Woops .. Đã xem mã thập lục phân cho khoảng trắng, nhưng số thập phân thông thường cho dấu ngã ..>.> Cảm ơn bạn đã chú ý. Không chắc là tôi đã bỏ lỡ điều đó như thế nào, vì đầu ra rõ ràng có biểu tượng 'không thể in được' ..
Kevin Cruijssen

3

05AB1E , 10 9 byte (-1 @ Emigna)

[žQΩJD¹å#

Hãy thử trực tuyến!


Làm khỉ với tôi.


[              | 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
Bạn có thể làm Ωthay vì .R.
Emigna

2
Lol, sử dụng Ohm, để đánh bại Ohm v2. Thật tuyệt
Bạch tuộc ma thuật Urn

2

QBIC , 33 byte

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

Giải trình

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

Chạy mẫu:

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 byte

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

Chạy như ống với -nR. Không phù hợp với nguyên nhân TIO của thời gian chờ có thể xảy ra.

Chèn khoảng trắng giữa các dấu ngoặc kép cho PHP cũ hơn 7.1.

Đây 51 + 1 byte phiên bản sẽ thất bại nếu đầu vào là 0:

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

2

Javascript 74 byte

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

gọi như thế này:

s('hi')

@Giuseppe thx, tôi đã thêm nó vào số byte
RuteNL

1
Tôi nghĩ rằng bạn phải thay đổi 94 thành 95 để mã hợp lệ
Hawkings

1
@Hawkings Yea, bạn nói đúng, từCharCode bỏ qua số thập phân có vẻ như. Cảm ơn đã chỉ ra điều đó!
RuteNL

Lưu một byte với ~b.searchthay vì b.includes.
Xù xì

@Shaggy Đẹp! Không biết về tìm kiếm
RuteNL


2

Pushy , 20 18 byte

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

Hãy thử trực tuyến!

Chương trình giữ một ngăn xếp len(input) ký tự dài và liên tục xóa ký tự đầu tiên và nối thêm một char ngẫu nhiên mới, cho đến khi đạt được chuỗi đầu vào ban đầu. Mỗi ký tự được in khi nó được thêm vào, tạo hiệu ứng mong muốn.

Giải trình:

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

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

Hãy thử trực tuyến!

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.

Có thể ngẫu nhiên chồng tràn. Điều này sử dụng hai tính năng được thêm gần đây trong Brachylog: biến toàn cục và siêu dữ liệu áp dụng cho đuôi .



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.