Das sind viele Affen

35

Der Satz vom unendlichen Affen besagt, dass eine Maschine, die einen endlosen Strom zufälliger Zeichen sendet, bei unendlicher Zeit immer einen bestimmten Text eingibt.

Das klingt für mich nach einer großartigen Idee für eine Herausforderung.

Verarbeiten

Um einen String A mit einem Affen zu versehen, müssen folgende Schritte ausgeführt werden:

  1. Nehmen Sie eine leere Zeichenfolge. Wir werden diesen String B nennen.
  2. Wählen Sie ein gleichmäßig zufälliges druckbares ASCII-Zeichen (Zeichen im Bereich 0x20bis 0x7E) und fügen Sie dieses Zeichen zu B hinzu.
  3. Wenn A eine Teilzeichenfolge von B ist, ist B unsere affengroße Zeichenfolge. Andernfalls wiederholen Sie Schritt 2, bis A eine Teilzeichenfolge von B ist.

Dieser Vorgang ist nur ein Beispiel. Je nach Sprache gibt es möglicherweise einfachere Methoden. Sie müssen diese Methode nicht genau befolgen, solange die gleiche Verteilung der Ausgaben erzielt wird.

Die Herausforderung

Schreiben Sie ein Programm oder eine Funktion, die bei einer nicht leeren Zeichenfolge in einem angemessenen Format eine affengroße Version dieser Zeichenfolge zurückgibt.

Ihr Programm muss praktisch nur für Eingaben mit einer Länge von 3 oder weniger funktionieren. Bei längeren Eingaben kann vorzeitig mit oder ohne Ausgabe beendet werden.

Beispiel

Leider ist es schwierig, Beispiele für diese Frage zu erstellen, da sie zufällig ist und große Ergebnisse liefert.

Ich kann jedoch ein einziges Beispiel für die Eingabe hiin Hastebin angeben.

Wertung

Da es sich um , die Vorlage mit dem wenigsten Bytes gewinnt.

Textlich
quelle
Sandbox
Text
11
Müssen wir die beschriebene Prozedur befolgen, um die Ausgabe zu erzeugen? Wenn ja, ist dies eine nicht beobachtbare Anforderung , die problematisch ist. Wenn nicht, können wir Bdirekt generieren, indem wir eine nicht negative Anzahl nzufälliger Zeichen voranstellen A. Das einzige wirkliche Problem ist dann, die Verteilung von n(ich wette auf eine geometrische Verteilung)
Luis Mendo
1
@seshoumara Möglicherweise nicht.
Text
7
@ LuisMendo Ich dachte in diese Richtung, und es ist eigentlich nicht einfach, das Präfix direkt zu generieren. Es darf keine Zielzeichenfolge enthalten, auch nicht die Grenze, an der es auf die angehängte Zeichenfolge trifft. Und die Verteilung der Präfixlängen hängt nicht nur von der Länge der Zielzeichenfolge ab, sondern auch von ihrer Struktur.
xnor
10
Einige der unten aufgeführten Lösungscomputerprogramme, wie z. B. .W!}zH+ZOrd\k, ähneln stark dem, was ein Affe eingegeben hat.
Jeppe Stig Nielsen

Antworten:

12

C 192 Bytes

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

Probieren Sie es online!

Es ist jetzt ein Chaos, aber zumindest funktioniert es sogar für die Eckfälle ...


C  63   62  61 Bytes

Vielen Dank an Jonathan Frech für das Speichern eines Bytes!

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

Probieren Sie es online!

Steadybox
quelle
Ich habe absolut keine Ahnung, warum dies stoppt, wenn es s, +1
ATaco
1
@ATaco Es wird angehalten, wenn es igroß genug wird, um s[i]auf den Nullterminator der Zeichenfolge (Zeichen 0) zu verweisen.
Steadybox
Oh, also anstatt zufällige Zeichen darauf zu werfen, bis s versehentlich erzeugt wird, wirft es zufällige Zeichen darauf, bis es s erreicht. Clever.
ATaco
So sehr ich diese Antwort mag, glaube ich, dass sie bei einer Eingabe wie "ab" abbricht, wenn die Rand-Affen "aab" eingeben.
Zennehoy
Ich denke, Sie brauchen so etwas wie KMP, damit dieser Ansatz gültig ist. Angenommen, die Eingabezeichenfolge ist ababcund der Affe generiert !!abababcwird Ihr Programm anhalten?
User202729
9

