Daftar membatasi diri
Pertimbangkan daftar L kosong yang berisi bilangan bulat tidak negatif. Sebuah run di L adalah sublist bersebelahan elemen yang sama, yang tidak bisa dibuat lagi. Misalnya, menjalankan [0,0,1,1,3,3,3,2,1,1] adalah [0,0], [1,1], [3,3,3], [2 ], [1,1] . Daftar L adalah membatasi diri jika untuk setiap bilangan bulat N ≥ 1 , jumlah kejadian N kurang dari atau sama dengan jumlah deret dari N-1 . Daftar di atas tidak membatasi diri, karena ada 4 kemunculan 1 , tetapi hanya satu kali 0 detik.
Berikut adalah contoh daftar self-limiting: [0,0,3,4,1,0,2,1,1,0,2,1,0,0,0,0,0]] . Memiliki
- 5 kali 0 dan 5 kejadian 1 ,
- 4 kali 1 dan 2 kali 2 ,
- 2 kali 2 dan 1 kemunculan 3 ,
- 1 run of 3 dan 1 terjadinya 4 ,
- 1 run of 4 dan tidak ada kejadian 5 ,
- tidak ada kemunculan bilangan bulat lainnya.
Tugas
Tugas Anda adalah memutuskan apakah suatu daftar membatasi diri. Secara lebih eksplisit, input Anda akan berupa daftar bilangan bulat non-negatif yang tidak kosong. Jika daftar itu membatasi diri, hasil Anda akan benar; jika tidak, itu akan salah. Input dan output dapat dalam format apa pun yang masuk akal.
Hitungan byte terendah dalam setiap bahasa pemrograman adalah pemenangnya. Aturan standar kode-golf berlaku.
Uji kasus
Contoh kebenaran:
[0]
[1,0]
[0,1,1,0,2]
[3,1,1,0,0,2,0,0]
[5,0,4,1,3,0,2,2,0,1,1,1,0]
[0,0,1,1,0,0,1,1,0,0,2,2,0,0]
[6,0,0,0,2,2,1,0,5,0,3,4,0,1,1,1]
[5,0,1,0,0,0,0,4,0,3,1,1,1,2,2,0,0,0,0,0]
[4,5,1,3,2,0,5,2,0,3,0,1,0,1,0,0,0,1,0,0,1,0,3,4,4,0,2,6,0,2,6]
[0,4,1,3,10,6,0,1,3,7,9,5,5,0,7,4,2,2,5,0,1,3,8,8,11,0,0,6,2,1,1,2,0,4]
Contoh palsu:
[2]
[1,1,0]
[0,0,1,1,1,0,0,2]
[0,1,0,1,1,2,2,3,0,0,4,6]
[1,1,2,1,2,0,2,0,3,0,0,2,2,1,2,3,2,0,1,1,1,0,0,3,3,0]
[3,4,1,0,0,0,5,5,0,2,2,0,0,0,0,0,2,0,1,1,0,4,3,5,4,3]
[1,0,0,0,2,5,3,1,1,0,3,3,1,3,5,4,0,4,0,0,2,0,2,1,1,5,0,0,2,4,4,0,2,0,1,4,4,2,3,3,5,3,4,0,2,0,5]
[4,3,1,0,0,4,6,6,1,0,1,2,1,3,0,1,0,2,0,3,4,0,2,1,1,3,0,2,2,2,0,5,5,0,5,2,5,5,0,4,3,2,3,1,1,3,5,1,4,1,6,2,6,2,4,0,4,0,4,5,3,3,0,0,6,1,0,0,0,6,2,1,0,1,2,6,2,4]
[5,1,1,1,0,2,0,6,1,0,2,1,2,2,5,3,1,0,0,0,3,2,3,0,1,1,0,1,0,1,1,2,0,6,4,1,2,1,1,6,4,1,2,2,4,0,1,2,2,1,3,0,1,2,0,0,0,2,0,2,2,0,1,0,0,1,3,0,0,0,6,2,0,1,0,1,2,1,1,1,0,4,0,0,5,2,0,0,0,4,1,2,2,2,2,0,5,3,2,4,5,0,5]
[2]
juga, tapi kasus-kasus seperti itu seharusnya palsu, ya.Jawaban:
Perl 6 , 29 byte
Cobalah online!
Tantangan yang sangat bagus untuk Perl 6. Menggunakan operator subset pada Bags (set integer-weighted). Penjelasan:
sumber
JavaScript (ES6),
9289 byteCobalah online!
Bagaimana?
Array c [] digunakan untuk menyimpan jumlah proses dan jumlah kejadian bilangan bulat. Run disimpan pada indeks non-negatif dan kejadian integer disimpan pada indeks komplemen 1's ( c [-1] = jumlah 0 's, c [-2] = jumlah 1 ' s, dll.).
Indeks negatif sebenarnya disimpan sebagai properti dari objek array yang mendasarinya dan .some () tidak mengulanginya.
sumber
Perl 5
-p
,494844 byteCobalah online!
sumber
Jelly , 10 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Jelly , 19 byte
Cobalah online!
sumber
Jelly , 17 byte
Cobalah online!
sumber
Python 3 , 94 byte
Cobalah online!
sumber
sum(1for ... if x==j!=y)
=>sum(x==j!=y for ...)
.Japt , 21 byte
Uji secara online!
sumber
Stax ,
139 byteDennis menemukan algoritma yang jauh lebih baik . Saya tanpa malu-malu porting ke stax.
Jalankan dan debug secara online
Dibongkar, tidak diserang, dan berkomentar, seperti inilah bentuknya.
Jalankan yang ini
Jawaban lama:
Jalankan dan debug itu
Itu beralih pada input dan memeriksa kondisi:
> 0
?occurrences(element) >= runs(element - 1)
?Jika salah satu dari kondisi ini berlaku untuk suatu elemen, maka elemen tersebut sesuai. Jika semua elemen sesuai, hasilnya adalah
1
.Inilah representasi yang tidak dibungkus, tidak disunat, dan komentar dari program yang sama.
Jalankan yang ini
sumber
Haskell, 80 byte
Cobalah online!
sumber