Ini adalah bagaimana urutan Kolakoski (OEIS A000002 ) didefinisikan:
Urutan Kolakoski adalah urutan yang berisi
1
dan2
, dann
elemen ke-5 dari urutan adalah panjangn
kelompok ke-sama dari elemen (run) dalam urutan itu sendiri. 20 syarat pertama dari urutan dan panjang masing-masing adalah:1 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1 - --- --- - - --- - --- --- - --- --- - 1 2 2 1 1 2 1 2 2 1 2 2 1
Pada dasarnya, panjang kelompok unsur yang sama dari urutan Kolakoski adalah urutan Kolakoski itu sendiri.
Sejauh ini, sangat baik, tetapi mengapa kita harus membatasi diri pada 1
dan 2
? Kita tidak akan pergi! Diberikan dua input, array bilangan bulat positif A
dan bilangan bulat N
, mengembalikan N
istilah pertama dari urutan seperti Kolakoski yang didefinisikan oleh siklus bersepeda A
. Untuk memahami lebih baik, berikut adalah contoh yang berhasil dengan panjang grup yang baru ditambahkan dalam tanda kurung:
A = [2, 3, 1]
N = 25
2: [[2], 2 ]
3: [ 2 ,[2], 3 , 3 ]
1: [ 2 , 2 ,[3], 3 , 1 , 1 , 1 ]
2: [ 2 , 2 , 3 ,[3], 1 , 1 , 1 , 2 , 2 , 2 ]
3: [ 2 , 2 , 3 , 3 ,[1], 1 , 1 , 2 , 2 , 2 , 3 ]
1: [ 2 , 2 , 3 , 3 , 1 ,[1], 1 , 2 , 2 , 2 , 3 , 1 ]
2: [ 2 , 2 , 3 , 3 , 1 , 1 ,[1], 2 , 2 , 2 , 3 , 1 , 2 ]
3: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 ,[2], 2 , 2 , 3 , 1 , 2 , 3 , 3 ]
1: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 ,[2], 2 , 3 , 1 , 2 , 3 , 3 , 1 , 1 ]
2: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 ,[2], 3 , 1 , 2 , 3 , 3 , 1 , 1 , 2 , 2 ]
3: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 ,[3], 1 , 2 , 3 , 3 , 1 , 1 , 2 , 2 , 3 , 3 , 3 ]
1: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 ,[1], 2 , 3 , 3 , 1 , 1 , 2 , 2 , 3 , 3 , 3 , 1 ]
2: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 1 ,[2], 3 , 3 , 1 , 1 , 2 , 2 , 3 , 3 , 3 , 1 , 2 , 2 ]
C: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 1 , 2 , 3 , 3 , 1 , 1 , 2 , 2 , 3 , 3 , 3 , 1 , 2 , 2 ]
Berikut ini contoh lain yang berhasil dengan seorang pemimpin 1
:
A = [1, 2, 3]
N = 10
1: [[1]]
2: [ 1 ,[2], 2 ]
3: [ 1 , 2 ,[2], 3 , 3 ]
1: [ 1 , 2 , 2 ,[3], 3 , 1 , 1 , 1 ]
2: [ 1 , 2 , 2 , 3 ,[3], 1 , 1 , 1 , 2 , 2 , 2 ]
C: [ 1 , 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 ]
Seperti yang Anda lihat di atas, hasil akhir dipotong menjadi N = 10
elemen. The n
elemen th harus berapa lama n
th sama-elemen kelompok, bahkan jika elemen itu sendiri termasuk dalam kelompok itu mengacu. Seperti dalam kasus di atas, yang pertama 1
merujuk pada kelompok pertama yang demikian 1
, dan yang pertama 2
mengacu pada kelompok kedua yang dimulai dengan itu.
Aturan
- Anda dapat berasumsi bahwa
A
tidak akan pernah memiliki dua atau lebih elemen yang sama berturut-turut.A
mungkin mengandung integer lebih dari sekali, tetapi elemen pertama dan terakhir tidak akan sama, danA
akan mengandung setidaknya 2 elemen (misalnya[1, 2, 2, 3]
,[2, 4, 3, 1, 2]
dan[3]
tidak akan diberikan). Itu karena jika ada elemen yang sama berturut-turut, hasil akhirnya akan menjadi awalan yang tidak valid untuk urutan seperti itu. - Anda dapat mengasumsikan
A
hanya berisi bilangan bulat positif (karena urutan seperti itu akan tidak terdefinisi). - Anda dapat menganggap
N
adalah bilangan bulat non-negatif (N >= 0
). - Anda tidak dapat mengembalikan lebih banyak persyaratan daripada yang diminta.
- Dilarang menggunakan salah satu celah standar .
- Anda dapat menggunakan metode I / O yang masuk akal .
- Jawaban Anda tidak harus bekerja di luar batas bahasa alami, tetapi secara teori algoritma Anda harus bekerja untuk input dan bilangan bulat besar yang sewenang-wenang .
- Ini kode-golf , jadi jawaban terpendek menang.
Uji kasus
[5, 1, 2], 0 -> []
[2, 3, 1], 25 -> [2, 2, 3, 3, 1, 1, 1, 2, 2, 2, 3, 1, 2, 3, 3, 1, 1, 2, 2, 3, 3, 3, 1, 2, 2]
[1, 2, 3], 10 -> [1, 2, 2, 3, 3, 1, 1, 1, 2, 2]
[1, 2], 20 -> [1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1]
[1, 3], 20 -> [1, 3, 3, 3, 1, 1, 1, 3, 3, 3, 1, 3, 1, 3, 3, 3, 1, 1, 1, 3]
[2, 3], 50 -> [2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3]
[7, 4], 99 -> [7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 7, 7, 7, 7, 4, 4, 4, 4, 7, 7, 7, 7, 4, 4, 4, 4, 7, 7, 7, 7, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4]
[1, 2, 3], 5 -> [1, 2, 2, 3, 3]
[2, 1, 3, 1], 2 -> [2, 2]
[1, 3, 5], 2 -> [1, 3]
[2, 3, 2, 4], 10 -> [2, 2, 3, 3, 2, 2, 2, 4, 4, 4]
sumber
Jawaban:
Sekam , 8 byte
Mengambil panjang pertama, lalu daftar. Cobalah online!
Penjelasan
sumber
Pyth, 14 byte
Cobalah online: Demonstrasi atau Test suite
Penjelasan:
sumber
u&VSvzs*V]M*Ql
Java 8,
151 + 19119115 byteCobalah online!
sumber
&&
ke&
dan menghapus tanda koma:a->n->{int c=0,l[]=new int[n],i=0,j;for(;i<n;i++)for(j=0;j<(c==i?a[i]:l[i])&c<n;j++)l[c++]=a[i%a.length];return l;}
( 115 bytes )(c==i?a:l)[i]
alih-alihc==i?a[i]:l[i]
R ,
120114108 byte-6 byte terima kasih kepada plannapus
Cobalah online!
Fungsi anonim; berturut-turut membalikkan RLE, mengganti panjang
a[[1]]
dengan RLE terbalik, dan nilai-nilaia[[2]]
denganA
direplikasi dengan panjang yang sama dengana$l
.sumber
a$l
dana$v
jika mereka tidak ada, tetapi mereka tidak akan memengaruhi panggilaninverse.rle
, menyebabkan loop tak terbatas. Saya pikir saya hanya dapat menggunakana$l
dalamwhile
kondisi danrep
kondisi.Haskell , 68 byte
Banyak terima kasih kepada Laikoni dan flawr atas bantuan mereka dalam debugging dan golf jawaban ini di chatroom PPCG Haskell, Of Monads and Men . Selamat datang saran bermain golf! Cobalah online!
Baris pertama adalah fungsi anonim. Baris kedua adalah pemahaman daftar tak terbatas yang menghasilkan urutan seperti Kolakoski kami.
Penjelasan
Pertama, kami mendefinisikan
z
sebagai kepalaa
dengana@(z:_)
. Kemudian, kita inisialisasi urutan dengan(z<$[1..z])
.Kemudian, dari
1
dan seterusnya,,do i<-[1..]
kami menambahkan yang berikut ini ke urutan :,cycle a!!i<$[1..f a!!i]
yang merupakani
anggota ke-kali daria
(siklus yang tidak terbatas) ditambahkanf a!!i
.Akhirnya, fungsi anonim hanya mengambil
n
syarat pertama dari urutan seperti Kolaskoski kami.sumber
Python 2 , 123 byte
Cobalah online!
sumber