Urutan Sylvester

32

Urutan Sylvester, OEIS A000058 , adalah urutan bilangan bulat yang didefinisikan sebagai berikut:

Setiap anggota adalah produk dari semua anggota sebelumnya ditambah satu. Anggota urutan pertama adalah 2.

Tugas

Buat program sekecil mungkin yang membutuhkan n dan hitung jangka waktu n dari Sylvester's Sequence. Input standar, output dan celah berlaku. Karena hasilnya tumbuh sangat cepat, Anda tidak diharapkan untuk mengambil istilah yang hasilnya akan menyebabkan meluapnya bahasa yang Anda pilih.

Uji Kasus

Anda dapat menggunakan nol atau satu pengindeksan. (Di sini saya menggunakan nol pengindeksan)

>>0
2
>>1
3
>>2
7
>>3
43
>>4
1807
Wisaya Gandum
sumber
Masukan apa yang diharapkan untuk ditangani? Outputnya tumbuh cukup cepat.
Geobits
1
@Geobits Anda diharapkan untuk menangani bahasa Anda sebanyak mungkin
Wheat Wizard
Apakah array yang ketika diindeks dengan nmengembalikan nthjumlah urutan diterima?
user6245072
@ user6245072 Tidak, Anda harus mengindeks array Anda sendiri
Wheat Wizard

Jawaban:

26

Brain-Flak , 76 68 58 52 46 byte

<>(()())<>{({}[()])<>({({}[()])({})}{}())<>}<>

Cobalah online!

Gunakan hubungan ini sebagai gantinya:

rumus

yang berasal dari hubungan ini dimodifikasi dari yang disediakan dalam urutan:

a(n+1) = a(n) * (a(n) - 1) + 1.

Penjelasan

Untuk dokumentasi tentang apa yang dilakukan setiap perintah, silakan kunjungi halaman GitHub .

Ada dua tumpukan di Brain-Flak, yang akan saya beri nama Stack 1 dan Stack 2.

Input disimpan di Stack 1.

<>(()())<>             Store 2 in Stack 2.

