Ini pada akhirnya akan berhenti ...


41

Diberikan string input S, cetak Sdiikuti oleh pemisah tidak kosong dengan cara berikut:

  • Langkah 1: Smemiliki 1/2peluang untuk dicetak, dan 1/2kesempatan bagi program untuk berakhir.

  • Langkah 2: Smemiliki 2/3peluang untuk dicetak, dan 1/3kesempatan bagi program untuk berakhir.

  • Langkah 3: Smemiliki 3/4peluang untuk dicetak, dan 1/4kesempatan bagi program untuk berakhir.

  • ...

  • Langkah n: Smemiliki n/(n+1)peluang untuk dicetak, dan 1/(n+1)kesempatan bagi program untuk berakhir.

Catatan

  • String input hanya akan terdiri dari karakter yang dapat diterima dalam tipe string bahasa Anda.

  • Pemisah non-kosong dapat digunakan, asalkan selalu sama. Diharapkan separator dicetak setelah cetakan terakhir Ssebelum program berakhir.

  • Program ini memiliki 1/2peluang untuk mengakhiri sebelum mencetak apa pun.

  • Baris baru yang tertinggal dapat diterima.

  • Jawaban Anda harus melakukan upaya tulus untuk menghormati probabilitas yang dijelaskan. Jelas, ketika nbesar ini akan semakin tidak benar. Penjelasan yang tepat tentang bagaimana probabilitas dihitung dalam jawaban Anda (dan mengapa mereka menghormati spesifikasi, mengabaikan pseudo-randomness dan masalah angka besar) sudah cukup.

Mencetak gol

Ini adalah , jadi jawaban tersingkat dalam byte menang.


Bisakah pemisah menjadi string kosong?
rturnbull

16
@ Artbullull Yah tidak, karena dalam hal ini tidak ada pemisah.
Fatalkan

Apakah kita harus mencetak satu demi satu, atau bisakah kita mencetak semuanya ketika program berakhir?
Dennis

@Dennis Satu demi satu.
Fatalkan

Jawaban:


18

Pyth , 7 byte

WOh=hZQ

Cobalah online!

Bagaimana itu bekerja

Kodesemu:

while rand_int_below(1 + (Z += 1)):
    print(input)

Pyth beats 05AB1E lagi bukan?
Erik the Outgolfer

Bukankah pernyataan cetak membutuhkan probabilitasnya sendiri bersama dengan probabilitas penghentian?
tuskiomi

1
@tuskiomi Nah, n / (n +1) hanya 1-1 / (n +1), atau 1 - (probabilitas pemutusan).
Adowrath

29

C #, 94 85 byte

Jawaban pertamaku!

using System;s=>{var r=new Random();for(var i=2;r.Next(i++)>0;)Console.Write(s+" ");}

Upaya sebelumnya (saya suka itu goto):

using System;s=>{var i=2;var r=new Random();a:if(r.Next(i++)>0){Console.Write(s+" ");goto a;}}

Tidak Disatukan:

using System;
class P
{
    static void Main()
    {
        Action<string> f = s =>
        {
            var r = new Random();
            for (var i = 2; r.Next(i++) > 0;) Console.Write(s + " ");
        };

        f("test");

        Console.ReadKey();
    }
}

Catatan: dalam C # Random.Next(N)metode mengembalikan integer nonnegatif dalam kisaran [0, N-1], jadi kita bisa memeriksa bahwa angka yang dikembalikan lebih besar dari 0.


1
Anda harus memasukkan using System;ke dalam jumlah byte Anda. Anda dapat mendeklarasikan rinline, tidak perlu mengaturnya untuk variabel: new Random().Next(i++). Anda tidak memerlukan tanda titik koma pada fungsi golf.
TheLethalCoder

1
Oh dan jawaban pertama yang bagus! Akan lebih pendek dari usaha saya :)
TheLethalCoder

@TheLethalCoder terima kasih atas komentar Anda! Saya mencoba menggunakan new Random().Next(i++)tetapi ketika saya mencoba menjalankannya, hasilnya selalu apakah program berhenti tanpa mencetak apa pun, atau program tidak pernah berhenti. Ketika saya mendeklarasikan r=new Random()dan menggunakan rvariabel, program berhenti lebih acak ketika OP bertanya.
Charlie

Ahhh probs karena loop sangat ketat.
TheLethalCoder

