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.



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!


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.


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

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!

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!


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.


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!


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

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!


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



4

Mathematica, 65 Bytes

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

Probieren Sie es online!

-3 Bytes von Jonathan Frech


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!


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


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.

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.


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

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.

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

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

@ 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

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



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.