R , 84 77 octets

2

R , 84 77 octets

-7 octets grâce à mb7744

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

Lit à partir de stdin; renvoie une liste avec des sous-vecteurs d'entiers dans l'ordre croissant. Si nous pouvions renvoyer des chaînes au lieu d'entiers, je pourrais supprimer 11 octets (supprimer l'appel à as.double), mais c'est à peu près tout. La tablefonction de R fait le gros du travail ici, en comptant les occurrences de chaque membre de son entrée; puis il les agrège par count ( names). Bien sûr, c'est une chaîne, nous devons donc la contraindre à un entier / double.

Essayez-le en ligne!

Giuseppe
la source
Vous pouvez perdre 7 octets en éliminant le "qui" et en utilisant l'indexation logique
mb7744
@ mb7744 oh duh.
Giuseppe
1
J'ai essayé de nouveau avec R. Il est malheureux de savoir combien de temps la syntaxe lambda est, alors j'ai décidé d'essayer de l'éviter. En échange, j'ai dû utiliser des imbriqués lapply, mais au moins dans ce cas, je peux assigner une variable courte à lapply. Je n'arrive pas à assigner une variable à la fonction function...
mb7744

Réponses:

2

JavaScript (ES6), 100 98 96 93 octets

Enregistré 2 octets grâce à @Neil (en plus, il a corrigé un bug de bord-cas dans mon code). Sauvegardé 3 octets supplémentaires grâce à @TomasLangkaas.

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

Cas de test

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
la source
Votre test est défectueux (ne fonctionne pas pour zéro) mais je pense que vous pouvez encore économiser des octets en filtrant et en inversant au lieu 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, j'aurais dû savoir tester pour 0! Votre code le corrige, plus il est plus court, alors merci pour cela
:)
Économisez 3 octets supplémentaires en passant .filter(a=>1/a[0])à .filter(a=>''+a).
Tomas Langkaas
Bien joué, @TomasLangkaas, merci. (Enregistre 2 octets.)
Rick Hitchcock
Mon mauvais (avoir du mal à compter), mais .filter(a=>a+a)fournirait l'octet supplémentaire.
Tomas Langkaas
1

V , 60 , 54 octets

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

Essayez-le en ligne!

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

Autant que j'aime V, je suis presque sûr que c'est le pire langage possible pour la tâche. Surtout si l'on considère qu'il n'a pas de support pour les listes, et fondamentalement pas de support pour les nombres. Manipulation de chaîne juste.

DJMcMayhem
la source
1

C #, 119 octets

Juste un coup d'œil rapide:

using System.Linq;
a=>a.GroupBy(x=>x)
    .GroupBy(x=>x.Count(),x=>x.Key)
    .OrderBy(x=>-x.Key)
    .Select(x=>x.ToArray())
    .ToArray()
Hand-E-Food
la source
2
+1 You can remove the System.Func<int[],int[][]>F= and trailing ; though. That isn't part of the byte-count for these kind of lambdas.
Kevin Cruijssen
@KevinCruijssen, I had no idea. Thanks!
Hand-E-Food
1

R, 66 bytes

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

Try it online!

If in the output the integers may be in string format, can drop to 48 bytes (as mentioned in @Giuseppe's answer).


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
la source
as.double is shorter by one byte, and it should work the same as as.integer
Giuseppe
Well, it depends whether you want to return an integer or a double. If double is okay, maybe character would be as well, and we could both save some bytes.
mb7744
1

PowerShell, 77, 70 bytes

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

NB: To see that these results are correctly grouped (since visually there's no deliniation between the contents of each array), you may wish to append | write-host to the end of the above line.

Acknowledgements

Thanks to:

  • TessellatingHeckler for saving 7 bytes by massively refactoring / rewriting to a way more golfed approach.

Previous

77 bytes

param($x)$x|group|sort count -desc|group count|%{,($_.group|%{$_.group[0]})}
JohnLBevan
la source
Bien, merci. J'ai dû inclure le ,()regroupement (car la sortie ne montrait que comme un tableau continu). C'est bien plus golfique que ma tentative originale; super travail!
JohnLBevan
0

Groovy, 71 octets

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

En fait, je viens d'apprendre sur groupBy après avoir créé cela. Je ne savais pas que collecter n'était pas mon seul choix.


{
    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]]
}
Urne de poulpe magique
la source
0

Rubis , 62 octets

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

Essayez-le en ligne!

Il doit y avoir un moyen plus court de le faire.

canhascodez
la source