{                      while(Stack_1 != 0){
  ({}[()])                 Stack_1 <- Stack_1 - 1;
  <>                       Switch stack.
  ({({}[()])({})}{}())     Generate the next number in Stack 2.
  <>                       Switch back to Stack 1.
}

<>                     Switch to Stack 2, implicitly print.

Untuk algoritme pembangkitan:

({({}[()])({})}{}())      Top <- (Top + Top + (Top-1) + (Top-1) + ... + 0) + 1

(                  )      Push the sum of the numbers evaluated in the process:

 {            }               while(Top != 0){
  ({}[()])                        Pop Top, push Top-1    (added to sum)
          ({})                    Pop again, push again  (added to sum)
                              }

               {}             Top of stack is now zero, pop it.
                 ()           Evaluates to 1 (added to sum).

Alternatif versi 46-byte

Ini hanya menggunakan satu tumpukan.

({}<(()())>){({}<({({}[()])({})}{}())>[()])}{}

Cobalah online!

Biarawati Bocor
sumber
1
Hanya 10 byte lagi untuk menunjukkan bahwa pengembang java harus pergi ke brain flack
Rohan Jhunjhunwala
1
@RohanJhunjhunwala Aku khawatir itu tidak mungkin ...
Leaky Nun
@ LeakyNun masih menarik untuk dipikirkan. Brain Flak memiliki beberapa kekuatan, dan sangat mengejutkan
Rohan Jhunjhunwala
5
Versi satu tumpukan juga tumpukan bersih. Yang cenderung menjadi poin penting untuk modularitas kode di brain-flak.
Wheat Wizard
Wow. Ini adalah jawaban yang sangat mengesankan.
DJMcMayhem
12

Jelly , 5 byte

Ḷ߀P‘

Ini menggunakan pengindeksan berbasis 0 dan definisi dari spec tantangan.

Cobalah online! atau verifikasi semua kasus uji .

Bagaimana itu bekerja

Ḷ߀P‘  Main link. Argument: n

Ḷ      Unlength; yield [0, ..., n - 1].
 ߀    Recursively apply the main link to each integer in that range.
   P   Take the product. This yields 1 for an empty range.
    ‘  Increment.
Dennis
sumber
Ah, saya lupa bahwa produk kosongnya adalah 1.
Leaky Nun
12

Hexagony , 27 byte

1{?)=}&~".>")!@(</=+={"/>}*

Dibuka:

    1 { ? )
   = } & ~ "
  . > " ) ! @
 ( < / = + = {
  " / > } * .
   . . . . .
    . . . .

Cobalah online!

Penjelasan

Mari kita perhatikan urutannya b(a) = a(n) - 1dan lakukan sedikit pengaturan ulang:

b(a) = a(n) - 1
     = a(n-1)*(a(n-1)-1) + 1 - 1
     = (b(n-1) + 1)*(b(n-1) + 1 - 1)
     = (b(n-1) + 1)*b(n-1)
     = b(n-1)^2 + b(n-1)

Urutan ini sangat mirip tetapi kita bisa menunda kenaikan sampai akhir, yang terjadi untuk menyimpan byte dalam program ini.

Jadi di sini adalah kode sumber beranotasi:

masukkan deskripsi gambar di sini
Dibuat dengan HexagonyColorer Timwi .

Dan di sini adalah diagram memori (segitiga merah menunjukkan posisi awal dan orientasi pointer memori):

masukkan deskripsi gambar di sini
Dibuat dengan EsotericIDE Timwi .

Kode dimulai pada jalur abu-abu yang membungkus sudut kiri, jadi bit linear awal adalah sebagai berikut:

1{?)(
1      Set edge b(1) to 1.
 {     Move MP to edge N.
  ?    Read input into edge N.
   )(  Increment, decrement (no-op).

Kemudian kode mengenai <yang merupakan cabang dan menunjukkan awal (dan akhir) dari loop utama. Selama tepi N memiliki nilai positif, jalur hijau akan dieksekusi. Jalan itu membungkus grid beberapa kali, tetapi sebenarnya seluruhnya linier:

""~&}=.*}=+={....(

The .tidak-ops, sehingga kode yang sebenarnya adalah:

""~&}=*}=+={(
""             Move the MP to edge "copy".
  ~            Negate. This is to ensure that the value is negative so that &...
   &           ...copies the left-hand neighbour, i.e. b(i).
    }=         Move the MP to edge b(i)^2 and turn it around.
      *        Multiply the two copies of b(i) to compute b(i)^2.
       }=      Move the MP back to edge b(i) and turn it around.
         +     Add the values in edges "copy" and b(i)^2 to compute
               b(i) + b(i)^2 = b(i+1).
          ={   Turn the memory pointer around and move to edge N.
            (  Decrement.

Setelah pengurangan ini berkurang Nmenjadi 0, jalur merah dijalankan:

")!@
"     Move MP back to edge b(i) (which now holds b(N)).
 )    Increment to get a(N).
  !   Print as integer.
   @  Terminate the program.
Martin Ender
sumber
Bisakah Anda menjalankan bruteforcer Anda dalam hal ini?
CalculatorFeline
@ CalculatorFeline Brute forcer dapat melakukan paling banyak program 7-byte (dan bahkan itu hanya dengan banyak asumsi) dalam jumlah waktu yang wajar. Saya tidak melihat ini mungkin dari jarak jauh dalam 7 byte.
Martin Ender
Begitu? Apa yang salah dengan mencoba?
CalculatorFeline
@CalculatorFeline Laziness. Brute forcer selalu membutuhkan sedikit penyesuaian manual yang tidak dapat saya lakukan untuk kesempatan 0 praktis yang akan menemukan sesuatu. Beberapa versi skrip ada di GitHub, jadi orang lain bebas mencobanya.
Martin Ender
Dan bagaimana saya melakukannya?
CalculatorFeline
9

J, 18 14 12 byte

Versi ini berkat randomra. Saya akan mencoba menulis penjelasan terperinci nanti.

0&(]*:-<:)2:

J, 14 byte

Versi ini berkat mil. Gunakan adverbia ^:alih-alih agenda seperti di bawah ini. Penjelasan lebih lanjut akan datang.

2(]*:-<:)^:[~]

J, 18 byte

2:`(1+*/@$:@i.)@.*

Diindeks 0.

Contohnya

   e =: 2:`(1+*/@$:@i.)@.*
   e 1
3
   e 2
7
   e 3
43
   e 4
1807
   x: e i. 10
2 3 7 43 1807 3263443 10650056950807 113423713055421862298779648 12864938683278674737956996400574416174101565840293888 1655066473245199944217466828172807675196959605278049661438916426914992848    91480678309535880456026315554816
   |: ,: x: e i. 10
                                                                                                        2
                                                                                                        3
                                                                                                        7
                                                                                                       43
                                                                                                     1807
                                                                                                  3263443
                                                                                           10650056950807
                                                                              113423713055421862298779648
                                                    12864938683278674737956996400574416174101565840293888
165506647324519994421746682817280767519695960527804966143891642691499284891480678309535880456026315554816

Penjelasan

Ini adalah agenda yang terlihat seperti ini:

           ┌─ 2:
           │    ┌─ 1
       ┌───┤    ├─ +
       │   └────┤           ┌─ / ─── *
── @. ─┤        │     ┌─ @ ─┴─ $:
       │        └─ @ ─┴─ i.
       └─ *

(Dihasilkan menggunakan (9!:7)'┌┬┐├┼┤└┴┘│─'kemudian 5!:4<'e')

Membusuk:

       ┌─ ...
       │
── @. ─┤
       │
       └─ *

Menggunakan cabang atas sebagai gerund G, dan bagian bawah sebagai pemilih F, ini adalah:

e n     <=>     ((F n) { G) n

Ini menggunakan fungsi konstan 2:ketika 0 = * n, yaitu, ketika tanda nol (dengan demikian nadalah nol). Jika tidak, kami menggunakan garpu ini:

  ┌─ 1
  ├─ +
──┤           ┌─ / ─── *
  │     ┌─ @ ─┴─ $:
  └─ @ ─┴─ i.

Yang satu ditambah seri di atas berikut:

            ┌─ / ─── *
      ┌─ @ ─┴─ $:
── @ ─┴─ i.

Menguraikan lebih jauh, ini adalah produk ( */) lebih dari referensi-sendiri ( $:) lebih dari rentang ( i.).

Conor O'Brien
sumber
2
Anda juga dapat menggunakan kata keterangan daya untuk mendapatkan 2(]*:-<:)^:[~]14 byte menggunakan rumus a(0) = 2dan a(n+1) = a(n)^2 - (a(n) - 1). Untuk menghitung nilai yang lebih besar, 2permulaan harus ditandai sebagai integer yang diperluas.
mil
Kedua solusi itu sangat bagus. Saya pikir saya tidak menyadari v`$:@.uformat rekursif. Saya selalu menggunakan ^:vformat yang seringkali lebih kompleks. @miles Saya juga tidak pernah menggunakan (]v)trik ini. Butuh 5 menit untuk mengerti.
randomra
1
Untuk kelengkapan, jenis perulangan ke-3 (14 byte menggunakan metode miles): 2(]*:-<:)~&0~](atau 2:0&(]*:-<:)~]). Dan menggabungkannya 13 byte ]0&(]*:-<:)2: .
randomra
12 byte: 0&(]*:-<:)2:. (Maaf, saya tidak boleh bermain golf di komentar.)
randomra
@randomra Itu adalah penggunaan ikatan yang sangat rapi. Saya harus membaca halaman untuk mencari tahu apa yang terjadi karena biasanya orang akan berpikir bahwa kata kerja tengah menerima tiga argumen.
mil
9

Perl 6 , 24 byte

{(2,{1+[*] @_}...*)[$_]}
{(2,{1+.²-$_}...*)[$_]}

Penjelasan

# bare block with implicit parameter 「$_」
{
  (
    # You can replace 2 with 1 here
    # so that it uses 1 based indexing
    # rather than 0 based
    2,

    # bare block with implicit parameter 「@_」
    {
      1 +

      # reduce the input of this inner block with 「&infix:<*>」
      # ( the input is all of them generated when using a slurpy @ var )
      [*] @_

      # that is the same as:
      # 「@_.reduce: &infix:<*>」
    }

    # keep calling that to generate more values until:
    ...

    # forever
    *

  # get the value as indexed by the input
  )[ $_ ]
}

Pemakaian:

my &code = {(2,{1+[*] @_}...*)[$_]}

say code 0; # 2
say code 1; # 3
say code 2; # 7
say code 3; # 43
say code 4; # 1807

# you can even give it a range
say code 4..7;
# (1807 3263443 10650056950807 113423713055421844361000443)

say code 8;
# 12864938683278671740537145998360961546653259485195807
say code 9;
# 165506647324519964198468195444439180017513152706377497841851388766535868639572406808911988131737645185443
say code 10;
# 27392450308603031423410234291674686281194364367580914627947367941608692026226993634332118404582438634929548737283992369758487974306317730580753883429460344956410077034761330476016739454649828385541500213920807

my $start = now;
# how many digits are there in the 20th value
say chars code 20;
# 213441

my $finish = now;
# how long did it take to generate the values up to 20
say $finish - $start, ' seconds';
# 49.7069076 seconds
Brad Gilbert b2gills
sumber
Irisan array dengan $_? Sihir apakah ini?
Zaid
8

Haskell, 26 byte

f n|n<1=2|m<-f$n-1=1+m*m-m

Contoh penggunaan: f 4-> 1807.

nimi
sumber
7

Java 7, 46 42 byte

int f(int n){return--n<0?2:f(n)*~-f(n)+1;}

Menggunakan pengindeksan 0 dengan rumus biasa. Aku bertukar n*n-nuntuk n*(n-1)meskipun, karena Java tidak memiliki operator listrik berguna, dan f()panggilan mendapatkan panjang.

Geobit
sumber
3
f(n)*~-f(n)harus bekerja.
Dennis
1
Bagaimana saya bisa melupakan trik itu setiap saat ? Jika itu tidak ada di halaman tips, pasti akan.
Geobits
2
return--n<0menghemat satu byte lagi.
Dennis
6

Haskell, 25 byte

(iterate(\m->m*m-m+1)2!!)
Tidak
sumber
6

SILOS , 60 byte

readIO 
p = 2
lblL
r = p
r + 1
p * r
i - 1
if i L
printInt r

Cobalah online!

Pelabuhan jawaban saya di C .

Biarawati Bocor
sumber
Yay: D akhirnya seorang pegolf SILOS, yang menarik adalah bahwa ia mengalahkan Scala :)
Rohan Jhunjhunwala
5

Brain-Flak , 158 154 byte

Leaky Nun membuatku mengalahkan di sini

({}<(()())>){({}[()]<<>(())<>([]){{}<>({}<<>(({}<>))><>)<>({<({}[()])><>({})<>}{})<>{}([])}{}<>({}())([]){{}({}<>)<>([])}{}<>>)}{}([][()]){{}{}([][()])}{} 

Cobalah secara Online!

Penjelasan

Letakkan dua di bawah input a (0)

({}<(()())>) 

Sementara input lebih besar dari nol kurangi satu dari input dan ...

{
({}[()]

Diam-diam ...

<

Letakkan satu di tumpukan lain untuk bertindak sebagai katalis untuk perkalian <> (()) <>

Sementara tumpukan tidak kosong

 ([])
 {
  {}

Pindahkan bagian atas daftar dan salin

  <>({}<<>(({}<>))><>)

Lipat gandakan katalis dengan salinannya

  <>({<({}[()])><>({})<>}{})<>{}
  ([])
 }
 {}

Tambahkan satu

 <>({}())

Pindahkan urutan kembali ke tumpukan yang tepat

 ([])
 {
 {}
 ({}<>)<>
 ([])
 }
 {}
 <>
>)
}{}

Hapus semua kecuali item bawah (yaitu nomor terakhir yang dibuat)

([][()])
{
{}
{}
([][()])
}
{}
Wisaya Gandum
sumber
5

C, 32 byte

f(n){return--n?f(n)*~-f(n)+1:2;}

Menggunakan pengindeksan berbasis 1. Uji di Ideone .

Dennis
sumber
5

Sebenarnya , 9 byte

2@`rΣτu`n

Cobalah online!

Gunakan hubungan ini sebagai gantinya:

rumus

yang berasal dari hubungan ini dimodifikasi dari yang disediakan dalam urutan:

a(n+1) = a(n) * (a(n) - 1) + 1.

Biarawati Bocor
sumber
5

R, 44 42 41 byte

2 byte menghemat berkat JDL

Hemat 1 byte berkat pengguna5957401

f=function(n)ifelse(n,(a=f(n-1))^2-a+1,2)
Mamie
sumber
1
Tidak jelas dari pernyataan masalah, tetapi selama ndijamin tidak negatif maka kondisinya bisa dikurangi dari n>0menjadi adil n.
JDL
@JDL Bagus! Terima kasih!
Mamie
f(n-1)adalah 6 byte. Saya pikir Anda menyimpan byte dengan menetapkannya untuk sesuatu. yaituifelse(n,(a=f(n-1))^2-a+1,2)
user5957401
5

Oasis , 4 byte (tidak bersaing)

Mungkin bahasa terakhir saya dari keluarga golf! Non-bersaing, karena bahasa tersebut mengungguli tantangan.

Kode:

²->2

Solusi alternatif berkat Zwei :

<*>2

Versi yang diperluas:

a(n) = ²->
a(0) = 2

Penjelasan:

²    # Stack is empty, so calculate a(n - 1) ** 2.
 -   # Subtract, arity 2, so use a(n - 1).
  >  # Increment by 1.

Menggunakan pengkodean CP-1252 . Cobalah online!

Adnan
sumber
Bahasa golf terakhir? Anda tidak akan menghasilkan lagi? D:
Conor O'Brien
@ ConorO'Brien Mungkin, saya kehabisan ide sekarang :(
Adnan
Sebelum melihat tantangan ini, saya b<*>2menggunakana(n-1)*(a(n-1)+1)-1
Zwei
@ Zwei Sangat rapi! Anda benar-benar dapat meninggalkan bkarena itu akan secara otomatis diisi (daripada input) :).
Adnan
1
Yup, saya perhatikan itu setelah memposting. Saya terkejut seberapa baik bahasa ini bekerja untuk ini, meskipun ia dirancang untuk urutan.
Zwei
3

Python, 38 36 byte

2 byte berkat Dennis.

f=lambda n:0**n*2or~-f(n-1)*f(n-1)+1

Ide itu!

Menggunakan hubungan ini yang diubah dari yang disediakan dalam urutan sebagai gantinya:

a(n+1) = a(n) * (a(n) - 1) + 1

Penjelasan

0**n*2mengembalikan 2kapan n=0dan 0sebaliknya, karena 0**0didefinisikan berada 1dalam Python.

Biarawati Bocor
sumber
3

Cheddar , 26 byte

n g->n?g(n-=1)**2-g(n)+1:2

Cobalah online!

Idiomatik.

Penjelasan

n g ->    // Input n, g is this function
  n ?     // if n is > 1
    g(n-=1)**2-g(n)+1   // Do equation specified in OEIS
  : 2     // if n == 0 return 2
Downgoat
sumber
Sekarang 4 kali (hampir)
Leaky Nun
Mengapa Anda menghapus tautan TIO?
Leaky Nun
@ LeakyNun oh Anda harus mengedit saat saya
Downgoat
3

05AB1E , 7 byte

2sFD<*>

Dijelaskan

Menggunakan pengindeksan berbasis nol.

2         # push 2 (initialization for n=0)
 sF       # input nr of times do
   D<*    # x(x-1)
      >   # add 1

Cobalah online!

Emigna
sumber
3

Prolog, 49 byte

a(0,2).
a(N,R):-N>0,M is N-1,a(M,T),R is T*T-T+1.
Biarawati Bocor
sumber
3

SILOS 201 byte

readIO 
def : lbl
set 128 2
set 129 3
j = i
if j z
print 2
GOTO e
:z
j - 1
if j Z
print 3
GOTO e
:Z
i - 1
:a
a = 127
b = 1
c = 1
:b
b * c
a + 1
c = get a
if c b
b + 1
set a b
i - 1
if i a
printInt b
:e

Jangan ragu untuk mencobanya secara online!

Rohan Jhunjhunwala
sumber
2
Apa yang sedang terjadi
TuxCrafting
1
@TùxCräftîñg sihir
Rohan Jhunjhunwala
2

Jelly , 7 byte

²_’
2Ç¡

Cobalah online!

Menggunakan hubungan ini yang disediakan dalam urutan sebagai gantinya: a(n+1) = a(n)^2 - a(n) + 1

Penjelasan

2Ç¡   Main chain, argument in input

2     Start with 2
  ¡   Repeat as many times as the input:
 Ç        the helper link.


²_’   Helper link, argument: z
²     z²
  ’   z - 1
 _    subtraction, yielding z² - (z-1) = z² - z + 1
Biarawati Bocor
sumber
2

C, 46 byte

s(n,p,r){for(p=r=2;n-->0;p*=r)r=p+1;return r;}

Ide itu!

Penggunaan p sebagai penyimpanan sementara produk.

Pada dasarnya, saya mendefinisikan dua urutan p(n)dan r(n), di mana r(n)=p(n-1)+1danp(n)=p(n-1)*r(n) .

r(n) adalah urutan yang diperlukan.

Biarawati Bocor
sumber
1
Apa alasan Anda tidak menggunakan hubungan yang sama dari jawaban Python Anda di sini? Itu harusnya jauh lebih pendek ...
Dennis
@ Dennis Ini lebih menarik.
Leaky Nun
@ Dennis Dan jawaban ini bisa diangkut
Leaky Nun
2

R, 50 46 44 byte

    n=scan();v=2;if(n)for(i in 1:n){v=v^2-v+1};v

Daripada melacak seluruh urutan, kami hanya melacak produk, yang mengikuti aturan pembaruan kuadratik yang diberikan selama n> 1 n> 0. (Urutan ini menggunakan "mulai dari satu konvensi nol")

Menggunakan start at zero convention menghemat beberapa byte karena kita dapat menggunakan if (n) daripada if (n> 1)

JDL
sumber
2

Ubur-ubur , 13 byte

p
\Ai
&(*
><2

Cobalah online!

Penjelasan

Mari kita mulai dari bawah ke atas:

(*
<

Ini adalah pengait, yang mendefinisikan fungsi f(x) = (x-1)*x.

&(*
><

Ini menyusun kait sebelumnya dengan fungsi kenaikan sehingga memberi kita fungsi g(x) = (x-1)*x+1.

\Ai
&(*
><

Akhirnya, ini menghasilkan fungsi hyang merupakan iterasi dari fungsi sebelumnya g, sebanyak yang diberikan oleh input integer.

\Ai
&(*
><2

Dan akhirnya, kami menerapkan iterasi ini ke nilai awal 2. Itup di atas hanya mencetak hasilnya.

Alternatif (juga 13 byte)

p
>
\Ai
(*
>1

Ini mempertahankan kenaikan sampai akhir.

Martin Ender
sumber
2

C, 43 , 34 , 33 byte

1-diindeks:

F(n){return--n?n=F(n),n*n-n+1:2;}

Tes utama:

int main() {
  printf("%d\n", F(1));
  printf("%d\n", F(2));
  printf("%d\n", F(3));
  printf("%d\n", F(4));
  printf("%d\n", F(5));
}
Stefano Sanfilippo
sumber
2

Brachylog , 13 byte

0,2|-:0&-y+*+

Cobalah online!

Gunakan hubungan ini sebagai gantinya:

formula

yang berasal dari hubungan ini dimodifikasi dari yang disediakan dalam urutan:

a(n+1) = a(n) * (a(n) - 1) + 1.

Biarawati Bocor
sumber
2

Mathematica, 19 byte

Nest[#^2-#+1&,2,#]&

Atau 21 byte:

Array[#0,#,0,1+1##&]&
alephalpha
sumber
The Arraysolusi ajaib. Sayang sekali, ##0bukan hal. ;)
Martin Ender
2

Labirin , 18 byte

Kredit untuk Sp3000 yang menemukan solusi yang sama secara mandiri.

?
#
)}"{!@
* (
(:{

Cobalah online!

Martin Ender
sumber
1

Sebenarnya , 14 12 byte

Ini digunakan pengindeksan 0. Saran golf diterima. Cobalah online!

2#,`;πu@o`nF

Tidak melakukan pelanggaran:

2#              Start with [2]
  ,`     `n     Take 0-indexed input and run function (input) times
    ;           Duplicate list
     πu         Take product of list and increment
       @o       Swap and append result to the beginning of the list
           F    Return the first item of the resulting list
Sherlock9
sumber
1

GolfScript , 12 10 byte

2 byte berkat Dennis.

~2\{.(*)}*

Cobalah online!

Penggunaan a(n) = a(n-1) * (a(n-1)-1) + 1.

Biarawati Bocor
sumber
2
(kependekan dari 1-; )kependekan dari 1+.
Dennis
3
@Dennis Terima kasih, saya pasti orang yang bodoh.
Leaky Nun