Generator Pola Pea Naik

8

Bagi mereka yang tidak terbiasa dengan Pola Kacang polong , ini adalah pola matematika sederhana.

Ada beberapa variasi dari pola ini, tetapi kami akan fokus dalam satu:

Pola Kacang Ascending

Ini terlihat seperti ini:

1
11
21
1112
3112
211213
...

Tampaknya sangat sulit untuk mendapatkan baris berikut, tetapi sangat mudah. Cara untuk mendapatkan baris berikutnya adalah dengan menghitung berapa kali angka telah diulang pada baris sebelumnya (mulai menghitung dengan yang terendah, hingga terbesar):

one
one one
two ones
one one, one two
three ones, one two
two ones, one two, one three
...

Persyaratan / Aturan:

  • Kami akan mulai 1
  • Itu akan menjadi cuplikan
  • Harus ada cara untuk menentukan jumlah baris yang dihasilkan (mis. 5 Akan memberikan 5 baris pertama)
  • Kode harus sesingkat mungkin
  • Itu harus mulai menghitung dari terendah ke terbesar (variasi Ascending)
ajax333221
sumber
Saya baru di sini, tolong katakan padaku bagaimana saya bisa meningkatkan. Misalnya, haruskah saya menentukan batas tanggal?
ajax333221
1
Anda dapat menentukan apakah Anda ingin program lengkap dengan I / O atau snippet sudah cukup (atau jika Anda tidak peduli.) Tapi itu terlihat cukup jelas pada pandangan pertama.
JB
@ JK Terima kasih atas kata-kata pencerahan Anda. Saya telah memperbarui posting saya
ajax333221
Iterasi ke-13, dan semua iterasi berikutnya, adalah 21322314. Apakah ini benar?
Joey Adams

Jawaban:

4

APL, 32 karakter

⍪⌽({⍵,⍨,/{⌽⍵,+/⍵⍷d}¨⍳⌈/d←⊃⍵}⍣⎕)1

Ini menghasilkan baris mulai dari 0 (yaitu 0menghasilkan 1, 1menghasilkan 1diikuti oleh 1 1, dll.), Seperti yang ditentukan oleh input pengguna. Saya menggunakan Dyalog APL untuk ini, dan ⎕IOharus ditetapkan ke default 1.

Contoh:

      ⍪⌽({⍵,⍨,/{⌽⍵,+/⍵⍷d}¨⍳⌈/d←⊃⍵}⍣⎕)1
⎕:
      0
1

      ⍪⌽({⍵,⍨,/{⌽⍵,+/⍵⍷d}¨⍳⌈/d←⊃⍵}⍣⎕)1
⎕:
      13
               1 
             1 1 
             2 1 
         1 1 1 2 
         3 1 1 2 
     2 1 1 2 1 3 
     3 1 2 2 1 3 
     2 1 2 2 2 3 
     1 1 4 2 1 3 
 3 1 1 2 1 3 1 4 
 4 1 1 2 2 3 1 4 
 3 1 2 2 1 3 2 4 
 2 1 3 2 2 3 1 4 
 2 1 3 2 2 3 1 4

Setelah saya mendapatkan waktu lagi, saya akan menulis penjelasan. ⍨

Dillon Cower
sumber
3

Python (2.x), 81 80 karakter

l='1'
exec"print l;l=''.join(`l.count(k)`+k for k in sorted(set(l)))\n"*input()

Semua tips atau komentar diterima!

penggunaan: python peapattern.py
15 # masukkan jumlah iterasi
1
11
21
1112
3112
211213
312213
212223
114213
31121314
41122314
31221324
21322314
21322314
21322314
ChristopheD
sumber
2

Perl, 83

Saya cukup yakin beberapa guru Perl bisa mengalahkan ini, tapi begini:

