To dużo małp

35

Twierdzenie o nieskończonej małpie mówi, że w nieskończonym czasie maszyna wysyłająca nieskończony strumień losowych znaków zawsze będzie pisać dowolny tekst.

To brzmi dla mnie jak świetny pomysł na wyzwanie.

Proces

Aby małpować ciąg A, należy wykonać następujące kroki:

  1. Weź pusty ciąg. Nazwiemy ten ciąg B.
  2. Wybierz jednolicie losowy znak ASCII do wydrukowania (znaki w zakresie 0x20do 0x7E) i dodaj ten znak do B.
  3. Jeśli A jest podciągiem B, B jest naszym ciągiem małpy. W przeciwnym razie powtarzaj krok 2, aż A będzie podciągiem B.

Ten proces jest tylko przykładem, w zależności od języka mogą istnieć łatwiejsze metody. Nie musisz dokładnie stosować tej metody, o ile osiągnięty zostanie taki sam rozkład wyników.

Wyzwanie

Napisz program lub funkcję, która, biorąc pod uwagę niepuste ciągi znaków w dowolnym rozsądnym formacie , zwraca zmultipleksowaną wersję tego ciągu.

Twój program musi praktycznie działać tylko dla danych wejściowych o długości 3 lub mniejszej. W przypadku dłuższych danych wejściowych dozwolone jest wcześniejsze zakończenie z lub bez wysyłania czegokolwiek.

Przykład

Niestety, trudno jest stworzyć przykłady tego pytania ze względu na losowość i duże wyniki.

Mogę jednak podać jeden przykład danych wejściowych hina Hastebin.

Punktacja

Ponieważ jest to , wygrywa przesyłanie z najmniejszą liczbą bajtów.

LyricLy
źródło
Piaskownica
LyricLy
11
Czy musimy postępować zgodnie z opisaną procedurą, aby uzyskać wynik? Jeśli tak, jest to nie do zaobserwowania , co jest problematyczne. Jeśli nie, możemy wygenerować Bbezpośrednio, przygotowując do nieujemnej liczby nlosowych znaków A. Jedyny prawdziwy problem to znajomość rozkładu n(stawiam na rozkład geometryczny)
Luis Mendo,
1
@seshoumara Nie możesz.
LyricLy,
7
@LuisMendo Myślałem w ten sposób i właściwie nie jest łatwo wygenerować prefiks bezpośrednio. Nie może zawierać ciągu docelowego, w tym przekraczania granicy w miejscu, w którym napotyka dołączony ciąg. Rozkład długości prefiksów zależy nie tylko od długości łańcucha docelowego, ale także od jego struktury.
xnor
10
Niektóre z poniższych programów komputerowych z rozwiązaniami, takie jak .W!}zH+ZOrd\k, wyglądają bardzo podobnie do tego, co napisała małpa.
Jeppe Stig Nielsen

Odpowiedzi:

12

C, 192 bajty

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

Wypróbuj online!

Teraz jest bałagan, ale przynajmniej działa nawet w narożnych skrzyniach ...


C,  63   62  61 bajtów

Dzięki @Jonathan Frech za uratowanie bajtu!

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

Wypróbuj online!

Steadybox
źródło
Absolutnie nie mam pojęcia, dlaczego to się zatrzymuje, gdy uderza s, +1
ATaco
1
@ATaco Zatrzymuje się, gdy istaje się wystarczająco duży, co s[i]odnosi się do zerowego terminatora łańcucha (znak 0).
Steadybox,
Och, więc zamiast rzucać w nią losowymi postaciami, dopóki s nie zostanie przypadkowo utworzony, rzuca w niego losowymi postaciami, aż osiągnie s. Mądry.
ATaco,
Chociaż bardzo podoba mi się ta odpowiedź, uważam, że psuje się ona dla danych wejściowych takich jak „ab”, gdy małpy rand wpisują „aab”.
zennehoy
Myślę, że potrzebujesz czegoś takiego jak KMP, aby to podejście było ważne. Załóżmy, że ciąg wejściowy jest, ababca małpa generuje, !!abababcczy Twój program się zatrzyma?
user202729,
9