Python , 79 Bytes

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

Probieren Sie es online!

Dies ist theoretisch sinnvoll, stürzt jedoch aufgrund der Rekursionsbeschränkungen von Python vorzeitig ab (Sie können sie weiter einstellen, um längere Ergebnisse zu erzielen).

Python, 84 Bytes

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

Probieren Sie es online!

Dieser sollte für relativ längere Zeichenfolgen funktionieren, da er nicht rekursiv ist und 5 Byte kostet.

Uriel
quelle
Sie können drei Bytes einsparen, indem Sie Backticks für die String-Konvertierung verwenden (hier als einfache Anführungszeichen rechts neben dem s+'randint(32,126)'
Abdruck dargestellt
1
@wnnmaw backticked randint(32,126)würde eine Zeichenfolge der Zahl erzeugen, nicht die ASCII-Char-Zuordnung
Uriel
8

Ohm v2 , 10 Bytes

Ý£D³ε‽α@§↔

Probieren Sie es online!

Erläuterung:

Ý£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
Nick Clifford
quelle
8

GNU sed + coreutils, 75 + 1 (r flag) = 76 Bytes

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

Probieren Sie es online! (Die Antwort für eine Eingabe der Länge 2 ist in vielen Durchläufen erforderlich, da Ihnen die zulässige TIO-Rechenzeit meistens ausgeht.)

Erläuterung:

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

Benchmark: ungefähre Angabe, nur zu Skalierungszwecken

  • Eingabelänge: 1, 10 zufällige Eingaben (Läufe), durchschnittliche Zeit: <1 s
  • Eingabelänge: 2, 10 zufällige Eingaben (Läufe), durchschnittliche Zeit: 90 s
  • Eingabelänge: 3, 10 zufällige Eingaben (Läufe), durchschnittliche Zeit: viele Stunden!
Seshoumara
quelle
7

Funky , 64 Bytes

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

Dies verwendet ein paar Tricks, die ich in Funky verwenden wollte, wie einen Variablennamen nach einem Schlüsselwort wie in whileSund die Tatsache, dass Zeichenfolgen implizit übergeordnet zur stringBibliothek sind.

Ungolfed

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

Probieren Sie es online!

Ein Taco
quelle
6
Also wäre das ... Funky Monkeys?
Sebastian Lenartowicz
7

Haskell , 100 Bytes

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

Probieren Sie es online!

Grundlegende Idee ist, eine unendliche Liste von Zeichen mit zu generieren randomRsund anzuhalten, sobald wir die Zeichenkette gefunden haben.

user1472751
quelle
Eine Schande isPrefixOfist nicht im Standard-Prelude ...
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;}

Ich mag es nicht wirklich, wie viel das Erstellen der RandomInstanz kostet, aber ich glaube nicht, dass es einen Weg gibt, dies zu umgehen.

Probieren Sie es online!

Wakawakamush
quelle
3
Willkommen bei PPCG! Gegenwärtig generiert Ihre Lösung kein zufälliges Zeichen, da gemäß den Dokumenten die Obergrenze, an die übergeben Random.Next(Int32,Int32)wird, exklusiv ist und daher keine der generierten Zahlen. Dies kann durch Ersetzen 126durch behoben werden 127.
0 '
@ 0 'Hoppla, ich habe beim Schreiben darüber nachgedacht, aber ich habe vergessen, es vor dem Posten zu überprüfen. Vielen Dank!
Wakawakamush
Es gibt tatsächlich einen Ausweg, so lange Randomkönnen Sie die Variablendeklaration entfernen! 79 Bytes
FlipTack
@FlipTack Interessanterweise habe ich das in C # Interactive versucht und es hat nicht funktioniert, weil immer wieder die gleiche Zahl generiert wurde. Seltsam zu sehen, dass es in TIO funktioniert.
Wakawakamush
6