$_++;$n=<>;for(;$n--;){print$_.$/;$r='';$r.=length($&).$1 while(s/(.)\1*//);$_=$r;}

Diperluas:

$_++;$n=<>;

for(;$n--;)
{
    print $_.$/;

    $r='';$r .= length($&).$1 while (s/(.)\1*//);  # The magic
    $_=$r;
}

Jumlah baris dilewatkan melalui STDIN.

Tuan Llama
sumber
Bukan seorang guru, saya yakin ada cara yang lebih pendek untuk ditemukan, tetapi 46 menggunakan metode yang hampir sama: Coba online!
Dom Hastings
2

J, 60 46 39 26 karakter

1([:,(#,{.)/.~@/:~)@[&0~i.

Sunting 3 : Datang dengan cara yang lebih baik untuk mengekspresikan ini.

1([:;[:|."1[:/:~~.,.[:+/"1[:~.=)@[&0~i.

Sunting 2 : Akhirnya menemukan cara untuk memindahkan argumen ke akhir urutan dan menyingkirkan hal-hal tugas yang tidak perlu.

Sebelumnya:

p=.3 :'([:,[:|."1[:/:~~.,.[:+/"1[:~.=)^:(i.y)1

Sunting 1 : Memperbaiki output yang seharusnya ybaris daripada baris yke - th. Juga mempersingkat hal-hal sedikit. Malu tentang 0s, sepertinya tidak bisa menyingkirkan barang-barang sialan itu.

Pemakaian:

   1([:,(#,{.)/.~@/:~)@[&0~i. 1
1

   1([:,(#,{.)/.~@/:~)@[&0~i. 6
1 0 0 0 0 0
1 1 0 0 0 0
2 1 0 0 0 0
1 1 1 2 0 0
3 1 1 2 0 0
2 1 1 2 1 3

   1([:,(#,{.)/.~@/:~)@[&0~i. 10
1 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
2 1 0 0 0 0 0 0
1 1 1 2 0 0 0 0
3 1 1 2 0 0 0 0
2 1 1 2 1 3 0 0
3 1 2 2 1 3 0 0
2 1 2 2 2 3 0 0
1 1 4 2 1 3 0 0
3 1 1 2 1 3 1 4

Diakui penggunaannya lebih buruk sekarang, tetapi kecantikan bukan nama permainan di sini ...

Gareth
sumber
Ini akan sulit dikalahkan dengan 'bahasa tradisional'. Mungkin skrip golf atau sejenisnya sesuai dengan tugas ;-)
ChristopheD
1

Haskell, 116

import Data.List
main=interact(unlines.map(show=<<).($iterate((>>=
 \x->[length x,head x]).group.sort)[1]).take.read)

Pemakaian:

$ runhaskell pea.hs <<< 15
1
11
21
1112
3112
211213
312213
212223
114213
31121314
41122314
31221324
21322314
21322314
21322314
Joey Adams
sumber
1

Gangguan Umum, 140 karakter

(defun m(x)
  (labels((p(l n)
    (if(= 0 n)
       nil
       (cons l
             (p(loop for d in(sort(remove-duplicates l)#'<)
                  append(list(count d l)d))
               (1- n))))))
    (p'(1) x)))

Ini adalah Lisp, jadi fungsinya mengembalikan daftar daftar. (mx) menghasilkan X sublists.

Paul Richter
sumber
1

Mathematica, 70

NestList[FromDigits@TakeWhile[DigitCount@#~Riffle~Range@9,#>0&]&,1,#]&
Tuan Wisaya
sumber
1

Jelly , 13 11 byte (Umpan balik dihargai)

1ṢŒrUFƲСṖY

Cobalah online!

1ṢŒrUFƲСṖY
1     Ʋ         starting with 1, run these 4 links...
 ṢŒr            Ṣort the list and get the Œrun-length encoding of it,
    U           reverse each member of the RLE list (so it goes [repetitions, digit] instead of [digit, repetitions]),
     F          and Flatten the RLE list-of-lists to just a list of digits, which is the next number.
       С       do that (input) number of times,
         ṖY     Ṗop the last line off the output (an extra line is always calculated) and then print the numbers, separated by newlines.
Harry
sumber
1
U€bisa saja U, itu vectorizes ke tingkat baris. Kemudian Anda dapat menyimpan byte inlining lainnya ṢŒrUF, menggunakan Ʋ(4 tautan terakhir sebagai monad):1ṢŒrUFƲСṖY
Lynn
Terima kasih sekali lagi untuk peningkatan @Lynn! Selalu menyenangkan untuk beralih dari 5+ tautan ke 4 sehingga Anda dapat menggunakannya dengan cepat.
Harry
1
Sama-sama! (Kecil catatan: ṢŒrU€FƲakan bekerja dengan baik - menggelinding [ , Œr, U€, F.] Ke monad Mungkin saya gunakan "kemudian" sedikit menyesatkan ^^; Demikian pula, dalam sesuatu seperti abc$de$fƲakan beroperasi pada 4 link [ a, bc$, de$, f] dan gulung mereka menjadi monad. Ini adalah pengertian di mana Anda dapat menganggap quicks sebagai "operator stack parse-time": hasil mereka didorong kembali ke stack, dan bertindak seolah-olah itu adalah salah satu tautan untuk quick quick di masa depan. )
Lynn
1
@ Lynn saya mengerti, terima kasih lagi! Semakin banyak yang lebih baik dalam tautan "penghitungan" sekarang, dapat menyatukan jawaban ini sepenuhnya dan menghemat satu byte berkat komentar Anda!
Harry