2
@TheLethalCoder - Ya, loop thight berarti kemungkinan bahwa benih generator akan sama. Lihat: msdn.microsoft.com/en-us/library/system.random.aspx#Instantiate
Erno

12

R, 47 46 43 byte

43 byte karena Robin Ryder di komentar.

s=scan(,"")
while(sample(T<-T+1)-1)print(s)

Cobalah online!

Penjelasan

s=scan(,"")  # Takes input from stdin.
             T<-T+1    # T is 1 by default, so this
                       # evaluates to 2, and will increment
                       # at each step.
      sample(T<-T+1)   # Take a sample of size 2, i.e. generate
                       # a list of integers from 1 to 2 in random order
      sample(T<-T+1)-1 # Subtract one from every element of this list.
while(sample(T<-T+1)-1)# while() will treat the first value in this list
                       # as a logical value, i.e. FALSE for zero and TRUE
                       # for nonzero values. The other elements of the list
                       # are ignored, triggering a warning.
                       print(s) # print s

Apakah ini pernah berakhir?
mfloren

@ mfloren Ya, seperti semua jawaban lain di sini, ini bersifat stokastik, dengan peluang terminasi menurun saat berlangsung, tetapi akhirnya akan berakhir. Ada kemungkinan 0,5 tidak akan mencetak apa pun! Coba jalankan beberapa kali dan bandingkan hasilnya.
rturnbull

function(s)lebih pendek daris=scan(,'');
JAD

1
Dan pryr::f(while(runif(1)<T/(T<-T+1))print(s))bahkan lebih pendek.
JAD

1
@JarkoDubbeldam Sayangnya Anda tidak dapat (ab) menggunakan Tdan Fdengan fungsi anonim, karena memodifikasi variabel global dan berarti bahwa fungsi tersebut hanya dapat dipanggil sekali. Lihat di sini : "fungsi solusi berkinerja konsisten terlepas dari berapa kali telah dipanggil sebelumnya".
rturnbull

11

05AB1E , 8 byte