Python , 79 bajtów

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

Wypróbuj online!

Jest to teoretycznie poprawne, ale zawiesi się wcześnie z powodu limitów rekurencji Pythona (możesz ustawić je dalej, aby uzyskać dłuższe wyniki)

Python, 84 bajty

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

Wypróbuj online!

Ten powinien działać na relatywnie dłuższe łańcuchy, ponieważ nie polega na rekurencji, kosztem 5 bajtów.

Uriel
źródło
Możesz zapisać trzy bajty, używając odwrotnych znaków do konwersji ciągów (pokazane tutaj jako pojedyncze cudzysłowy po prawej stronie przeceny)s+'randint(32,126)'
wnnmaw
1
@wnnmaw backticked randint(32,126)wygeneruje ciąg liczby, a nie mapowanie znaków ascii
Uriel,
8

Ohm v2 , 10 bajtów

Ý£D³ε‽α@§↔

Wypróbuj online!

Wyjaśnienie:

Ý£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
źródło
8

GNU sed + coreutils, 75 + 1 (flaga r) = 76 bajtów

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

Wypróbuj online! (Uzyskanie odpowiedzi dla danych wejściowych o długości 2 wymaga wielu przebiegów, ponieważ w większości przypadków kończy się dozwolony czas obliczeń TIO.)

Wyjaśnienie:

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: przybliżony, wyłącznie do celów skalowania

  • długość wejściowa: 1, 10 losowych wejść (przebiegów), średni czas: <1 s
  • długość wejściowa: 2, 10 losowych wejść (przebiegów), średni czas: 90 s
  • długość wejściowa: 3, 10 losowych wejść (przebiegów), średni czas: wiele godzin!
seshoumara
źródło
7

Funky , 64 bajty

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

Wykorzystuje kilka sztuczek, których chciałem użyć w Funky, takich jak nazwa zmiennej po słowie kluczowym jak w whileSi wykorzystując fakt, że ciągi domyślnie nadrzędne do stringbiblioteki.

Bez golfa

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

Wypróbuj online!

ATaco
źródło
6
Czy to by było ... Funky małpy?
Sebastian Lenartowicz,
7

Haskell , 100 bajtów

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

Wypróbuj online!

Podstawową ideą jest wygenerowanie nieskończonej listy znaków randomRsi zatrzymanie jej po znalezieniu łańcucha.

użytkownik 1472751
źródło
Wstyd isPrefixOfnie jest w standardowym Preludium…
Bergi
7

C # (.NET Core) , 86 bajtów

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

Nie podoba mi się, ile Randomzajmuje tworzenie instancji, ale nie sądzę, aby można było to obejść.

Wypróbuj online!

Wakawakamush
źródło
3
Witamy w PPCG! Obecnie twoje rozwiązanie nie generuje poprawnie losowego znaku, ponieważ zgodnie z dokumentami górna granica przekazywana Random.Next(Int32,Int32)jest do wyłączności, a więc nie jest jedną z generowanych liczb. Można to naprawić, zastępując 126przez 127.
0 '
@ 0 'Ups, pomyślałem o tym podczas pisania, ale zapomniałem to sprawdzić przed opublikowaniem. Dzięki!
Wakawakamush
Tak naprawdę istnieje sposób na obejście tego problemu Random, możesz usunąć deklarację zmiennej! 79 bajtów
FlipTack
@FlipTack Interesujące, próbowałem tego w C # Interactive i nie działało, ponieważ po prostu generowało ten sam numer. Dziwnie jest widzieć, że to działa w TIO.
Wakawakamush,
6

Perl 5, 31 +2 (-pa) bajtów

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

Wypróbuj online

