R , 84 77 byte

2

R , 84 77 byte

-7 byte berkat mb7744

unique(lapply(x<-sort(table(scan()),T),function(y)as.double(names(x[x==y]))))

Baca dari stdin; mengembalikan daftar dengan subvektor bilangan bulat dalam urutan yang meningkat. Jika kita bisa mengembalikan string alih-alih int, maka saya bisa menjatuhkan 11 byte (menghapus panggilan ke as.double), tapi hanya itu. tableFungsi R melakukan pengangkatan berat di sini, menghitung kemunculan setiap anggota dari inputnya; lalu menggabungkannya dengan hitungan ( names). Tentu saja, itu sebuah string, jadi kita harus memaksanya ke integer / double.

Cobalah online!

Giuseppe
sumber
Anda dapat kehilangan 7 byte dengan menghilangkan "yang", dan menggunakan pengindeksan logis
mb7744
@ mb7744 oh ya
Giuseppe
1
Saya mengambil bacokan lain dengan R. Sangat disayangkan berapa lama sintaks lambda, jadi saya mencoba menghindarinya. Sebagai gantinya saya harus menggunakan nested lapply, tetapi setidaknya dalam kasus itu saya dapat menetapkan variabel pendek lapply. Sepertinya saya tidak dapat menetapkan variabel ke fungsi function...
mb7744

Jawaban:

2

JavaScript (ES6), 100 98 96 93 byte

Disimpan 2 byte berkat @Neil (ditambah lagi ia memperbaiki bug kasus tepi dalam kode saya). Disimpan 3 byte lebih banyak berkat @TomasLangkaas.

a=>a.sort().map((_,n)=>a.filter((v,i)=>i-a.indexOf(v)==n&v!=a[i+1])).filter(a=>a+a).reverse()

Uji kasus

f=
a=>a.sort().map((_,n)=>a.filter((v,i)=>i-a.indexOf(v)==n&v!=a[i+1])).filter(a=>a+a).reverse()

console.log(JSON.stringify(f([1,2,3])))
console.log(JSON.stringify(f([1,1,1,2,2,3,3,4,5,6])))
console.log(JSON.stringify(f([1,1,1,4,5,6,6,6,7,7,8,8,8,8,8,8,8,9,5,6,5,6,5,6,5,6,-56])))
console.log(JSON.stringify(f([])))

Rick Hitchcock
sumber
Pengujian cacat (tidak bekerja untuk nol) tapi saya pikir Anda masih bisa menyimpan byte dengan menyaring dan membalikkan bukan unshifting: a=>a.sort().map((_,n)=>a.filter((v,i)=>i-a.indexOf(v)==n&v!=a[i+1])).filter(a=>1/a[0]).reverse().
Neil
Ahh, aku seharusnya tahu untuk menguji 0! Kode Anda memperbaikinya, ditambah lebih pendek, jadi terima kasih untuk itu
:)
Hemat 3 byte lebih banyak dengan mengubah .filter(a=>1/a[0])ke .filter(a=>''+a).
Tomas Langkaas
Bagus, @TomasLangkaas, terima kasih. (Menghemat 2 byte.)
Rick Hitchcock
Buruk saya (mengalami kesulitan dalam menghitung), tetapi .filter(a=>a+a)akan memberikan byte ekstra.
Tomas Langkaas
1

V , 60 , 54 byte