Perl 5, 31 +2 (-pa) Bytes

}{$_.=chr 32+rand 95until/\Q@F/

Probieren Sie es online aus

Nahuel Fouilleul
quelle
Sie können 3 Bytes sparen, da dies \E$irrelevant ist
Zaid
in der Tat, danke, dass Sie bemerkt haben
Nahuel Fouilleul
2 weitere Bytes gespeichert
Nahuel Fouilleul
Das ist hinterhältig. Sehr schön in der Tat :)
Zaid
und noch mehr, -3Bytes
Nahuel Fouilleul
6

R , 79 76 75 Bytes

-3 Bytes dank MickyT für den Wechsel des Zufallssamplers

-1 Byte Dank an Robin Ryder für die erneute Optimierung des Zufallssamplers

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

Probieren Sie es online!

Giuseppe
quelle
hi, dein sample könnte ersetzt werden durchintToUtf8(runif(1,32,127))
MickyT
@ MickyT ausgezeichnet, danke!
Giuseppe
Sie können 1 Byte mit 32+95*runif(1)als Zufallsgenerator speichern .
Robin Ryder
6

Kohle, 15 14 12 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 2 Bytes aufgrund einer nachfolgenden Fehlerbehebung in Charcoal gespeichert. Erläuterung:

    θ           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
Neil
quelle
5

Ruby , 42 Bytes

->w,s=""{s+=[*" "..?~].sample;s[w]?s:redo}

Probieren Sie es online!

Setzen Sie Monica iamnotmaynard wieder ein
quelle
4

Pyth - 14 Bytes

.W!}zH+ZOrd\k

Probieren Sie es hier online aus .

Maltysen
quelle
W!}Qk=+kpOrd\ ist ebenfalls 14 Bytes, SE ist mit der Formatierung durcheinander, weil nicht druckbar, aber der Bereich wird auf die gleiche Weise generiert
Dave
4

Mathematica, 65 Bytes

""//.x_/;x~StringFreeQ~#:>x<>RandomChoice@CharacterRange[32,126]&

Probieren Sie es online!

-3 Bytes von Jonathan Frech

J42161217
quelle
Ich denke FromCharacterCode[RandomInteger@94+32]ist gleichbedeutend mit der kürzeren RandomChoice@CharacterRange[32,126].
Jonathan Frech
@ JonathanFrech ja, das ist es!
J42161217
4

Oktave , 62 Bytes

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

Probieren Sie es online!

Erläuterung:

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

Vielen Dank an Luis Mendo für die Änderungen!

Alan
quelle
1
Willkommen auf der Seite! :)
DJMcMayhem
Können Sie nicht isvectordurch ersetzen nnz? Und strfindvon regexp. Sie können auch randi(95)+31die gesamte sprintfAnweisung verwenden oder durch o=[o,randi(95)+31];(implizite Konvertierung in char) ersetzen
Luis Mendo,
Auch wir in der Regel eine Funktion oder ein Programm benötigen , das seine Eingabe verwendet (im Gegensatz zu einer variablen Definition der Eingabe enthält) - so etwas wie diese
Luis Mendo
Ich habe versucht, das zu tun, aber ich konnte mir keine prägnante Methode vorstellen, also habe ich sie übersprungen. Schöne Überarbeitungen!
Alan
1
Nehmen Sie diese Vorschläge gerne in Ihre Antwort auf. Das ist Standard auf dieser Seite
Luis Mendo
4

Japt , 16 14 11 Bytes

;_øU}a@P±Eö

Versuch es

Zottelig
quelle
3

Alice , 21 Bytes

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

Probieren Sie es online!

Erläuterung

/...@
\.../

Dies ist der Rahmen für meist lineare Programme, die vollständig im Ordinal-Modus (Zeichenfolgenverarbeitung) arbeiten. Die IP springt zweimal diagonal auf und ab durch das Programm, was bedeutet, dass der tatsächliche Code etwas seltsam verschachtelt ist. Die Befehle lauten in der Reihenfolge, in der sie tatsächlich ausgeführt werden:

