Bu sonunda duracak…


41

Bir giriş dizesi verildiğinde , aşağıdaki gibi boş olmayan bir ayırıcıyı ve ardından Syazdırın S:

  • 1. Adım: SBir sahip 1/2baskılı edilme şansı ve 1/2sonlandırmak için program için şansı.

  • Adım 2: SBir sahip 2/3baskılı edilme şansı ve 1/3sonlandırmak için program için şansı.

  • Adım 3: SBir sahip 3/4baskılı edilme şansı ve 1/4sonlandırmak için program için şansı.

  • ...

  • Adım n: SBir sahip n/(n+1)baskılı edilme şansı ve 1/(n+1)sonlandırmak için program için şansı.

notlar

  • Giriş dizesi yalnızca dilinizin dize türünde kabul edilebilir olan karakterlerden oluşur.

  • Boş olmayan herhangi bir ayırıcı, her zaman aynı olduğu sürece kullanılabilir. Ayırıcının, Sprogram sonlandırılmadan önceki son baskıdan sonra yazdırılması beklenir .

  • Program, 1/2herhangi bir şey basmadan önce sonlandırma şansına sahiptir .

  • Sondaki yeni satır kabul edilebilir.

  • Cevabınız açıklanan olasılıklara saygı duymak için gerçek bir girişimde bulunmalıdır. Açıkçası, ne zaman nbüyük olduğu , bu daha az doğru olacaktır. Cevabınızda olasılıkların nasıl hesaplandığına dair doğru bir açıklama (ve neden spesifikasyonlara saygı duydukları, sözde rastgelelik ve büyük sayılar problemlerini göz ardı ettikleri) yeterlidir.

puanlama

Bu , yani bayt cinsinden en kısa cevap kazanır.


Ayırıcı boş bir dize olabilir mi?
rturnbull

16
@ rturnbull Evet, çünkü bu durumda ayırıcı yok.
17'de

Bunları birbiri ardına basmak zorunda mıyız yoksa program sona erdiğinde hepsini yazdırabilir miyiz?
Dennis,

@Dennis Birbiri ardına.
17'de

Yanıtlar:



29

C #, 94 85 bayt

İlk cevabım!

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

Önceki deneme (Bunu sevdim goto):

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

Ungolfed:

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

Not: C # 'da Random.Next(N)yöntem [0, N-1] aralığında negatif olmayan bir tamsayı döndürür, bu nedenle döndürülen sayının 0'dan büyük olduğunu kontrol edebiliriz.


1
using System;Bayt sayınıza eklemeniz gerekir . Sen ilan edebilir r, bir değişkene ayarlamak gerek inline: new Random().Next(i++). Golf func üzerinde takip eden noktalı virgül gerekmez.
TheLethalCoder 12:17

1
Oh ve güzel ilk cevap! Benim teşebbüsümden daha kısa olurdu :)
TheLethalCoder

@TheLethalCoder Yorumlarınız için teşekkür ederiz! Kullanmaya çalıştım new Random().Next(i++)ama bunu uygulamaya çalıştığımda, sonuç her zaman programın hiçbir şeyi yazdırmadan durması ya da programın durmamasıydı. Değişkeni ilan r=new Random()edip kullandığımda r, OP sorduğunda program daha rastgele durur.
Charlie

Ahhh probları çünkü döngü çok sıkı.
TheLethalCoder 12:17

2
@TheLethalCoder - Evet, thight loop, jeneratörün tohumunun aynı olması ihtimalidir. Bakınız: msdn.microsoft.com/en-us/library/system.random.aspx#Instantiate
Erno

12

R, 47 46 43 bayt

Yorumlarda Robin Ryder nedeniyle 43 bayt.

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

Çevrimiçi deneyin!

açıklama

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

Bu hiç sona ermiyor mu?
mfloren

@mfloren Evet, buradaki diğer cevaplar gibi, stokastiktir, ilerledikçe sona erme şansı azalır, ancak sonuçta sona erer. Hiçbir şey basmamaya .5 şansı var! Birkaç kez çalıştırmayı deneyin ve çıktıları karşılaştırın.
rturnbull

function(s)daha kısas=scan(,'');
JAD

1
Ve pryr::f(while(runif(1)<T/(T<-T+1))print(s))daha da kısa.
JAD,

1
@JarkoDubbeldam Maalesef (ab) kullanamazsınız Tve Fadsız işlevlerle kullanamazsınız , çünkü global bir değişkeni değiştirir ve işlevin yalnızca bir kez çağrılabileceği anlamına gelir. Buraya bakın : "çözüm işlevi, daha önce kaç defa çağrıldığına bakılmaksızın tutarlı şekilde çalışır".
rturnbull