Nahuel Fouilleul
źródło
Możesz zapisać 3 bajty, ponieważ \E$jest obcy
Zaid
w rzeczy
samej
zapisano jeszcze 2 bajty
Nahuel Fouilleul
To podstępne. Naprawdę bardzo fajnie :)
Zaid
a nawet więcej, -3 bajty
Nahuel Fouilleul
6

R , 79 76 75 bajtów

-3 bajty dzięki MickyT za zmianę losowego samplera

-1 bajt podziękowania dla Robina Rydera za ponowne poprawienie losowego samplera

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

Wypróbuj online!

Giuseppe
źródło
cześć, twoja próbka może zostać zastąpiona przezintToUtf8(runif(1,32,127))
MickyT
@MickyT doskonale, dziękuję!
Giuseppe,
Możesz zapisać 1 bajt 32+95*runif(1)jako swój losowy próbnik.
Robin Ryder
6

Węgiel drzewny, 15 14 12 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 2 bajty ze względu na kolejną naprawę błędu w Charcoal. Wyjaśnienie:

    θ           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
źródło
5

Rubin , 42 bajty

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

Wypróbuj online!

Przywróć Monikę iamnotmaynard
źródło
4

Pyth - 14 bajtów

.W!}zH+ZOrd\k

Wypróbuj online tutaj .

Maltysen
źródło
W!}Qk=+kpOrd\ ma również 14 bajtów, SE nie radzi sobie z formatowaniem z powodu braku możliwości wydruku, ale zakres jest generowany w ten sam sposób
Dave
4

Mathematica, 65 bajtów

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

Wypróbuj online!

-3 bajty od Jonathana Frecha

J42161217
źródło
Myślę, że FromCharacterCode[RandomInteger@94+32]jest odpowiednikiem krótszego RandomChoice@CharacterRange[32,126].
Jonathan Frech,
@JathanathanFrech tak, jest!
J42161217,
4

Lua , 99 102 bajtów

  • Zapisano błąd dzięki ATaco , który dodał trzy bajty.
function f(B)s=string S=""while not(s.find(S,B,1,1))do S=S..s.char(math.random(32,126))end print(S)end

Wypróbuj online!

Jonathan Frech
źródło
4

Oktawa , 62 bajty

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

Wypróbuj online!

Wyjaśnienie:

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

Ogromne podziękowania dla Luisa Mendo za edycję!

Alan
źródło
1
Witamy na stronie! :)
DJMcMayhem
Nie można zastąpić isvectorprzez nnz? I strfindprzez regexp. Możesz także użyć randi(95)+31, a może zastąpić całe sprintfzdanie przez o=[o,randi(95)+31];(niejawna konwersja na char)
Luis Mendo,
Ponadto, mamy zazwyczaj wymagają funkcji lub program, który pobiera sygnał wejściowy (w przeciwieństwie do definiowania zmiennej zawierający wejście) - coś jak ten
Luis Mendo
Próbowałem to zrobić, ale nie mogłem wymyślić zwięzłego sposobu, więc ominąłem to. Niezłe wersje!
Alan
1
Zachęcamy do włączenia tych sugestii do swojej odpowiedzi. To standard na tej stronie
Luis Mendo,
4

Japt , 16 14 11 bajtów

;_øU}a@P±Eö

Spróbuj

Kudłaty
źródło
3

Alice , 21 bajtów

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

Wypróbuj online!

Wyjaśnienie

/...@
\.../

Jest to struktura dla programów głównie liniowych, które działają całkowicie w trybie Ordinal (przetwarzanie łańcuchów). Adres IP dwukrotnie odbija się po przekątnej w górę iw dół przez program, co oznacza, że ​​rzeczywisty kod jest nieco dziwnie przeplatany. Polecenia w kolejności, w jakiej są wykonywane, to:

i!w" ~"rUd?z$Kdo

Przejdźmy przez to:

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
źródło
3

Perl 6 , 39 bajtów

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

Wypróbuj online!

