Nombre de couleurs, triées par occurrence

14

Celui-ci est simple à décrire et je pouvais à peine croire que cela n'avait pas été joué auparavant:

Pour une image donnée (quel que soit le format pris en charge par votre langue), recherchez les couleurs uniques et affichez une liste des couleurs.

  • Imprimez le code couleur en RVB hexadécimal, c'est-à-dire un signe de hachage #suivi de 2 chiffres pour R, 2 chiffres pour G et 2 chiffres pour B. (#xxxxxx où x peut être 0-9, AF et / ou af).
  • Le code hexadécimal doit être suivi d'un espace et du nombre de pixels décimaux, puis d'une nouvelle ligne ( \nou\r\n ).
  • La liste doit être triée par nombre décroissant (couleur la plus fréquente en haut).
  • S'il y a une cravate (deux couleurs avec le même montant), la commande n'est pas importante.
  • L'image ne contiendra pas de transparence, donc aucune valeur alpha n'est importante. La valeur alpha peut ne pas faire partie de la sortie.
  • Une taille d'image de 4000x3000 doit être prise en charge (ce qui peut être important pour les définitions de type)

Exemple d'image "10 rouge 20 bleu 30 noir 40 blanc": Exemple d'image 1

Production attendue:

#FFFFFF 40
#000000 30
#0000FF 20
#FF0000 10

Exemple d'image "dégradé bleu": Exemple d'image 2

L'une des sorties attendues (puisque l'ordre des mêmes couleurs peut varier):

#718DFF 19
#5571FF 15
#3855FF 11
#8DAAFF 11
#1C38FF 7
#AAAAFF 7
#8D8DFF 6
#AAC6FF 6
#C6C6FF 5
#C6E2FF 4
#001CFF 3
#E2E2FF 3
#FFFFFF 3

Exemple d'image "testImage", aimablement fournie par @Luis Mendo :

Exemple d'image 3

Production attendue:

#FFFFFF 18042
#000000 1754
#FF3300 204

Similaire à cette question , mais la sortie est du texte, pas une image.

Thomas Weller
la source
count descendingest un peu flou. Comment le trions-nous?
Rɪᴋᴇʀ
@ EᴀsᴛᴇʀʟʏIʀᴋ: décroissant: couleur la plus fréquente en haut
Thomas Weller
D'accord, je dirais que cela doit être un peu plus clair. Peut-être dire quelque chose comme ça the most frequent colors at the top?
Rɪᴋᴇʀ
@ EᴀsᴛᴇʀʟʏIʀᴋ: Je suis d'accord, vient de mettre à jour la question pour les deux
Thomas Weller
1
Un couple de cas de test serait bien.
Martin Ender

Réponses:

4

Mathematica, 91 octets