11

05AB1E , 8 bayt

[NÌL.R#,

Çevrimiçi deneyin!

açıklama

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

@Fatalize: Bu benim için yapar. Birkaç kez çalıştırmayı deneyin. Hiçbir şeyi çıkarmama% 50 şansı vardır, bu yüzden "şanssız" olabilirsiniz.
Emigna

11
Rasgele görevlerin miras sorunu. Bazen bütün ihtimaller sana karşıdır.
J_F_B_M

@J_F_B_M doğal mi?
Sızdıran Rahibe

1
@LeakyNun Hayır, "Miras Sorunu" (olayların olasılığı önceki olaylardan miras alınmaz). J_F_B_M, Gambler's Fallacy'den açıkça bahsediyordu.
aebabis

11

Javascript, 60 58 54 bayt

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

Dize çıktılar s. Program sonlanırsa yazdırılan ayırıcı NaNveya 0.

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

f('test')

Math.random()0 ile 1 arasında bir değer döndürür. Bu değer altındaysa n/(n+1), o szaman öncelik verilir.

@Neil sayesinde 4 bayt kaydedildi


1
Neden kullanmaz n/++n?
Neil

1
@Neil teşekkürler, 4 bayt kurtardı!
Thomas W

2
Ortamınız 6 bayt kaydetmek alertyerine kullanabileceğiniz bir tarayıcıysa console.log- snippet alert = console.logistenirse rahatsız edici olmayan çıktılar göstermeye ayarlanmış olabilir (eğer izin verilirse - bayt kaydetmez, sadece bir aklı başında tutmanıza yardımcı olur)
Craig Ayre

10

Java 8, 72 62 61 bayt

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

@Cliffroot sayesinde -10 bayt . @JollyJoker ile
-1 bayt .

Sınırlayıcı yeni bir çizgidir.

Açıklama:

Burada dene.

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
şu anda kontrol edemiyorum ancak neden koşul bloğunun ifiçine forkoşul koymuyorsunuz?
cliffroot

@cliffroot O olduğu de fordöngü.
Okx,

1
@Okx Döngünün ne zaman forsona ermesi gerektiğini, böylece açık bir şekilde gerekmeyeceği koşulunu kastediyordum return. İfade için içerideki ikinci ifade.
cliffroot

@ cliffroot Ah, anlıyorum.
Okx,

1
Misiniz int n=2ve 1f/n++nasıl çalışır?
JollyJoker

9

Mathematica, 43 bayt

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

JungHwan Min 1 byte tasarruf etti (yukarıda) ve daha iyi bir şey önerdi (aşağıda)

Mathematica, 37 bayt

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

1
RandomInteger@n!=0aynıdır RandomInteger@n<1, bu durumda ve n++ile birleştirilebilir RandomInteger@n. Ayrıca, For(hemen hemen her zaman) WhileFor[n=1,RandomInteger@n++>0,Print@#]&
şunlardan

"Kazandı"! Ben de cevabınızı
yolladım

For[n=1,!n∣Hash[# n++],Print@#]&karmaşanın oldukça rastgele olduğunu varsayarsak, 34 byte'ta da çalışacaktı. Bununla birlikte, rastgelelik, girdilere bağlıdır. Örneğin, deneyin% /@ Alphabet[]
Kelly Lowder,

8

Clojure, 61 56 bayt

Oh, neden forilk ben bir şeyle gitmedim ? Ancak aslında bilgiçlik doseqiçin forlazily olarak değerlendirilmek üzere kullanılmalıdır .

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

Orijinal:

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

(>(+(rand-int n)2)0)her zaman doğru değil mi?
cliffroot

Ah iyi yakalamak, artış demek istedim n!
NikoNyrh

8

> <> , 124 112 bayt

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

Çevrimiçi deneyin! ( Balık oyun alanında da izleyebilirsiniz , ancak bazı hatalar nedeniyle dördüncü sıraya bir }sonrasını leklemeniz ve kodun doğru çalışmasını sağlamak için birkaç satır yeni satır eklemeniz gerekir.)

Rastgele>>> hileli. xBalığın yönünü rastgele dört seçenekten (sola, sağa, yukarı ve aşağı) seçen tek rastgele komuttur, bu yüzden bunu 1 / n olasılıklı bir şeye çevirmek kolay değildir.

Bu kodun yolu,> <> 'nin kodun altına bir Rastgele Kulesi oluşturmak için kendi kendini değiştiren yeteneklerini kullanmasıdır, yani dördüncü aşamada, örneğin kod şöyle görünür:

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

Balık kulenin dibinde başlar. Kulenin her seviyesinde xiki ayna arasında tutulur, böylece balık sadece sola veya sağa doğru kaçabilir. Bu yönlerden herhangi biri balığın bir sonraki seviyesine kadar balık gönderir, fakat sola gitmesi de 0istif a a basar. Balık kulenin üst vardığında, yığın bazı dizi içerir 0s, ve bu sayı, bir aşağıda binom dağılımını ile N denemeler ve p  = 1/2.

Yığın uzunluğu 0 ise (olasılık 1/2 n'dir ) program durur. Uzunluk 1 (olasılık n / 2 n ) ise, balık girişi ve yeni bir satırı yazdırır ve kulenin başka bir seviyesini oluşturur. Uzunluk başka bir şey ise, balık yığını atar ve kulenin dibine geri döner. Aslında, gerçekte bir şeyi yapan olasılıklardan , bunlardan n tanesi giriş dizisini basar ve bunlardan biri programı durdurur ve gerekli olasılıkları verir.


7

Python 3 , 72 69 66 bayt

  • Jonathan Allan sayesinde 3 byte kurtarıldı : steno alın ve 2'den sayıma başlayın.
  • L3viathan sayesinde 3 bayt kurtarıldı : Sivri uçlu randint () kapsayıcıydı ve şartlar altında kısaldı.
from random import*
s=input();i=1
while randint(0,i):print(s);i+=1

Çevrimiçi deneyin!


1
Çıkış önbelleğini kapatacak bir ayar var - öyle
Jonathan Allan

2
Ben düşünüyorum da "kapalı" olmak kabul edilebilir büyük n (I viteste İngiliz beyin alamayan için göz ardı "... (ve onlar teknik özeliklerini, ... sözde rastgele ve büyük sayılar problemleri) göz ardı neden saygı" - değil mi?) Öyleyse yapabilirsin random()<1/i.
Jonathan Allan,

1
Bu olasılık start ile başlamaz mı? randintkapsayıcıdır. Daha sonra bu hattı kısaltabilirsinizwhile randint(0,i):print(s);i+=1
L3viathan

1
Ben de aynı çözümü buldum.
Esolanging Fruit

TIO bağlantısı güncellendi. Şimdi bayt sayısı da kayan nokta sürümüyle aynıdır.
Jonathan Allan,

6

QBIC , 19 17 bayt

Bırakılan =1koşul, açık, 2 bayt kaydedildi

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

açıklama

{       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 bayt

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

Çevrimiçi deneyin!

Rastgele bir sayı oluşturur xburada 0 <= x < n+1, sonlandırıldığında ise x0, aksi halde birimdir nve döngüler. Ayırıcı|

Açıklama:

#|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 bayt

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

Çevrimiçi deneyin!

açıklama

/     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

Kömür , 14 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. _Ayırıcı olarak kullanır . Not: çıktı önbellekleme devre dışıdır, bu yüzden lütfen Dennis'in sunucusunu kırmayın!


3

MATL , 9 bayt

`G@QYrq]x

Çevrimiçi deneyin!

açıklama

`        % 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 bayt

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

açıklama

Rasgele ithal etmek zorunda kalmaktan sakınmak için, bir python işlemi başlatıldığında (en azından MacOS'ta) karma yerleşik yapının rasgele ekilmesi gerçeğinden yararlandım. Son karma değerin her karma bir dizi sahte rasgele tamsayı üretmelidir.

Karma yeterince sözde rasgele iise, olasılıkla modulo sıfırdır 1/i.

notlar

Gereksiz karmaşadan biraz rahatsız oluyorum, ancak Python’da bir süre-süre ya da koşulsuz atama olmadan, biraz sıkışıp kaldım.


Yinelenen karmalamanın her zaman rastgele sayıların tüm alanını kapsayacağını mı yoksa potansiyel olarak bir döngüde sıkışıp kalmayacağını biliyor musunuz? Çoğu programlama dili, kasıtlı olarak hash çarpışmalarına neden olan insanları önlemek için günümüzde randomize karma algoritmalar kullanmaktadır, ancak karma algoritmaların rastgelelik garantilerinin bir PRNG'ninkilerle karşılaştırdığından nasıl emin değilim.

Bu adil bir nokta. Ve emin değilim, kontrol etmek için Python karma uygulamasının bir analizini gerektirir (daha ayrıntılı bir kontrol olmadan). Eğlenceli bir çözüm olduğunu düşünmüştüm, bir şans olsa bile% 100 sözde rastgele olmayabilir = p
Kit Ham

I'm a little bothered...özyineleme?
Felipe Nardi Batista

3

C #

Bu, en üstteki C # cevabı ile aynı uzunluktadır, fakat:

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

Sadece bazı matematiğin doğru olasılığı üretebileceğini belirtmek istedim.

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

Eşittir

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

Ve f (x) = 1 / x-1 işlevi şudur:

f (1) = 0

f (1/2) = 1

f (1/3) = 2

f (1/4) = 3

1 / 2'ye 0 yuvarlama şansı, 1 / 6'ya 1 yuvarlama şansı ve 1 / (n + 1) (n + 2) n'ye yuvarlama şansı.

Belki başka bir dil de bu konuda büyük harf olabilir.

EDIT: Hatamı düzelttim

Daha küçük yapmak için bir şey düşündüm.

EDIT EDIT: Ben sadece her türlü hatalıyım. Rastgele döngünün dışına çekildi, çünkü birden fazla kez değerlendirilirse çalışmaz.

EDIT EDIT EDIT: i değişkeninden kurtuldum. Şimdi küçültmeyi denemeyi bırakacağım. Hayır, yalan söyledim. Başka bir bayttan kurtuldum.



2

C, 41 bayt

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

Varsayar randseribaşı olduğunu. Çevrimiçi deneyin!


"Varsayım randtohumlanır." - Bu geçerli bir varsayım mı? randstandart tarafından varsayılan olarak 1 sabit tohum değerine sahip olmaları gerekir ve bildiğim tüm uygulamalar bunu yapar. Bu işlev yalnızca diğer kodla birleştirildiğinde sorun ne isterse yaparsa, diğer kodun cevaba ve bayt sayısına dahil edilmesi gerektiğini düşünüyorum.
hvd

2

beyin fırtınası , 22 bayt

düzenleme: Aynı bayt sayısı, ancak yeni teyp Limit özelliği gizlice olabilir fark ettim .

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

0Ayırıcı olarak kullanır . Bu gibi çalışır:

,[>,]                   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 bayt

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

Çevrimiçi deneyin!

Kopyaların sayısını üretilen floor(1/p)-1ile peşit birim aralıkta seçilir. Kopya sayısı nzaman 1/p-1arasındaki düşer nve n+1ne olur, hangi 1/(n+2) < p < 1/(n+1). Bu olasılık 1/(n+1)-1/(n+2)veya ile olur 1/((n+1)*(n+2). Bu, nkopya çıktısının istenen olasılığıdır : 1/2prob 0, olasılık 1/61, 1/12prob 2, ...


Neden form random import*altta?
Hesap MakinesiFeline

@CalculatorFeline Sipariş önemli değil. İşlev tanımı her iki şekilde de çalışır.
xnor

@CalculatorFeline Yazmadan f=ve TIO Başlığına yerleştirerek baytlara bırakmak için
Bay Xcoder

Bu mantıklı.
Hesap MakinesiFeline

2

C ++, 97 96 57 bayt

İşte benim ilk kez codegolf :)

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

Kullanarak bir bayt kurtardım for

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

İçerisinde kimse sayılmaz gibi göründüğü için 39 bayt kaydedildi

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

Dize komut satırından bir argüman olarak alabilirsiniz
Maliafo

Varsayılan olarak bunları içeren bir derleyici bulamazsanız, içerdikleri sayılır
Felipe Nardi Batista

2

F #, 161 bayt

Kesinlikle golf için en iyi dil değil, ama denemeye karar verdim (ayrıca F # hakkında hiçbir şey bilmiyorum, bu yüzden cevabımı nasıl geliştireceğime dair herhangi bir ipucu memnuniyetle karşılanacaktır).

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

Şununla çalıştır:

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

Ayırıcı olarak yeni bir satır yazar.



2

JS (ES6), 47 bayt

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

Diğer ES6'nın cevabından farklı olarak, bu özyineleme yerine for döngüsü ve alarm bombaları kullanır. Program durduğunda yazdırılan ayırıcı tanımsız.



1

Python, 75 bayt

Diğer Python cevabı daha kısa, ancak farklı bir yolla denemek istedim:

from random import*
f=lambda d=1,s=input():randint(0,d)and s+'!'+f(d+1)or''
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.