i!w" ~"rUd?z$Kdo

Lass uns das durchgehen:

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.
Martin Ender
quelle
3

Perl 6 , 39 Bytes

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

Probieren Sie es online!

(...)[*-1]gibt das letzte Element der Sequenz zurück, die definiert ist durch ...:

  • "" ist das erste Element;

  • * ~ (" " .. "~").pickgeneriert das nächste Element, indem ein zufälliges Zeichen im entsprechenden Bereich an das vorherige Element angehängt wird; und

  • * ~~ /$_/ist die Endbedingung, dh, das aktuelle Element entspricht dem Eingabeargument der Hauptfunktion $_als literaler Teilstring.

Sean
quelle
Sie können die *~~für -3 tio.run/##K0gtyjH7n1upoJamYPu/…
Phil H
3

Java 8, 81 79 78 Bytes

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

-1 Byte danke an @ OlivierGrégoire für den Hinweis auf einen (großen>. <) Fehler, den ich gemacht habe ..

Erläuterung:

Probieren Sie es hier aus.

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
Kevin Cruijssen
quelle
1
Es sollte so sein 32+Math.random()*95. Dort ... Fehler behoben und ein Byte gespeichert! ;-)
Olivier Grégoire
@ OlivierGrégoire Woops .. Habe den Hexadezimalcode für das Leerzeichen, aber die reguläre Dezimalzahl für die Tilde ..>.> Danke, dass du es bemerkt hast. Nicht sicher, wie ich das verpasst habe, da die Ausgabe eindeutig "nicht druckbare" Symbole hatte.
Kevin Cruijssen
3

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

[žQΩJD¹å#

Probieren Sie es online!


Mach den Affen mit mir.


[              | 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.
Magische Kraken-Urne
quelle
1
Sie können Ωanstelle von tun .R.
Emigna
2
Lol, mit einem Ohm, um Ohm v2 zu schlagen. Wie schön.
Magic Octopus Urn
2

QBIC , 33 Bytes

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

Erläuterung

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

Probelauf:

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/[email protected]"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!)=}[email protected]//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
steenbergh
quelle
2

PHP, 55 + 1 Bytes

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

Als Rohr mit laufen lassen -nR. Nicht geeignet für TIO wegen möglicher Zeitüberschreitung.

Fügen Sie zwischen den Anführungszeichen für PHP älter als 7.1 ein Leerzeichen ein.

Diese 51 + 1-Byte- Version schlägt fehl, wenn die Eingabe wie folgt lautet 0:

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

Javascript 74 Bytes

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

ruf so an:

s('hi')
RuteNL
quelle
@ Giuseppe thx, ich habe es in der
Byteanzahl
1
Ich denke, Sie müssen 94 auf 95 ändern, damit der Code gültig ist
Hawkings
1
@ Hawkings Ja, du hast recht, fromCharCode ignoriert Dezimalstellen, wie es scheint. Vielen Dank für den Hinweis!
RuteNL
Speichern Sie ein Byte mit ~b.searchanstelle von b.includes.
Shaggy
@ Shaggy Schön!
Wusste
2

Aufdringlich , 20 bis 18 Bytes

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

Probieren Sie es online!

Das Programm behält einen Stapel von len(input)Zeichen bei, entfernt den ersten ständig und hängt einen neuen zufälligen Buchstaben an, bis die anfängliche Eingabezeichenfolge erreicht ist. Jedes Zeichen wird beim Hinzufügen gedruckt, wodurch der gewünschte Effekt erzielt wird.

Erläuterung:

                      \ == 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
FlipTack
quelle
2

Brachylog , 17 Bytes

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

Probieren Sie es online!

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.

Kann Überlauf zufällig stapeln. Hierbei werden zwei kürzlich hinzugefügte Funktionen in Brachylog verwendet: globale Variablen und das Metapredikat "Schwanz anwenden" .

Nicht verwandte Zeichenfolge
quelle
1

Pyth, 13 Bytes

W!}z=akpOrd\

wobei das nicht druckbare Zeichen 0x7F ist.

Prüfung

Steven H.
quelle