[NÌL.R#,

Cobalah online!

Penjelasan

[         # start loop
 NÌL      # push range [1 ... current_iteration+2]
    .R    # pick a random number
      #   # if true (1), exit loop
       ,  # print input

@Fatalize: Itu cocok untuk saya. Coba jalankan beberapa kali. Ini memiliki peluang 50% untuk tidak menghasilkan apa pun sehingga Anda mungkin "sial".
Emigna

11
Masalah bawaan tugas acak. Terkadang semua peluang melawan Anda.
J_F_B_M

@J_F_B_M melekat?
Leaky Nun

1
@ LeakyNun Tidak, ini adalah "Masalah Warisan" (probabilitas kejadian tidak diwarisi dari peristiwa sebelumnya). J_F_B_M jelas merujuk pada Kekeliruan Penjudi.
aebabis

11

Javascript, 60 58 54 byte

f=(s,n=1)=>Math.random()<n/++n?console.log(s)+f(s,n):0

Akan menampilkan string s. Pemisah yang dicetak jika program berakhir adalah NaNatau 0.

f=(s,n=1)=>Math.random()<n/++n?console.log(s)+f(s,n):0

f('test')

Math.random()mengembalikan nilai antara 0 dan 1. Jika nilai itu di bawah n/(n+1), maka sakan didahului.

4 byte disimpan berkat @Neil


1
Kenapa tidak digunakan n/++n?
Neil

1
@Neil terima kasih, tersimpan 4 byte!
Thomas W

2
Jika lingkungan Anda adalah peramban yang dapat Anda gunakan alertalih-alih console.logmenyimpan 6 byte - snippet dapat diatur alert = console.loguntuk menampilkan keluaran yang tidak mencolok jika diinginkan (jika diizinkan - tidak menyimpan byte, hanya membantu menjaga agar tetap waras)
Craig Ayre

10

Java 8, 72 62 61 byte

s->{for(int n=2;Math.random()<1f/n++;System.out.println(s));}

-10 byte terima kasih kepada @cliffroot .
-1 byte terima kasih kepada @JollyJoker .

Pembatas adalah baris baru.

Penjelasan:

Coba di sini.

s->{                          // Method with String parameter and no return-type
  for(                        //  Loop
    int n=2;                  //   Start `n` on 2
    Math.random()<1f/n++;     //   Continue loop as long as a random decimal (0.0-1.0)
                              //   is smaller than 1/`n` (and increase `n` by 1 afterwards)
    System.out.println(s)     //   Print the input-String
  );                          //  End of loop
}                             // End of method

2
saya tidak dapat memeriksa saat ini tetapi mengapa tidak memasukkan ifkondisi ke dalam forblok kondisi?
cliffroot

@cliffroot Ini adalah di forlingkaran.
Okx

1
@ Ok saya maksudkan kondisi ketika forloop harus diakhiri sehingga tidak perlu eksplisit return. Ekspresi kedua di dalam untuk pernyataan.
cliffroot

@cliffroot Ah, saya mengerti.
Okx

1
Akan int n=2dan 1f/n++bekerja?
JollyJoker

9

Mathematica, 43 byte

(n=1;While[RandomInteger@n>0,Print@#;n++])&

JungHwan Min menyimpan 1 byte (di atas) dan menyarankan sesuatu yang lebih baik (di bawah)

Mathematica, 37 byte

For[n=1,RandomInteger@n++>0,Print@#]&

1
RandomInteger@n!=0sama seperti RandomInteger@n<1dalam kasus ini, dan n++dapat digabung dengan RandomInteger@n. Juga, Forhampir selalu lebih pendek dari While: -5 byteFor[n=1,RandomInteger@n++>0,Print@#]&
JungHwan Min

"Untuk" menang! Saya juga mengirim jawaban Anda
J42161217

For[n=1,!n∣Hash[# n++],Print@#]&juga akan bekerja pada 34 byte, dengan asumsi hash cukup acak. Keacakan tergantung pada input, namun. Misalnya, coba% /@ Alphabet[]
Kelly Lowder

8

Clojure, 61 56 byte

Oh mengapa saya tidak pergi dengan fordi tempat pertama? Tetapi sebenarnya untuk menjadi orang tua doseqharus digunakan sebagaimana fordievaluasi dengan malas.

#(doseq[n(range):while(>(rand-int(+ n 2))0)](println %))

Asli:

#(loop[n 2](if(>(rand-int n)0)(do(println %)(recur(inc n)))))

tidak (>(+(rand-int n)2)0)selalu benar?
cliffroot

Ah tangkapan bagus, maksudku kenaikan n!
NikoNyrh

8

> <> , 124 112 byte

i:0( ?v
 &5a ~/
&p0[^ >"\_\^x0!>"0&1+:&p1&:&p2&:&p3&:&p4&:&p0&1+:&p3&:&p4&:
=?v[/!}l]:?!;1
{:   ?^  >
:o>_ {:?!^

Cobalah online! (Anda juga dapat menontonnya di taman bermain ikan , tetapi karena beberapa bug Anda harus menambahkan }setelah ldi baris keempat dan menambahkan banyak baris baru setelah kode untuk membuatnya berfungsi dengan baik.)

Keacakan rumit dalam> <>. Satu-satunya instruksi acak adalah x, yang mengambil arah ikan secara acak dari empat pilihan (kiri, kanan, atas dan bawah), sehingga mengubah itu menjadi sesuatu dengan probabilitas 1 / n tidak mudah.

Cara kode ini melakukannya adalah dengan menggunakan kemampuan memodifikasi diri sendiri <> untuk membangun Tower of Randomness di bawah kode, jadi pada tahap keempat, misalnya, kode tersebut terlihat seperti:

i:0( ?v
 &5a ~/
&p0[^ >"\_\^x0!>"0&1+:&p1&:&p2&:&p3&:&p4&:&p0&1+:&p3&:&p4&:
=?v[/!}l]:?!;1
{:   ?^  >
:o>_ {:?!^
>!0x^
\  _\
>!0x^
\  _\
>!0x^
\  _\
>!0x^
\  _\

Ikan mulai di bagian bawah menara. Pada setiap tingkat menara, xterperangkap di antara dua cermin, sehingga ikan hanya bisa melarikan diri dengan pergi ke kiri atau kanan. Salah satu dari arahan ini mengirimkan ikan ke tingkat menara berikutnya, tetapi ke kiri juga mendorong 0ke tumpukan. Pada saat ikan mencapai puncak menara, tumpukan berisi beberapa angka 0s, dan angka ini mengikuti distribusi binomial dengan n percobaan dan p  = 1/2.

Jika panjang tumpukan adalah 0 (yang memiliki probabilitas 1/2 n ), program berhenti. Jika panjangnya 1 (dengan probabilitas n / 2 n ), ikan akan mencetak input dan baris baru dan membangun tingkat menara yang lain. Jika panjangnya berbeda, ikan membuang tumpukan dan kembali ke dasar menara. Akibatnya, dari kemungkinan yang benar-benar melakukan sesuatu, n dari mereka mencetak string input dan salah satunya menghentikan program, memberikan probabilitas yang diperlukan.


7

Python 3 , 72 69 66 byte

  • Disimpan 3 byte berkat Jonathan Allan : Impor singkatan dan mulai hitung dari 2.
  • Disimpan 3 byte berkat L3viathan : Pointed randint () inklusif dan juga disingkat kondisi sementara.
from random import*
s=input();i=1
while randint(0,i):print(s);i+=1

Cobalah online!


1
Ada pengaturan untuk mematikan cache output - seperti begitu
Jonathan Allan

2
Saya pikir itu bisa diterima untuk "off" untuk n besar (saya tidak bisa mendapatkan otak bahasa Inggris di gigi, "... (dan mengapa mereka menghormati spesifikasi, mengabaikan pseudo-randomness dan masalah angka besar) ..." mengabaikan - kan?) Jika demikian maka Anda bisa melakukannya random()<1/i.
Jonathan Allan

1
Bukankah ini dimulai dengan probabilitas ⅓? randintinklusif. Anda kemudian dapat mempersingkat baris itu menjadiwhile randint(0,i):print(s);i+=1
L3viathan

1
Saya baru saja menemukan solusi yang sama.
Buah Esolanging

TIO yang diperbarui. Sekarang jumlah byte sama dengan versi floating point juga.
Jonathan Allan

6

QBIC , 19 17 byte

Conditional yang dijatuhkan =1, diaktifkan, disimpan 2 byte

{p=p+1~_rp||?;\_X

Penjelasan

{       Infinitely DO
p=p+1   Add 1 to p (p starts as 0, so on first loop is set to 1, then 2 etc...)
~       IF
  _rp|| a random number between 0 and p
        (implicitly: is anything but 0)
?;      THEN print A$ (which gets read from the cmd line)
\_X     ELSE QUIT
        END IF and LOOP are auto-added at EOF

6

Braingolf , 23 byte

#|V12[R!&@v!r?<1+>1+]|;

Cobalah online!

Menghasilkan angka acak di xmana 0 <= x < n+1, berakhir jika x0, jika tidak, kenaikan ndan putaran. Pemisah adalah|

Penjelasan:

#|V12[R!&@v!r?<1+>1+]|;  Implicit input of commandline args to stack
#|                       Push |
  V                      Create stack2 and switch to it
   12                    Push 1, then 2
     [..............]    Do-While loop, will run indefinitely unless conditional skips
                         Closing bracket
      R                  Return to stack1
       !&@               Print entire stack without popping
          v              Switch to stack2
           !r            Generate random number 0 <= x < n where n is last item on stack
             ?           If last item is greater than 0..
              <          ..Move first item to end of stack
               1+        ..and increment, this is the loop counter number
                 >       ..Move back
                  1+     ..and increment, this is the upper range of the RNG
                    ]    ..end loop
                     |   Endif
                      ;  Suppress implicit output

6

Alice , 18 byte

/?!\v
\iO/>]qhUn$@

Cobalah online!

Penjelasan

/     Reflect to SE. Switch to Ordinal.
i     Read all input as a string and push it to the stack.
!     Store the string on the tape.
/     Reflect to E. Switch to Cardinal.
>     Ensure that the IP moves east. This begins the main loop.

  ]   Move the tape head to the right. We'll be using the tape head's 
      position as a counter variable. Note that this tape head is independent
      of the one used in Ordinal mode to point at the input string.
  q   Push the tape head's position to the stack.
  h   Increment it (so that it's 2 initially).
  U   Get a uniformly random number in [0,n).
  n   Logical NOT. Gives 1 with probability 1/n and 0 otherwise.
  $@  Terminate the program if we got a  1.
  \   Reflect to NE. Switch to Ordinal.
  ?   Retrieve the input from the tape.
  O   Print it with a trailing linefeed.
  \   Reflect to E. Switch to Cardinal.

v     Send the IP south where it runs into the > to start the next
      loop iteration.



3

Arang , 14 byte

A²γW‽γ«θ_A⁺γ¹γ

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Digunakan _sebagai pemisah. Catatan: caching keluaran dinonaktifkan, jadi jangan palu server Dennis!


3

MATL , 9 byte

`G@QYrq]x

Cobalah online!

Penjelasan

`        % Do...while
  G      %   Push input
  @      %   Push iteration index k, starting at 1
  QYrq   %   Random integer uniformly distributed in {0, 1, ..., k}. This is the
         %   loop condition. If non-zero (which occurs with probability k/(1+k))
         %   proceed with next iteration; else exit loop
]        % End
x        % Delete, as there are one too many strings. Implicitly display the stack


3

Python 3 , 55 byte

v=s=input();i=2
while hash(v)%i:print(s);i+=1;v=hash(v)

Penjelasan

Untuk menyimpan harus mengimpor secara acak, saya telah mengeksploitasi fakta bahwa hash built-in diunggulkan secara acak setiap kali proses python dinyalakan (setidaknya dalam MacOS). Setiap hash hash terakhir harus menghasilkan serangkaian bilangan bulat pseudo-acak.

Jika hash cukup pseudo-acak, modulo dengan inol dengan probabilitas 1/i.

Catatan

Saya sedikit terganggu oleh hash yang berlebihan, tetapi tanpa tugas do-while, atau dalam-kondisi dalam Python, saya agak macet.


Apakah Anda tahu apakah hashing berulang selalu akan mencakup ruang penuh angka acak, atau bisakah itu berpotensi terjebak dalam siklus? Sebagian besar bahasa pemrograman menggunakan algoritma hash acak saat ini untuk menghindari orang yang sengaja menyebabkan tabrakan hash, tapi saya tidak yakin bagaimana jaminan keacakan dari algoritma hash dibandingkan dengan orang-orang dari PRNG.

Ini poin yang adil. Dan saya tidak yakin, akan diperlukan beberapa analisis implementasi hash Python untuk memeriksa (tanpa pemeriksaan yang lebih lengkap). Saya pikir itu adalah solusi yang menyenangkan, bahkan jika ada kesempatan itu mungkin tidak 100% pseudo-random = p
Kit Ham

I'm a little bothered...rekursi?
Felipe Nardi Batista

3

C #

Panjangnya sama dengan jawaban C # teratas, tetapi:

using System;s=>{var x=(1<<31)/new Random().Next();for(;++x>0;)Console.Write(s+" ");}

Hanya ingin menunjukkan bahwa beberapa matematika dapat menghasilkan probabilitas yang benar.

int.MaxValue/new Random().Next()-1

Setara dengan

(int)(1 / new Random().NextDouble()) - 1;

Dan fungsi f (x) = 1 / x-1 adalah:

f (1) = 0

f (1/2) = 1

f (1/3) = 2

f (1/4) = 3

Jadi 1/2 kesempatan untuk dibulatkan menjadi 0, 1/6 kesempatan untuk dibulatkan menjadi 1, dan 1 / (n +1) (n + 2) peluang dibulatkan menjadi n.

Mungkin bahasa lain bisa memanfaatkan ini.

EDIT: Memperbaiki kesalahan saya

Saya memikirkan sesuatu untuk membuatnya lebih kecil.

EDIT EDIT: Saya semua jenis kesalahan. Menarik Acak ke luar dari loop karena jika itu dievaluasi berulang kali, itu tidak akan berhasil.

EDIT EDIT EDIT: Saya menyingkirkan variabel i. Saya akan berhenti mencoba mengecilkannya sekarang. Tidak, berbohong. Singkirkan byte lain.



2

C, 41 byte

n;f(char*s){for(n=1;rand()%++n;puts(s));}

Diasumsikan randdiunggulkan. Cobalah online!


"Diasumsikan randdiunggulkan." - Apakah itu asumsi yang valid untuk dibuat? randdiperlukan oleh standar untuk memiliki nilai seed tetap 1 secara default dan semua implementasi yang saya tahu lakukan hal itu. Jika fungsi ini hanya melakukan apa yang ditanyakan ketika dikombinasikan dengan kode lain, saya pikir kode lain perlu dimasukkan dalam jawaban dan dalam jumlah byte.
hvd

2

braingasm , 22 byte

sunting: Jumlah byte yang sama, tetapi saya menyadari bahwa saya dapat menyelinap di fitur baru tape Limit.

,[>,]>L+[+$rzQ>[.>]:>]

Digunakan 0sebagai pemisah. Bekerja seperti ini:

,[>,]                   Read a byte and move to next cell until end of input.
     >                  After the loop we're in an empty cell;
                          Leave it empty and move to the next.
      L                 Set tape limit here:
                          The tape will then wrap around if we move further.
       +                Increase current cell by one.
                          This cell will be our counter.
        [            ]  Loop until the counter is zero.
                          That won't happen, so it's an infinite loop.
         +              Increase again, so the first time the counter is 2.
          $r            Get a random number, 0 <= r > current cell
            zQ          Quit the program if that random number was 0
              >         Wrap around to the start of the tape.
               [.>]     Print the input stored on the tape
                          The loop will stop at the blank cell.
                   :    Print the blank cell as a number ("0")
                    >   Go to the next (last) cell

2

Python , 54 byte

lambda s:int(1/random()-1)*(s+'|')
from random import*

Cobalah online!

Generated jumlah salinan sebagai floor(1/p)-1dengan pseragam dipilih dari interval satuan. Jumlah salinan adalah nsaat 1/p-1jatuh di antara ndan n+1, yang terjadi saat 1/(n+2) < p < 1/(n+1). Ini terjadi dengan probabilitas 1/(n+1)-1/(n+2)atau 1/((n+1)*(n+2). Ini adalah probabilitas yang diinginkan untuk menghasilkan nsalinan: 1/2prob 0, 1/6prob 1, 1/12prob 2, ...


Kenapa ada form random import*di bawah?
CalculatorFeline

@CalculatorFeline Perintahnya tidak masalah. Definisi fungsi berfungsi baik.
xnor

@CalculatorFeline Untuk turun ke byte dengan tidak menulis f=dan menempatkannya di TIO Header
Tn. Xcoder

Itu masuk akal.
CalculatorFeline

2

C ++, 97 96 57 byte

Di sini coba pertama saya di codegolf :)

#include<iostream>
int main(){std::string S;std::cin>>S;int i=1;while(rand()%++i)puts(S.data());}

Saya menyimpan satu byte dengan menggunakan for

#include<iostream>
int main(){std::string S;std::cin>>S;for(int i=1;rand()%++i;)puts(S.data());}

Disimpan 39 byte karena tampaknya tidak ada yang menghitungnya

void p(string S){for(int i=1;rand()%++i;)puts(S.data());}

ungolfed

#include <iostream>
int main()
{
  // Create and read string from inputstream
  std::string S;
  std::cin >> S;       

  // rand % i: create random int in range [0, i-1]
  // Zero is seen as false and all positive int as true
  int i = 1;
  while (rand() % ++i) 
    puts(S.data());    
}

Anda dapat mengambil string sebagai argumen dari baris perintah
Maliafo

Termasuk dihitung, kecuali jika Anda menemukan kompiler yang memasukkannya secara default
Felipe Nardi Batista

2

F #, 161 byte

Jelas bukan bahasa terbaik untuk golf, tetapi saya memutuskan untuk mencobanya (selain itu, saya tidak tahu apa-apa tentang F #, jadi setiap tips tentang bagaimana meningkatkan jawaban saya akan diterima).

let f s=
 let r,z=System.Random(),(<>)0
 let p _=printfn"%s"s
 seq {for i in 2|>Seq.unfold(fun i->Some(i,i+1))do yield r.Next(i)}|>Seq.takeWhile z|>Seq.iter p

Jalankan dengan:

[<EntryPoint>]
let main argv =
    "test" |> f
    0

Menulis baris baru sebagai pemisah.



2

JS (ES6), 47 byte

x=>{for(i=1;Math.random()<i/(i+1);i++)alert(x)}

Berbeda dengan jawaban ES6 lainnya, ini menggunakan for for dan alert bom bukannya rekursi. Pemisah yang dicetak ketika program berhenti tidak ditentukan.



1

Python, 75 byte

Jawaban Python lainnya lebih pendek, tetapi saya ingin mencobanya dengan cara yang berbeda:

from random import*
f=lambda d=1,s=input():randint(0,d)and s+'!'+f(d+1)or''
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.