R , 84 77 bytes

2

R , 84 77 bytes

-7 bytes graças a mb7744

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

Lê de stdin; retorna uma lista com subvetores de números inteiros em ordem crescente. Se pudéssemos retornar strings em vez de ints, eu poderia eliminar 11 bytes (removendo a chamada para as.double), mas é isso. A tablefunção de R faz o trabalho pesado aqui, contando as ocorrências de cada membro de sua entrada; depois os agrega por count ( names). Claro, isso é uma string, então temos que coagi-la a um número inteiro / duplo.

Experimente online!

Giuseppe
fonte
Você pode perder 7 bytes, eliminando o "qual" e usando a indexação lógica
mb7744
@ mb7744 oh duh.
21417 Giuseppe #:
1
Fiz outra tentativa com R. É lamentável quanto tempo a sintaxe lambda é, então resolvi evitá-la. Em troca, tive que usar aninhados lapply, mas pelo menos nesse caso, posso atribuir uma variável curta a lapply. Eu não consigo atribuir uma variável para a função function...
mb7744

Respostas:

2

JavaScript (ES6), 100 98 96 93 bytes

Economizei 2 bytes graças a @Neil (além disso, ele corrigiu um erro de borda no meu código). Economizou mais 3 bytes graças a @TomasLangkaas.

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

Casos de teste

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
fonte
Seu teste é falho (não funciona para zero), mas eu acho que você ainda pode salvar bytes, filtrando e reverter em vez de 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, eu deveria saber testar 0! Seu código o corrige, além de ser mais curto, então obrigado por isso
:)
Salve mais 3 bytes alterando .filter(a=>1/a[0])para .filter(a=>''+a).
Tomas Langkaas
Bom, @TomasLangkaas, obrigado. (Salva 2 bytes.)
Rick Hitchcock
Meu mau (tenho problemas com a contagem), mas .filter(a=>a+a)forneceria o byte extra.
Tomas Langkaas
1

V , 60 , 54 bytes

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

Experimente 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

Por mais que eu goste de V, tenho certeza de que esse é o pior idioma possível para a tarefa. Especialmente considerando que ele não tem suporte para listas e basicamente não suporta números. Apenas manipulação de cordas.

DJMcMayhem
fonte
1

C #, 119 bytes

Apenas uma rápida facada:

using System.Linq;
a=>a.GroupBy(x=>x)
    .GroupBy(x=>x.Count(),x=>x.Key)
    .OrderBy(x=>-x.Key)
    .Select(x=>x.ToArray())
    .ToArray()
Mão-E-Comida
fonte
2
+1 Você pode remover o System.Func<int[],int[][]>F=e à direita ;. Isso não faz parte da contagem de bytes para esses tipos de lambdas.
Kevin Cruijssen
@KevinCruijssen, eu não fazia ideia. Obrigado!
Hand-E-Food
1

R , 66 bytes

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

Experimente online!

Se na saída os números inteiros podem estar no formato de string, pode cair para 48 bytes (como mencionado na resposta de @ Giuseppe).


Ungolfed:

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
fonte
as.doubleé mais curto em um byte e deve funcionar da mesma forma queas.integer
Giuseppe
Bem, depende se você deseja retornar um número inteiro ou um dobro. Se double estiver correto, talvez o caractere também esteja, e nós dois poderíamos salvar alguns bytes.
mb7744
1

PowerShell, 77, 70 bytes

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

NB: Para verificar se esses resultados estão agrupados corretamente (como visualmente não há delineamento entre o conteúdo de cada matriz), convém anexar | write-hostao final da linha acima.

Agradecimentos

Graças a:

  • TessellatingHeckler por economizar 7 bytes ao refatorar / reescrever massivamente para uma abordagem bem mais eficiente.

Anterior

77 bytes

param($x)$x|group|sort count -desc|group count|%{,($_.group|%{$_.group[0]})}
JohnLBevan
fonte
Bom obrigado. Eu tive que incluir o ,()agrupamento for (uma vez que a saída estava apenas aparecendo como uma matriz contínua). Isso é muito mais golfe do que minha tentativa original; otimo trabalho!
JohnLBevan
0

Groovy, 71 bytes

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

Na verdade, eu só aprendi sobre o groupBy depois de criar isso. Eu não sabia que colecionar não era minha única escolha.


{
    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]]
}
Urna de polvo mágico
fonte
0

Ruby , 62 bytes

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

Experimente online!

Tem que haver uma maneira mais curta de fazer isso.

canhascodez
fonte