Pengelompokan mengambil daftar dan membaginya menjadi daftar baru dari elemen yang berdekatan yang sama. Sebagai contoh
[1,1,2,1,1] -> [[1,1],[2],[1,1]]
Jika Anda kemudian mengambil panjang dari grup-grup ini Anda mendapatkan daftar bilangan bulat baru
[1,1,2,1,1] -> [2,1,2]
Tugas Anda adalah menulis sebuah program yang mengambil daftar bilangan bulat positif dan menemukan berapa kali Anda dapat mengelompokkan dan memperpanjangnya sebelum daftar yang dihasilkan memiliki satu elemen. Misalnya daftar [1,2,3,3,2,1]
dapat dikelompokkan ulang 4 kali
[1,2,3,3,2,1]
[1,1,2,1,1]
[2,1,2]
[1,1,1]
[3]
Ini adalah kode-golf sehingga jawaban akan dicetak dalam byte dengan lebih sedikit byte yang lebih baik.
Uji kasus
[1,2,3,3,2,1] -> 4
[1,2,3,4,5,6,7] -> 2
[1,1,1,1,1,1] -> 1
[2] -> 0
[1,2,4] -> 2
[1,2,2,1,1,2] -> 4
[1,2,2,1,1,2,1,2,2] -> 5
[1] -> 0
code-golf
array-manipulation
Posting Rock Garf Hunter
sumber
sumber
[1]
apakah input yang valid dan harus memberi0
, benar?Jawaban:
Haskell, 49 byte
Cobalah online!
sumber
CJam , 18 byte
Cobalah online!
sumber
Japt , 12 byte
Uji secara online!
Penjelasan
Rekursi adalah pendekatan yang benar-benar non-konvensional untuk Japt, tetapi tampaknya 4 byte lebih pendek dari alternatif berikutnya ...
sumber
F.a()
masih dapat diakses melalui riwayat revisi. Saya ingin melihat 14-byter Anda!Brachylog , 12 byte
Cobalah online!
Penjelasan
sumber
C (gcc) , 108 byte
Cobalah online!
Penjelasan
Cobalah online!
sumber
JavaScript (ES6),
676563 byteAnehnya, JavaScript dan Japt tampaknya memiliki algoritma terpendek yang sama untuk sekali ...
sumber
K (oK) ,
2019 byteLarutan:
Cobalah online!
Contoh:
Penjelasan:
Yang ini cukup sederhana, saya bertanya-tanya apakah ada pendekatan yang lebih baik lagi ... Cari indeks di mana input berbeda, pisahkan di indeks tersebut dan kemudian hitung panjang masing-masing sub-daftar. Iterasi sampai hasil konvergen ke 1.
Catatan:
Solusi 14 byte berikut ini berfungsi untuk semua kecuali satu daftar item:
Cobalah online!
sumber
J ,
2523 byte1 byte disimpan berkat streetster
1 byte disimpan berkat FrownyFrog
Cobalah online!
Solusi awal:
Cobalah online!
Penjelasan
sumber
_2+
menyimpan satu byte?#;.1@(0,2=/\])
menghemat 1 byte.Stax , 9 byte
Jalankan dan debug secara online
Representasi ascii dari program yang sama adalah ini.
Ini menggunakan fitur stax yang disebut generator yang menghasilkan nilai sesuai dengan blok transformasi dan filter.
sumber
Python 2 , 84 byte
Cobalah online!
Bagaimana?
f
adalah fungsi rekursif yang, jika inputnya,a
memiliki panjang 2 atau lebih (len(a)>1
) mengembalikan1+f(x)
* di manax
panjang grupa
; sementara jika inputnya panjang 1 atau 0 kembaliFalse
(sama dengan 0 dalam Python) - ini karena sisi kananand
tidak dievaluasi ketika kiri adalah falsey.*
-~f(x)
Adalah-(-1 - f(x))
tetapi dapat berbatasanand
tidak seperti1+f(x)
atauf(x)+1
)Panjang grup dihitung dengan membuat kode yang kemudian dievaluasi dengan
eval(...)
. Kode yang dibuat adalah sesuatu1,1,1+1+1,1,1+1,1,
yang dievaluasi menjadi seperti tuple(1,1,3,1,2,1)
.Kode dibuat dengan zip melalui
a
dana
tanpa kepalanya (...for x, y in zip(a,a[1:])
membuatx
dany
masing-masing pasangan yang berdekatan masuka
. Jika pasangan samax==y
mengevaluasi keTrue
(1) sebaliknyaFalse
(0) - hasil ini digunakan untuk mengindeks ke dalam string yang,+
menghasilkan+
dan,
masing-masing dan masing-masing karakter yang dihasilkan diawali dengan1
('1'+...
) - semuanya itu telah final, mengikuti1,
. ditambahkan misalnya jikaa
sedang[5,5,2,9,9,9]
makax,y
pasangan akan(5,5)(5,2)(2,9)(9,9)(9,9)
membuat kesamaan-kesamaan10011
maka karakter akan+,,++
, yang dengan sebelumnya1
s menjadi1+1,1,1+1+
dan trailing akhir1,
pembuatan1+1,1,1+1+1,
yang mengevaluasi(2,1,3)
sesuai kebutuhan.Perhatikan bahwa trailing
,
memastikan bahwa input dengan grup tunggal dievaluasi sebagai tupel daripada bilangan bulat (yaitu[3,3]
->1+1,
->(2)
daripada[3,3]
->1+1
->2
)sumber
CJam , 19 byte
Cobalah online!
sumber
CJam , 20 byte
Cobalah online!
sumber
Perl 5 ,
53504945 byteTermasuk
+3
untuk-p
Berikan daftar angka sebagai satu baris pada STDIN
Cobalah online!
sumber
Sekam , 8 byte
-1 byte terima kasih kepada @Zgarb!
Cobalah online!
Penjelasan
sumber
←Vε
adalah cek yang lebih pendek untuk menemukan indeks daftar singleton.Jelly , 10 byte
Cobalah online!
sumber
[1]
. Anda harus dapat memperbaikinya menggunakan dua dequeues / pops bukannya_2
ÐĿ
itu bukan pilihan yang baik di tempat pertama ... Menggantinya dengan loop sementara.05AB1E , 9 byte
Cobalah online!
Penjelasan
sumber
Bahasa Wolfram (Mathematica) , 32 byte
Disimpan 2 byte berkat Martin Ender. Menggunakan pengkodean CP-1252, di mana
±
satu byte.Cobalah online!
sumber
±{_}=0;±x_:=1+±(Length/@Split@x)
(dengan asumsiWindowsANSI
pengkodean)Ruby ,
54 56 5554 byteCobalah online!
sumber
SmileBASIC,
110108 bytePanggil berfungsi sebagai
R list,0
; output dicetak ke konsol.sumber
Python 2 , 85 byte
Cobalah online!
sumber
R ,
5145 byteCobalah online!
Secara rekursif ambil panjang pengkodean run run dan tambahkan penghitung.
sumber
Retina 0.8.2 , 31 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Jika ada koma, kita akan membuat iterasi lain, jadi tambahkan karakter hitungan.
Ganti setiap proses dengan panjang yang dikurangi. Tahap di atas berulang sampai tidak ada koma yang tersisa.
Hitung jumlah iterasi.
sumber
Perl 6 , 52 byte
Menguji
Diperluas:
sumber
Brain-Flak , 78 byte
Cobalah online!
sumber
Pyth , 9 byte
Suite uji!
sumber
Kotlin , 123 byte
Menerima
List<Int>
.Lebih mudah dibaca:
Cobalah online!
131 byte, TIO
181 byte, TIO
Termasuk 39 untuk
import kotlin.coroutines.experimental.*
.sumber
Merah , 140 byte
Cobalah online!
Saya hanya ingin mencoba dialek Red's Parse lagi.
Tidak disatukan
sumber