นั่นเป็นลิงจำนวนมาก


35

ทฤษฎีบทลิงอนันต์กล่าวว่าให้เวลาที่ไม่มีที่สิ้นสุด, เครื่องส่งกระแสที่ไม่รู้จบของตัวอักษรแบบสุ่มจะพิมพ์ข้อความใด ๆ ที่กำหนด

ฟังดูแล้วเหมือนความคิดที่ดีสำหรับความท้าทาย

กระบวนการ

เพื่อให้ลิงมีขนาดสตริง A ควรทำตามขั้นตอนต่อไปนี้:

  1. ใช้สตริงที่ว่างเปล่า เราจะเรียกสตริงนี้ว่า B
  2. เลือกอักขระ ASCII แบบสุ่มที่พิมพ์ได้อย่างสม่ำเสมอ (อักขระที่อยู่ในช่วง0x20ถึง0x7E) และเพิ่มอักขระนั้นเป็น B
  3. ถ้า A เป็นสตริงย่อยของ B, B เป็นสตริงลิงตัวเรา มิฉะนั้นให้ทำซ้ำขั้นตอนที่ 2 จนกว่า A จะเป็นสตริงย่อยของ B

กระบวนการนี้เป็นเพียงตัวอย่างเท่านั้นอาจมีวิธีที่ง่ายกว่านี้ขึ้นอยู่กับภาษาของคุณ คุณไม่จำเป็นต้องทำตามวิธีการนี้อย่างแน่นอนตราบใดที่การกระจายของผลลัพธ์ที่ได้เท่ากันสำเร็จ

ความท้าทาย

เขียนโปรแกรมหรือฟังก์ชั่นที่ให้สตริงที่ไม่ว่างในรูปแบบที่เหมาะสมส่งคืนเวอร์ชันลิงของสตริงนั้น

โปรแกรมของคุณใช้งานได้จริงกับอินพุตที่มีความยาว 3 หรือน้อยกว่าเท่านั้น สำหรับอินพุตที่ยาวกว่าจะอนุญาตให้ยกเลิกก่อนโดยมีหรือไม่มีเอาต์พุตใด ๆ

ตัวอย่าง

น่าเสียดายที่มันยากที่จะสร้างตัวอย่างสำหรับคำถามนี้เนื่องจากลักษณะแบบสุ่มของมันและเอาต์พุตขนาดใหญ่

อย่างไรก็ตามฉันสามารถจัดหาตัวอย่างเดียวสำหรับอินพุตhiบน Hastebin

เกณฑ์การให้คะแนน

ตั้งแต่นี้เป็นการส่งที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ



11
เราจำเป็นต้องทำตามโพรซีเดอร์ที่อธิบายเพื่อสร้างเอาต์พุตหรือไม่? ถ้าใช่นั่นเป็นข้อกำหนดที่ไม่สามารถสังเกตได้ซึ่งเป็นปัญหา ถ้าไม่ได้เราสามารถสร้างBได้โดยตรงโดย prepending จำนวนที่ไม่ใช่เชิงลบของตัวอักษรสุ่มn Aปัญหาจริงเพียงอย่างเดียวก็คือการรู้ว่าการกระจายตัวของn(ฉันเดิมพันในการกระจายทางเรขาคณิต)
ลูอิสเมนโด

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

1
@ ATaco มันหยุดเมื่อiมีขนาดใหญ่พอที่s[i]อ้างถึง null terminator ของสตริง (อักขระ 0)
Steadybox

โอ้แทนที่จะโยนตัวอักษรสุ่มไปที่มันจนกว่า s จะถูกสร้างขึ้นโดยไม่ได้ตั้งใจมันจะโยนตัวอักษรแบบสุ่มไปเรื่อย ๆ จนกว่าจะถึง s ฉลาด.
ATaco

เท่าที่ฉันชอบคำตอบนี้ฉันเชื่อว่ามันแบ่งสำหรับการป้อนข้อมูลเช่น "ab" เมื่อลิงแรนด์ประเภท "aab"
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 ไบต์


คุณสามารถบันทึกสามไบต์โดยใช้ backticks เพื่อทำการแปลงสตริง (แสดงที่นี่เป็นเครื่องหมายคำพูดเดี่ยวไปยังเครื่องหมายขวา)s+'randint(32,126)'
wnnmaw

1
@wnnmaw backticked randint(32,126)จะผลิตสตริงของตัวเลขที่ไม่ได้ทำแผนที่ ASCII ถ่าน
ยูเรียล


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

Funky , 64 ไบต์

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