StringRiffle@SortBy[Tally["#"<>IntegerString[#,16,2]&/@Join@@#~ImageData~"Byte"],-Last@#&]&

Utilise une méthode complètement différente de @ réponse de DavidC . Contrairement à celui-ci, cela peut prendre en charge des images de n'importe quelle taille et nombre de couleurs. Explication:

#~ImageData~"Byte"                   Take the RGB values of the image...
Join@@(...)                          Flatten to a list of colors...
"#"<>IntegerString[#,16,2]&/@(...)   Convert each color to #012def format...
Tally[(...)]                         Convert to a list of {color, multiplicity}
                                      pairs (this does most of the work)...
SortBy[(...),-Last@#&]               Order by the multiplicity descending...
StringRiffle@(...)                   And create a string with the desired format.
LegionMammal978
la source
Agréable. J'aime la façon dont "Byte" renvoie les données d'image.
DavidC
4

Bash + coreutils, 54

  • 7 octets économisés grâce à @manatwork
grep -oE '#\w+'|sort|uniq -c|sort -nr|awk '$0=$2" "$1'

Cela suppose l'entrée STDIN du format .txt d' Imagemagick .

Ideone.


Si le format d'entrée ci-dessus est trop extensible, nous pouvons ajouter la conversion Imagemagick à partir de n'importe quel format:

Bash + coreutils + Imagemagick, 71

convert $1 txt:-|grep -oE '#\w+'|sort|uniq -c|sort -nr|awk '$0=$2" "$1'

Ici, le nom de fichier de l'image d'entrée est transmis en tant que paramètre de ligne de commande.

Traumatisme numérique
la source
2
L'OFS par défaut d'AWK est un espace, vous pouvez échanger `" "` contre,
n0741337
1
Ou encore plus courte awkpartie: awk '$0=$2" "$1'.
manatwork
3

JavaScript (ES6), 359 355 octets

4 octets enregistrés grâce à @Neil

u=>{i=new Image;i.src=u;e=document.createElement`canvas`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}

Démo

f=u=>{i=new Image;i.crossOrigin='';i.src=u;e=document.createElement`canvas`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}
f('http://i.imgur.com/acPudA9.gif')
<input value="https://i.imgur.com/acPudA9.gif" onchange="console.log('-------');f(this.value)">

Autres cas de test que j'ai téléchargés sur imgur pour prendre en charge CORS:

Les données de couleur spécifiques sur ces deux semblent avoir légèrement changé lors du téléchargement pour une raison quelconque, mais elles affichent toujours le même nombre d'occurrences pour ces deux cas de test.

Patrick Roberts
la source
Je pense |que la priorité est plus faible que <<si vous l'utilisez plutôt que +vous n'aurez pas besoin d'autant de ()s.
Neil
@ user2428118 la prochaine fois, j'apprécierais que vous laissiez des inquiétudes dans un commentaire et me demandiez de modifier ma propre réponse plutôt que de la modifier vous-même. Vous avez en fait interrompu ma démonstration en supprimant <!-- language: lang-js -->de l'extrait de code, désactivant efficacement le JavaScript.
Patrick Roberts
@Patrick Désolé, je serai plus prudent la prochaine fois. De plus, je viens de trouver un moyen d'économiser quelques octets:u=>{document.write`<img src=${u} id=i><canvas id=e>`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}
user2428118
2

Pyth , 29 octets

jmj;_d_SrSm+\#.[\06.Hid256'Q8

Essayez-le en ligne!

(L'interprète en ligne ne peut pas lire l'image, j'ai donc retiré cette partie et entré le résultat de la lecture de cette image, qui est une liste de triplets de couleurs. La partie responsable de la lecture de l'image est 'un seul deux-points.)

Preuve de fonctionnalité d' 'un seul colon

Leaky Nun
la source
Vous avez besoin d'un savant 'Q, car une image est représentée comme une liste de listes de triplets.
Jakube
Voici une solution correcte (et plus courte)V_SrS%L+\#*3"%02X"s'z8jd_N
Jakube
2

Mathematica 103 92 octets

{"#"<>IntegerString[255Round[List@@#],16,2],#2}&@@@DominantColors[#,9999,{"Color","Count"}]&

Exemple

pic


Explication

DominantColorsrenvoie normalement une liste de couleurs et de décomptes représentant les principaux clusters dans une image. Lorsque le nombre de couleurs demandées dépasse le nombre de couleurs dans l'image, les couleurs de pixels exactes sont renvoyées. (Je suppose que moins de 10 000 couleurs seront dans l'image d'entrée.)

image


{"#"<>IntegerString[255Round[List@@#],16,2],#2} convertit les valeurs de couleur de base 10 en valeurs hexadécimales.


Remarque: il n'y a que 5 couleurs dans l'image de mandrill. (J'avais l'habitude ColorQuantize[<image>,5]de réduire le nombre de couleurs dans l'image de mandrill standard.)

DavidC
la source
Je viens de vous
surfer
Par un peu. Mais votre approche prend un nombre illimité de couleurs.
DavidC
1

PowerShell v2 +, 187 octets

$a=New-Object System.Drawing.Bitmap $args[0]
$b=@{}
0..($a.Height-1)|%{$h=$_;0..($a.Width-1)|%{$b["#"+-join($a.GetPixel($_,$h).Name[2..7])]++}}
$b.GetEnumerator()|Sort value -des|FT -h -a

Réutilise presque tout le code de ma réponse sur Obtenir la couleur la plus dominante . Veuillez donc faire référence à cela pour une explication complète.

Les changements ici sont en indexation $bdans la troisième ligne pour répondre aux besoins explicites de format de sortie, et dans la dernière ligne que nous sortpar valueen -desordre cending, puis conduit à Format-Tabledes -HideTableHeaders et -AutoSize comme paramètres. Il est très rare de l'utiliser FTici sur PPCG, car la sortie est implicite à la fin de l'exécution, mais ici, il est très utile de s'assurer que nous n'obtenons que la sortie correcte des pièces.

Exemples

La première est l'image de test "rouge" du défi Dominant Color, la seconde est le "témoignage" de ce défi.

PS C:\Tools\Scripts\golfing> .\color-count.ps1 C:\Tools\Scripts\golfing\img\red.png

#ff0000 139876
#dcd9cf 3056  
#f2f1ed 1512  
#ffffff 1508  
#ffe6e6 1488  
#ffe3e3 8     
#eae8e2 4     
#fffbfb 4     


PS C:\Tools\Scripts\golfing> .\color-count.ps1 C:\Tools\Scripts\golfing\img\z07VA.gif

#ffffff 18042
#000000 1754 
#ff3300 204  
AdmBorkBork
la source
1

Tcl / Tk , 134 octets

console s
lmap s [concat {*}[[image c photo -fi $argv] d]] {dict inc D $s}
dict fo k\ v [lsort -int -s 2 -inde 1 -de $D] {puts $k\ $v}

dest pour data.

Tcl / Tk , 232 octets

console s
set I [image c photo -fi $argv]
set i 0
time {set j 0
time {dict inc D #[join [lmap s [$I g $i $j] {format %02X $s}] ""]
incr j} [image h $I]
incr i} [image w $I]
dict fo k\ v [lsort -int -s 2 -inde 1 -de $D] {puts $k\ $v}

wish sort_pix.tcl QTE4O.png

entrez la description de l'image ici


wish sort_pix.tcl 5s1Ob.png

entrez la description de l'image ici


wish sort_pix.tcl z07VA.gif

entrez la description de l'image ici

sergiol
la source
1

Brain-Flak , 1110 octets

{{}({}[(()()()()()){}])}{}(<>)<>([]){{}({}()<({}()<({}()<>)>)>)<>([])}{}<>{({}<({}<({}<(()()<>)>)>)>)<>{(<>)<>(()()()){({}[()]<<>({}<([([(({})<>[({})]<>)])]<>)<>{({}()<([{}])<>({}<>)<>>)<>}{}<>{}<>>{})({}<({}<({}<>)<>({}<>)<>({}<>)<>>)<>({}<>)<>({}<>)<>({}<>)>)<>({}<({}<>)<>({}<>)<>>)<>({}<>)<>({}<>)>)}{}<>((){[()](<{}>)}{})((){[()](<{}({}())<>{}{}{}>)}{}){{}(<<>(()()()){({}[()]<({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>>)}{}>)}{}<>({}<({}<>)<>({}<>)<>({}<>)<>>)<>({}<>)<>({}<>)<>({}<>)<>}({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}(()()()()){((({}[()])<{({}[()]<({}<({}<>)<>>)>)}{}>)<{({}[()]<<>({}<>)>)}{}>)}{}<>}{}<>(()()()())([][()])({}(<>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><{}{}>){({}[()]<(<(()()()())([][()])({}(<>))><>([()]{()<(({})){({}[()])<>}{}>}{}<><{}{}>)<{({}[()]<([([({}<({}<({}<({}<(({})<>)<>>)>)>)>)<><({}<>)>]{}<(())>)](<>)){({}())<>}{}({}<><{}{}>){{}<>(<({}<({}<({}<({}<({}<({}<({}<({}<>)>)>)>)<>>)>)>)>)<>({}<({}<({}<({}<<>>)>)>)>)>)}{}({}<({}<({}<({}<>)>)>)>)<>>)}{}<>{}{}{}{}>[()]){({}[()]<({}<({}<({}<({}<>)>)>)>)<>>)}{}<>>)}{}{({}[()]<>)<>}<>

Essayez-le en ligne!

C'était une aventure. Il s'avère que Brain-Flak n'est pas très bon en traitement d'image. Qui savait?

Je commencerai par noter que cela ne correspond pas techniquement au format de sortie strict demandé. Si vous voulez que cela soit appliqué, faites le moi savoir et j'essaierai d'ajouter du code de traduction. Pour l'instant, il affiche des nombres décimaux: chaque 4 chiffres représente une couleur dans l'ordre RED GREEN BLUE COUNT.

Ensuite, entrez. Les formats d'entrée autorisés étaient plus flexibles, j'ai donc utilisé le format le plus facile à analyser par Brain-Flak (que j'ai pu trouver): Netpbm P6. Malheureusement, Brain-Flak n'a pas pu analyser les nombres décimaux du format P3 car toutes les images Netpbm commencent par le caractère Pet Brain-Flak ne peut pas gérer l'entrée décimale à partir de fichiers contenant des caractères non numériques. P6 a donc été utilisé à la place, car P6 stocke les informations de couleur sous forme d'octets, qui sont traités comme des nombres en mode d'entrée ASCII. Il restait un défi car les informations d'en-tête étaient pas codées de manière utile, mais heureusement, je n'avais pas besoin de ces informations, elles sont donc simplement supprimées. Ce programme n'adhère pas entièrement à la norme Netpbm car il n'autorise pas les sauts de ligne dans l'en-tête, mais les sauts de ligne ne sont pasrequis par la norme pour que les entrées soient des fichiers Netpbm valides.

Dernière mise en garde, la version sur TIO n'est en fait pas correctement configurée pour un fonctionnement "officiel" car (à ma connaissance) je ne peux pas fournir de fichiers en entrée sur TIO, ni fournir des octets correspondant à ASCII non imprimable dans l'entrée directe. Pour un fonctionnement officiel, l' -aindicateur est nécessaire pour prendre l'entrée en octets bruts et -fpour prendre l'entrée d'un fichier. L'exemple d'entrée sur le lien TIO a plutôt été traduit manuellement à partir de l'exemple sur la page wiki Netpbm .

De plus, je voudrais remercier le wiki Brain-Flak d'avoir fourni des extraits de code utiles à partir desquels travailler. En particulier, l'implémentation Bubble-Sort ici a joué un rôle déterminant dans la dernière étape une fois que j'ai obtenu un compte pour chaque couleur, car je ne savais pas vraiment par où commencer autrement. Il a fallu de lourdes modifications, mais je suis content de ne pas avoir à repartir de zéro.

Voici la version non golfée et commentée du code. Brain-Flak est un peu trop bavard pour inclure une explication formatée dans cet article, mais la version non golfée sur TIO contient tout ce que j'inclurais en un avec un meilleur formatage que je ne pourrais gérer ici, donc si vous êtes intéressé, veuillez prendre un Regardez.

Il y a peut-être encore du golf à faire, ma réponse précédente de Brain-Flak a subi de nombreuses révisions, mais j'espère que les leçons apprises là-bas ont donné un meilleur point de départ.

Kamil Drakari
la source
0

Python 2, 186 octets

import Image
I=Image.open(input()).convert('RGB')
w,h=I.size
r=['#'+('%0.2X'*3)%I.getpixel((i%w,i/h))for i in range(w*h)]
for a,b in sorted(set((r.count(v),v)for v in r))[::-1]:print b,a

Essayez-le en ligne!

Avis de non-responsabilité: les résultats présentés sont des lignes simples pour la lisibilité. Les sorties de code résultent avec un espace et une séparation de ligne comme demandé par le défi.

Sortie pour 10 rouge 20 bleu 30 noir 40 blanc:

[('#FFFFFF', 40), ('#000000', 30), ('#0000FF', 20), ('#FF0000', 10)]

Sortie pour dégradé bleu:

[('#718DFF', 19), ('#5571FF', 15), ('#8DAAFF', 11), ('#3855FF', 11), ('#AAAAFF', 7), ('#1C38FF', 7), ('#AAC6FF', 6), ('#8D8DFF', 6), ('#C6C6FF', 5), ('#C6E2FF', 4), ('#FFFFFF', 3), ('#E2E2FF', 3), ('#001CFF', 3)]

Sortie pour l'image de test

[('#FFFFFF', 18042), ('#000000', 1754), ('#FF3300', 204)]

Explication:

w,h=I.size # field size stores tuple of values of width and height of image

I.getpixel((i%w,i/h)) # returns tuple of base10 RGB values

('%0.2X'*3) # format string to convert int into hex

set((r.count(v),v)for v in r) # generate set of unique pairs count-color 

sorted(set(...))[::-1] # apply sorted(), as it sorts set of tuples by firts elements and reverse sort

print b,a  # swap values in tuples and print
Possum mort
la source
0

Java (1.4+) , 483 428 octets

import java.util.*;class I {public static void main(String[] a) throws Exception {java.awt.image.BufferedImage i = javax.imageio.ImageIO.read(new java.io.File(a[0]));Map m=new HashMap();String s;for(Integer x=0,y=0,c;y<i.getHeight();y++)for(x=0;x<i.getWidth();m.put(s=x.toHexString(((c=i.getRGB(x++,y))&0xff0000)>>16)+x.toHexString((c & 0xff00)>>8)+x.toHexString(c&0xff),m.get(s)==null?1:(int)m.get(s)+1));System.out.print(m);}}

Essayez-le en ligne!(Ne fonctionne pas en ligne)


Non golfé:

import java.util.*;

class I {
    public static void main(String[] a) throws Exception {
        java.awt.image.BufferedImage i = javax.imageio.ImageIO
                .read(new java.io.File(a[0]));
        Map m = new HashMap();
        String s;
        for (Integer x = 0, y = 0, c; y < i.getHeight(); y++)
            for (x = 0; x < i.getWidth(); m
                    .put(s = x.toHexString(((c = i.getRGB(x++, y)) & 0xff0000) >> 16)
                            + x.toHexString((c & 0xff00) >> 8)
                            + x.toHexString(c & 0xff), m.get(s) == null ? 1
                            : (int) m.get(s) + 1))
                ;
        System.out.print(m);
    }
}

Les toString()sorties de carte comme ceci:

{7c7c7c=6, 1d57a5=20468, 121212=7, d3d3d3=3, bdbdbd=9, 949494=2, 333=14, 626262=3, cacaca=2, 141414=5, fff=11, c9c9c9=1, e8e8e8=1, 919191=4, 161616=5, c2c2c2=1, 646464=7, 979797=12, fafafa=2, 808080=1, 7b7b7b=1, 484848=4, b9b9b9=2, f1f1f1=2, 6b6b6b=6, 363636=15, 262626=4, d8d8d8=2, 868686=4, 757575=1, 575757=3, a7a7a7=2, cecece=2, dcdcdc=2, c3c3c3=2, 1d1d1d=5, 727272=9, 656565=2, 3a3a3a=3, 7d7d7d=10, 393939=5, 797979=3, 222=31, 8f8f8f=2, 454545=4, 181818=9, 2e2e2e=2, 222222=1, 1c1c1c=19, b8b8b8=2, e1e1e1=5, 232323=5, 8a8a8a=3, 959595=7, 6a6a6a=9, 434343=7, 5c5c5c=3, 111=20, 909090=3, 424242=4, 212121=1, 1a1a1a=6, 202020=7, efefef=1, 565656=5, 6e6e6e=7, 767676=3, 323232=2, eee=5, 444=18, 2c62ab=1, 717171=2, b1b1b1=3, 6c6c6c=3, 545454=7, 515151=17, 2f2f2f=2, 4a4a4a=3, 888888=6, 6d6d6d=3, 898989=3, a3a3a3=5, 7e7e7e=9, ddd=9, b6b6b6=3, 2b2b2b=5, 313131=5, 8d8d8d=1, a2a2a2=2, 696969=3, a5a5a5=3, 4f4f4f=5, 828282=7, 191919=5, 606060=4, 6f6f6f=4, 8b8b8b=3, ebebeb=2, 555=19, 929292=3, 131313=11, 999999=5, d2d2d2=2, 444444=9, 474747=4, dddddd=1, 585858=8, 5a5a5a=3, 000=9887, afafaf=2, dfdfdf=3, 747474=3, 666666=4, a1a1a1=4, 2a2a2a=11, 4d4d4d=6, 818181=2, 878787=5, 215aa6=1, d9d9d9=4, b5b5b5=3, b4b4b4=3, 737373=4, aeaeae=3, bbb=15, 242424=4, 2d2d2d=8, 888=19, c1c1c1=1, 494949=9, dbdbdb=5, ccc=19, 5d5d5d=3, 5f5f5f=1, 414141=6, c8c8c8=3, aaa=16, 1e1e1e=3, 707070=2, 9e9e9e=2, 373737=7, 9d9d9d=2, 1b1b1b=4, 303030=7, 535353=10, 595959=2, 8e8e8e=3, 383838=5, 939393=18, 616161=2, 686868=6, dadada=1, e3e3e3=2, 5b5b5b=3, a4a4a4=5, 8c8c8c=5, a6a6a6=11, 292929=6, 4c4c4c=3, 151515=6, fefefe=2, 787878=2, 505050=2, e2e2e2=1, 1f1f1f=9, adadad=2, ababab=1, 5e5e5e=6, 252525=4, 4e4e4e=3, 282828=7, a8a8a8=4, 9c9c9c=3, aaaaaa=1, 101010=5, b7b7b7=2, 969696=6, 7f7f7f=4, 555555=2, a9a9a9=5, 343434=8, 999=17, 777777=3, ffffff=76669, f0f0f0=4, bbbbbb=1, 1e58a5=1, b3b3b3=4, 777=20, 636363=2, d4d4d4=1, 2c2c2c=5, 848484=1, 3c3c3c=3, bfbfbf=2, 3e3e3e=9, 333333=4, 7a7a7a=3, 858585=4, 4b4b4b=3, 272727=7, 111111=6, 666=13, 9b9b9b=1, bcbcbc=4, cfcfcf=2, 9a9a9a=1, 404040=21, 525252=3, 989898=4, 171717=5, 3b3b3b=2, c4c4c4=1, 3f3f3f=7, 464646=1, cdcdcd=2, b2b2b2=33, c5c5c5=2, bababa=2}

S'il vous plaît ne postez pas de suggestions de golfs spécifiques à 1.8, à moins que cela ne fonctionne dans Java plus ancien, je n'en veux pas.

Exemple: Lambdas ne fonctionne pas dans plus de versions de Java qu'elles n'en fonctionnent.

Urne de poulpe magique
la source
" S'il vous plaît, ne postez pas de suggestions spécifiques de golfs 1.8, à moins que cela ne fonctionne dans Java plus ancien, moi je n'en veux pas. " Par curiosité: pourquoi Java 4 alors que Java 10 est déjà disponible?
Kevin Cruijssen
Quelques golfs qui devraient fonctionner en Java 4 (je pense): import java.util.*;class M{public static void main(String[]a)throws Exception{java.awt.image.BufferedImage i=javax.imageio.ImageIO.read(new java.io.File(a[0]));Map m=new HashMap();String s;for(Integer x=0,y=0,c;y<i.getHeight();y++)for(x=0;x<i.getWidth();m.put(s=x.toHexString((c&0xff0000)>>16)+x.toHexString((c&0xff00)>>8)+x.toHexString(c&0xff),m.get(s)==null?1:(int)m.get(s)+1))c=i.getRGB(x++,y);System.out.print(m);}}( 419 octets )
Kevin Cruijssen
@KevinCruijssen Parce que 1.8 était, sans doute, la plus grande version en termes de code qui ne fonctionnera pas avec les versions précédentes. La plupart des autres versions étaient des correctifs et des ajouts de classes au JRE. 1.8 était le moins compatible avec les JRE précédents.
Urne de poulpe magique
@KevinCruijssen x.toHexIntegerétait plus intelligent qu'une importation statique.
Urne de poulpe magique
Pas non plus Java 3, parce que Java 3 ... vraiment ... a si peu de raccourcis ...
Magic Octopus Urn
0

SmileBASIC, 165 octets

DEF C A
L=LEN(A)DIM C[L],N[L]FOR J=0TO L-1FOR I=0TO U-1ON A[J]-C[I]GOTO@L
NEXT
U=U+1@L
C[I]=A[J]INC N[I]NEXT
RSORT.,U,N,C
FOR I=0TO U-1?"#";HEX$(C[I],6),N[I]NEXT
END

L'image est donnée sous la forme d'un tableau de valeurs de couleur ARGB 32 bits (la valeur alpha est coupée lorsque le nombre est converti en une chaîne hexadécimale à 6 chiffres)

12Me21
la source