Deskripsi tantangan
Diberikan daftar / larik item, tampilkan semua grup item berulang berulang.
Deskripsi input / output
Input Anda adalah daftar / larik item (Anda bisa berasumsi semuanya bertipe sama). Anda tidak perlu mendukung setiap jenis bahasa Anda, tetapi harus mendukung setidaknya satu (lebih disukai int
, tetapi jenis seperti boolean
, meskipun tidak terlalu menarik, juga baik-baik saja). Output sampel:
[4, 4, 2, 2, 9, 9] -> [[4, 4], [2, 2], [9, 9]]
[1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4] -> [[1, 1, 1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]
[1, 1, 1, 3, 3, 1, 1, 2, 2, 2, 1, 1, 3] -> [[1, 1, 1], [3, 3], [1, 1], [2, 2, 2], [1, 1], [3]]
[9, 7, 8, 6, 5] -> [[9], [7], [8], [6], [5]]
[5, 5, 5] -> [[5, 5, 5]]
['A', 'B', 'B', 'B', 'C', 'D', 'X', 'Y', 'Y', 'Z'] -> [['A'], ['B', 'B', 'B'], ['C'], ['D'], ['X'], ['Y', 'Y'], ['Z']]
[True, True, True, False, False, True, False, False, True, True, True] -> [[True, True, True], [False, False], [True], [False, False], [True, True, True]]
[0] -> [[0]]
Adapun daftar kosong, output tidak ditentukan - itu bisa apa-apa, daftar kosong, atau pengecualian - apa pun yang paling sesuai dengan tujuan golf Anda. Anda juga tidak perlu membuat daftar daftar yang terpisah, jadi ini juga merupakan keluaran yang benar-benar valid:
[1, 1, 1, 2, 2, 3, 3, 3, 4, 9] ->
1 1 1
2 2
3 3 3
4
9
Yang penting adalah menjaga kelompok tetap terpisah.
code-golf
array-manipulation
shooqie
sumber
sumber
int
s dipisahkan oleh, misalnya,0
s akan menjadi ide yang buruk karena ada0
s di input ...[4, 4, '', 2, 2, '', 9, 9]
atau[4, 4, [], 2, 2, [], 9, 9]
.Jawaban:
Mathematica, 5 byte
... ada built-in untuk itu.
sumber
Jelly , 5 byte
Berfungsi untuk semua jenis numerik. Cobalah online! atau verifikasi semua uji numerik .
Bagaimana itu bekerja
sumber
Retina ,
158 byteTerima kasih kepada Lynn untuk menyarankan format I / O yang lebih sederhana.
Memperlakukan input sebagai daftar karakter (dan menggunakan umpan baris untuk memisahkan grup).
Cobalah online!
Ini hanya bekerja dengan mencocokkan grup dan mencetak semuanya (yang menggunakan pemisahan linefeed secara otomatis).
sumber
abbcccddd
→a bb ccc ddd
menjadi format I / O yang dapat diterima, dan OP menyetujuinya, jadi saya kira!`(.)\1*
tidak apa-apa?JavaScript (ES6),
3937 byteBekerja pada token seperti-kata yang dipisahkan oleh ruang. Disimpan 2 byte berkat @ MartinEnder ♦. Terbaik yang bisa saya lakukan untuk input array dan kembali adalah 68:
sumber
MATL , 9 byte
Input adalah deretan baris angka , dengan spasi atau koma sebagai pemisah.
Cobalah online! Tes dengan angka non-integer .
MATL, 11 byte
Input adalah array kolom baik angka atau karakter , menggunakan
;
sebagai pemisah.Cobalah online! Tes dengan angka acak . Uji dengan karakter .
sumber
gs2, 2 byte
Cobalah online!
c
adalah pengelompokan bawaan yang melakukan hal ini, jadi kami menyebutnya di STDIN (yang merupakan string, yaitu, daftar karakter) dan mendapatkan daftar string. Sayangnya, hasilnya tidak dapat dibedakan dari input, jadi kita perlu menambahkan pemisah!-
(Gabung dengan spasi) melakukan trik.Jawaban alternatifnya adalah
cα
(2 byte dari CP437), yang hanya membungkusc
dengan fungsi anonim.sumber
Brachylog , 13 byte
Peringatan: ini sangat tidak efisien, dan Anda akan mengerti mengapa dalam penjelasannya.
Ini mengharapkan daftar (misalnya
[1:1:2:2:2]
) sebagai input. Elemen-elemen di dalam daftar dapat berupa apa saja.Penjelasan
Ini bekerja hanya karena cara
s - Subset
menyatukan: set terkecil ada di akhir. Oleh karena itu, hal pertama yang ditemukan yang menyatukan dengan Input adalah proses terpanjang, misalnya[[1:1]:[2:2:2]]
dan bukan misalnya[[1:1]:[2:2]:[2]]
.sumber
J , 13 byte
Karena J tidak mendukung array yang tidak rata, setiap proses elemen yang sama dilakukan dalam kotak. Input adalah array nilai dan output array array kotak.
Pemakaian
Penjelasan
sumber
Dyalog APL , 9 byte
⊢
argumen⊂⍨
dipartisi pada1
pada elemen pertama,
dan kemudian di2≠/
mana pasangan berikutnya berbeda⊢
dalam argumensumber
Python 2, 43 byte
Bekerja pada daftar boolean. Contoh:
Iterasi melalui daftar input, menyimpan elemen yang terakhir terlihat. Bilah pemisah dicetak sebelum setiap elemen yang berbeda dari sebelumnya, diperiksa sebagai bitwise xor
^
dari 0. Inisialisasip=-1
menghindari pemisah sebelum elemen pertama.sumber
groupby
ituCJam, 9 byte
Dua solusi:
Uji di sini.
Penjelasan
Atau
sumber
Haskell, 22 byte
Ada built-in. Bekerja pada semua jenis yang mendukung kesetaraan.
sumber
MATL,
87 byteDihapus 1 byte berkat @Suever
Bekerja dengan integer / float / karakter / boolean / titik unicorn / input imajiner lainnya.
Untuk boolean, inputnya adalah
T/F
, outputnya1/0
.Cobalah online!
Dikelompokkan dan Diulang
sumber
C #, 117 byte
ungolfed (tidak juga)
sumber
Pyth,
97 byteKredit ke @LeakyNun selama 2 byte!
Penjelasan:
Jawaban lama, 12 byte
Lupa tentang run length built-in, tapi saya pikir ini adalah pendekatan yang oke, jadi saya menyimpannya.
Penjelasan:
sumber
m
.Pyth ,
3635 byteTautan uji
Edit: penjelasan:
sumber
Retina ,
2422 byte2 byte, terima kasih kepada Martin Ender.
Jawaban 15 byte sudah ada, jadi ini hanyalah pendekatan lain yang membutuhkan lebih banyak byte.
Cobalah online!
Itu terbagi pada spasi yang nomor sebelumnya berbeda dari proses.
Ini adalah demonstrasi pencarian.
sumber
05AB1E, 13 byte
Dijelaskan
Harus bekerja untuk daftar apa pun.
Diuji pada int dan char.
Cobalah online
sumber
Swift, 43 byte
Menganggap saya sebagai array dari objek yang setara; bekerja untuk apa pun mulai dari int hingga string ke objek kustom. Agak kurang sopan karena outputnya mengandung banyak baris baru, tetapi menjadikannya lebih cantik akan dikenakan biaya byte.
Versi yang lebih cantik dan tidak diserang:
Versi ini mencetak setiap grup pada baris baru dengan mengorbankan lebih banyak kode.
Gagasan untuk Peningkatan
Versi ini memiliki 47 byte, tetapi ini pendekatan yang berbeda, jadi mungkin ada sesuatu untuk dioptimalkan di sana? Masalah terbesar adalah pernyataan pengembalian.
sumber
C,
8877 byteMemindahkan bagian
strmcmp
dalam yangprintf
menyimpan 11 bytePemakaian:
Input sampel:
(parameter baris perintah)
Output sampel:
Diuji pada:
Saya mencoba untuk memperbaiki kesalahan Segmetation 5.3.0.
Versi 88
sumber
Java 134 byte
beralih melalui, dan memutuskan apakah akan terpisah dengan garis baru atau spasi.
sumber
public
danstatic
kata kunci. Anda juga dapat menghapus kurung keriting untuk loopListSharp , 134 byte
ListSharp tidak mendukung fungsi sehingga array disimpan dalam file lokal bernama
l.txt
sumber
Ruby , 24 byte
Dalam Ruby
Array
contoh memiliki metode bawaangroup_by
Jadi solusinya adalah:
sumber
TSQL, 132 byte
Ini sedikit berbeda dari jawaban lain - sql tidak memiliki array, input yang jelas untuk sql adalah sebuah tabel.
Golf:
Tidak Disatukan:
Biola
sumber
Perl 5 - 39 Bytes
sumber
Pyke, 2 byte (tidak kompetitif)
Hanya mendukung bilangan bulat
Coba di sini!
Menambahkan node split_at, membagi input ketika argumen ke-2 benar
sumber
sed,
3323 + 1 = 24 bytePerlu
-r
opsi.Contoh penggunaan:
sumber
JavaScript (ES6), 56
Input: array angka atau string
Output: array array
Pertama kali menggunakan perbandingan yang tepat dalam kode golf
sumber
Clojure, 19 byte
Ini built-in, tetapi dibutuhkan fungsi pemetaan. Dalam hal ini,
+
berfungsi sebagai fungsi identitas.sumber
Javascript (menggunakan perpustakaan eksternal) (178 byte)
Penafian: Saya menggunakan perpustakaan yang saya tulis untuk mengimplementasikan LINQ dari C # ke JS. Itu tidak benar-benar membantu saya menang, tetapi oh well
sumber