วิธีนี้ใช้ลูกเล่นบางอย่างที่ฉันต้องการใช้ใน Funky เช่นชื่อตัวแปรหลังจากคำหลักเหมือนในwhileSและใช้ความจริงที่ว่าสตริงมีความหมายโดยนัยถึงพาเรนต์ของstringไลบรารี

Ungolfed

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

ลองออนไลน์!


6
ถ้างั้นแล้ว ... ลิงแสนขี้ขลาด?
เซบาสเตียน Lenartowicz

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$เป็นสิ่งภายนอก
Zaid

จริง ๆ ขอบคุณสำหรับการสังเกต
Nahuel Fouilleul

บันทึกอีก 2 ไบต์
Nahuel Fouilleul

นั่นเป็นเรื่องลับๆล่อๆ มีความสุขมากอย่างแน่นอน :)
Zaid

และยิ่งกว่านั้นคือ -3bytes
Nahuel Fouilleul


6

R , 79 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 ยอดเยี่ยมขอบคุณ!
Giuseppe

คุณสามารถบันทึก 1 ไบต์ด้วย32+95*runif(1)ตัวอย่างสุ่มของคุณ
Robin Ryder

6

Charcoal, 15 14 12 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด แก้ไข: บันทึก 2 ไบต์เนื่องจากการแก้ไขข้อบกพร่องที่ตามมาใน Charcoal คำอธิบาย:

    θ           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

Pyth - 14 ไบต์

.W!}zH+ZOrd\k

ลองมันออนไลน์ได้ที่นี่


W!}Qk=+kpOrd\ 14 ไบต์เช่นกัน SE จะล้อเล่นกับการจัดรูปแบบเพราะไม่สามารถพิมพ์ แต่ช่วงที่ถูกสร้างขึ้นในลักษณะเดียวกัน
เดฟ




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

คุณไม่สามารถแทนที่isvectorโดยnnz? และโดยstrfind regexpนอกจากนี้คุณสามารถใช้randi(95)+31หรืออาจแทนที่sprintfคำสั่งทั้งหมดโดยo=[o,randi(95)+31];(แปลงโดยปริยายเป็นตัวอักษร)
Luis Mendo

นอกจากนี้เรามักจะต้องการฟังก์ชั่นหรือโปรแกรมที่รับอินพุต (ตรงข้ามกับการกำหนดตัวแปรที่มีอินพุต) - สิ่งนี้
Luis Mendo

ฉันพยายามทำสิ่งนั้น แต่ฉันไม่สามารถคิดถึงวิธีรัดกุมดังนั้นฉันจึงข้ามมันไป แก้ไขได้ดี!
อลัน

1
อย่าลังเลที่จะรวมคำแนะนำเหล่านั้นไว้ในคำตอบของคุณ นั่นเป็นมาตรฐานในเว็บไซต์นี้
หลุยส์เมนโด


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/…
Phil 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มันควรจะเป็น ที่นั่น ... แก้ไขข้อผิดพลาดและบันทึกไบต์! ;-)
Olivier Grégoire

@ OlivierGrégoire Woops .. ดูที่รหัสเลขฐานสิบหกสำหรับช่องว่าง แต่เป็นเลขทศนิยมปกติสำหรับ tilde .. >.> ขอขอบคุณที่สังเกต ไม่แน่ใจว่าฉันพลาดไปได้อย่างไรเนื่องจากผลลัพธ์นั้นมีสัญลักษณ์ 'unprintable' อย่างชัดเจน
เควินครู

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 เพื่อเอาชนะ Ohm v2 ดีแค่ไหน.
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 ของการหมดเวลาที่น่าจะเป็น

แทรกช่องว่างระหว่างเครื่องหมายคำพูดสำหรับ PHP ที่เก่ากว่า 7.1

รุ่น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 ฉันได้มันเพิ่มในการนับไบต์
RuteNL

1
ฉันคิดว่าคุณต้องเปลี่ยน 94 เป็น 95 เพื่อให้รหัสนั้นถูกต้อง
Hawkings

1
@ เหยี่ยวใช่แล้วคุณถูกต้องจาก CharCode ละเว้นทศนิยมดูเหมือนว่า ขอบคุณที่ชี้นำ!
RuteNL

บันทึกไบต์ที่มีแทน~b.search b.includes
Shaggy

@Shaggy Nice! ไม่ทราบเกี่ยวกับการค้นหา
RuteNL


2

รุก , 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: ตัวแปรทั่วโลกและมีผลบังคับใช้ไปหาง metapredicate



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.