Úòͨ¼¾©î±/± ±òHòø 
pkJjòú!
Ǩ^ƒ ©î±/o
Îf ld|;D
òV{Jk

Cobalah online!

Hexdump:

00000000: daf2 cda8 bc81 bea9 eeb1 2fb1 20b1 f248  ........../. ..H
00000010: f2f8 200a 706b 4a6a f2fa 210a c7a8 5e83  .. .pkJj..!...^.
00000020: 20a9 81ee b12f 6f0a ce66 206c 647c 3b44   ..../o..f ld|;D
00000030: 0af2 567b 4a6b                           ..V{Jk

Seperti saya suka V, saya cukup yakin ini adalah bahasa yang paling buruk untuk tugas ini. Terutama mengingat tidak memiliki dukungan untuk daftar, dan pada dasarnya tidak ada dukungan untuk angka. Hanya manipulasi string.

DJMcMayhem
sumber
1

C #, 119 byte

Cukup menusuknya:

using System.Linq;
a=>a.GroupBy(x=>x)
    .GroupBy(x=>x.Count(),x=>x.Key)
    .OrderBy(x=>-x.Key)
    .Select(x=>x.ToArray())
    .ToArray()
Makanan Tangan
sumber
2
+1 Anda dapat menghapus System.Func<int[],int[][]>F=dan mengekarnya ;. Itu bukan bagian dari byte-count untuk lambda semacam ini.
Kevin Cruijssen
@KevinCruijssen, saya tidak tahu. Terima kasih!
Hand-E-Food
1

R , 66 byte

(l=lapply)(l(split(x<-table(scan()),factor(-x)),names),as.integer)

Cobalah online!

Jika dalam output bilangan bulat mungkin dalam format string, dapat turun menjadi 48 byte (seperti yang disebutkan dalam jawaban @ Giuseppe).


Tidak Disatukan:

input <- scan(); # read input
x <- table(input); # count how many times each integer appears, in a named vector
y <- split(x, factor(-x)) # split the count into lists in increasing order
z <- lapply(y, names) # access the the original values which are still
                      # attached via the names
lapply(z, as.integer) # convert the names back to integers
mb7744
sumber
as.doublelebih pendek satu byte, dan seharusnya bekerja sama denganas.integer
Giuseppe
Yah, itu tergantung apakah Anda ingin mengembalikan integer atau double. Jika dobel oke, mungkin karakter juga, dan kami berdua bisa menghemat beberapa byte.
mb7744
1

PowerShell, 77, 70 byte

($a=$args)|group{($a-eq$_).count}|sort n* -Des|%{,($_.group|sort -u)}

NB: Untuk melihat bahwa hasil ini dikelompokkan dengan benar (karena secara visual tidak ada deliniasi antara konten setiap array), Anda mungkin ingin menambahkan | write-hostke akhir baris di atas.

Ucapan Terima Kasih

Terimakasih untuk:

  • TessellatingHeckler untuk menghemat 7 byte dengan melakukan refactoring / penulisan ulang secara besar-besaran dengan cara yang lebih pegolf.

Sebelumnya

77 byte

param($x)$x|group|sort count -desc|group count|%{,($_.group|%{$_.group[0]})}
JohnLBevan
sumber
Terima kasih banyak. Saya harus menyertakan ,()untuk pengelompokan (karena output hanya ditampilkan sebagai satu array kontinu). Ini jauh lebih golf daripada upaya awal saya; kerja luar biasa!
JohnLBevan
0

Groovy, 71 byte

{a->a.groupBy{a.count(it)}.sort{-it.key}.values().collect{it.unique()}}

Saya sebenarnya baru belajar tentang groupBy setelah membuat ini. Saya tidak tahu mengoleksi bukan satu-satunya pilihan saya.


{
    a->                 // [1,2,1,2,3,3,3,6,5,4]
    a.groupBy{      
        a.count(it)     // [2:[1,2,1,2],3:[3,3,3],1:[6,5,4]]
    }.sort{             
        -it.key         // [3:[3,3,3],2:[1,2,1,2],1:[6,5,4]]
    }.values().collect{ // [[3,3,3],[1,2,1,2],[6,5,4]]
        it.unique()
    }                   // [[3],[1,2],[6,5,4]]
}
Guci Gurita Ajaib
sumber
0

Ruby , 62 byte

->a{a.group_by{|e|a.count(e)}.sort_by{|x,_|-x}.map{|_,i|i|[]}}

Cobalah online!

Harus ada cara yang lebih singkat untuk melakukan ini.

canhascodez
sumber