(...)[*-1]zwraca ostatni element zdefiniowanej sekwencji ..., z czego:

  • "" jest pierwszym elementem;

  • * ~ (" " .. "~").pickgeneruje następny element poprzez dołączenie losowego znaku z odpowiedniego zakresu do poprzedniego elementu; i

  • * ~~ /$_/to warunek końcowy, to znaczy, że bieżący element pasuje do argumentu wejściowego funkcji głównej $_jako dosłowny podłańcuch.

Sean
źródło
Możesz stracić *~~za -3 tio.run/##K0gtyjH7n1upoJamYPu/…
Phil H
3

Java 8, 81 79 78 bajtów

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

-1 bajka dzięki @ OlivierGrégoire za wskazanie mi (dużego>. <) Błędu, który popełniłem ..

Wyjaśnienie:

Wypróbuj tutaj.

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
źródło
1
Powinno być 32+Math.random()*95. Tam ... błąd naprawiony i bajt zapisany! ;-)
Olivier Grégoire,
@ OlivierGrégoire Woops .. Spojrzałem na kod szesnastkowy dla spacji, ale zwykły dziesiętny dla tyldy ..>.> Dziękuję za zauważenie. Nie jestem pewien, jak to przeoczyłem, ponieważ na wydruku wyraźnie
widniały
3

05AB1E , 10 9 bajtów (-1 @ Emigna)

[žQΩJD¹å#

Wypróbuj online!


Zrób ze mną małpę.


[              | 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.
Urna Magicznej Ośmiornicy
źródło
1
Możesz zrobić Ωzamiast .R.
Emigna
2
Lol, używając Ohma, pokonał Ohma v2. Jak miło.
Magic Octopus Urn
2

QBIC , 33 bajty

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

Wyjaśnienie

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

Przykładowy przebieg:

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
źródło
2

PHP, 55 + 1 bajtów

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

Uruchom jako potok z -nR. Nie nadaje się do TIO z powodu prawdopodobnego przekroczenia limitu czasu.

Wstaw spację między znakami cudzysłowu dla PHP starszego niż 7.1.

Ta wersja 51 + 1 bajtów zakończy się niepowodzeniem, jeśli dane wejściowe to 0:

while(!strstr($argn,$s.=chr(rand(32,126))));echo$s;
Tytus
źródło
2

Javascript 74 bajty

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

zadzwoń tak:

s('hi')
RuteNL
źródło
@Giuseppe thx, dodałem go w liczbie bajtów
RuteNL
1
Myślę, że musisz zmienić 94 na 95, aby kod był ważny
Hawkings,
1
@ Hawkings Tak, masz rację, fromCharCode ignoruje ułamki dziesiętne. Dzięki za wskazanie tego!
RuteNL,
Zapisz bajt za pomocą ~b.searchzamiast b.includes.
Shaggy
@Shaggy Nice! Nie wiedziałem o wyszukiwaniu
RuteNL
2

Natrętny , 20 18 bajtów

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

Wypróbuj online!

Program utrzymuje stos len(input) długi znaków i stale usuwa pierwszy i dołącza nowy losowy znak, aż do osiągnięcia początkowego ciągu wejściowego. Każda postać jest drukowana w miarę dodawania, tworząc pożądany efekt.

Wyjaśnienie:

                      \ == 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
źródło
2

Brachylog , 17 bajtów

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

Wypróbuj 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.

Może losowo przepełnić stos. Wykorzystuje to dwie ostatnio dodane funkcje Brachylog: zmienne globalne i metapredykat „zastosuj do ogona” .

Niepowiązany ciąg
źródło
1

Pyth, 13 bajtów

W!}z=akpOrd\

gdzie znak niedrukowalny to 0x7F.

Test

Steven H.
źródło
1

Bash 94 bajty

p=printf\ -v;until [[ $s = *"$1" ]];do $p x %x $[32+RANDOM%95];$p c \\x$x;s+=$c;done;echo "$s"

Wypróbuj online

Nahuel Fouilleul
źródło