Liczba kolorów posortowana według zdarzeń

14

Ten jest prosty do opisania i nie mogłem uwierzyć, że nie był wcześniej grany w golfa:

Dla danego obrazu (niezależnie od formatu obsługiwanego przez Twój język) znajdź unikalne kolory i wyświetl listę kolorów.

  • Wydrukuj kod koloru w postaci szesnastkowej RGB, czyli znaku krzyżyka, #po którym będą 2 cyfry dla R, 2 cyfry dla G i 2 cyfry dla B. ( #xxxxxxgdzie x może wynosić 0-9, AF i / lub af).
  • Po kodzie szesnastkowym następuje spacja i liczba pikseli dziesiętnych, a następnie nowa linia ( \nlub \r\n).
  • Lista powinna być posortowana według liczby malejącej (najczęstszy kolor u góry).
  • Jeśli jest remis (dwa kolory w tej samej ilości), kolejność nie jest ważna.
  • Obraz nie będzie zawierał przezroczystości, więc żadna wartość alfa nie jest ważna. Wartość alfa może nie być częścią wyniku.
  • Obraz musi mieć rozmiar 4000 x 3000 (może to mieć znaczenie dla definicji typów)

Przykładowy obraz „10red 20blue 30black 40white”: Przykładowy obraz 1

Oczekiwany wynik:

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

Przykładowy obraz „niebieski gradient”: Przykładowy obraz 2

Jedno z oczekiwanych wyników (ponieważ kolejność tych samych kolorów może się różnić):

#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

Przykładowy obraz „testImage”, udostępniony przez @Luis Mendo :

Przykładowy obraz 3

Oczekiwany wynik:

#FFFFFF 18042
#000000 1754
#FF3300 204

Podobne do tego pytania , ale wynikiem jest tekst, a nie obraz.

Thomas Weller
źródło
count descendingjest trochę niejasne. Jak to sortujemy?
Rɪᴋᴇʀ
@ EᴀsᴛᴇʀʟʏIʀᴋ: malejąco: najczęstszy kolor na górze
Thomas Weller
Okej, powiedziałbym, że to musi być trochę jaśniejsze. Może powiesz coś takiego the most frequent colors at the top?
Rɪᴋᴇʀ
@ EᴀsᴛᴇʀʟʏIʀᴋ: Zgadzam się, właśnie zaktualizowałem pytanie dla obu
Thomas Weller
1
Kilka przypadków testowych byłoby dobrym rozwiązaniem.
Martin Ender

Odpowiedzi:

4

Mathematica, 91 bajtów

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

Używa zupełnie innej metody niż odpowiedź @ DavidC . W przeciwieństwie do tego, może obsługiwać obrazy o dowolnej wielkości i liczbie kolorów. Wyjaśnienie:

#~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
źródło
Ładny. Podoba mi się, jak „Bajt” zwraca dane obrazu.
DavidC
4

Bash + coreutils, 54

  • 7 bajtów zapisanych dzięki @manatwork
grep -oE '#\w+'|sort|uniq -c|sort -nr|awk '$0=$2" "$1'

Zakłada to wejście STDIN formatu .txt Imagemagick .

Ideone.


Jeśli powyższy format wejściowy jest zbyt rozciągliwy, możemy dodać konwersję Imagemagick z dowolnego formatu:

Bash + coreutils + Imagemagick, 71

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

Tutaj nazwa pliku obrazu wejściowego jest przekazywana jako parametr wiersza polecenia.

Cyfrowa trauma
źródło
2
domyślnym OFS w awk jest spacja, można wymieniać „” na „,
n0741337,
1
Lub nawet krócej awkczęść: awk '$0=$2" "$1'.
manatwork
3

JavaScript (ES6), 359 355 bajtów

Zaoszczędź 4 bajty dzięki @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]))}}

Próbny

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)">

Inne przypadki testowe, które przesłałem do imgur w celu wsparcia CORS:

Wydaje się, że konkretne dane dotyczące kolorów tych dwóch uległy nieznacznej zmianie podczas przesyłania z jakiegoś powodu, ale nadal drukuje taką samą liczbę wystąpień dla tych dwóch przypadków testowych.

Patrick Roberts
źródło
Myślę, że |ma niższy priorytet niż <<wtedy, jeśli użyjesz go zamiast +, nie będziesz potrzebował tylu ()s.
Neil
@ user2428118 następnym razem byłbym wdzięczny za pozostawienie wątpliwości w komentarzu i poproszenie mnie o edycję własnej odpowiedzi zamiast edytowania jej samodzielnie. Naprawdę złamałeś moje demo, usuwając <!-- language: lang-js -->fragment kodu, skutecznie wyłączając JavaScript.
Patrick Roberts,
@Patrick Przepraszam, następnym razem będę bardziej ostrożny. Ponadto właśnie znalazłem sposób na zaoszczędzenie niektórych bajtów: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 bajtów

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

Wypróbuj online!

(Tłumacz online nie może odczytać obrazu, więc usunąłem tę część i wprowadziłem wynik odczytu tego obrazu, który jest listą trypletów kolorów. Część odpowiedzialna za odczytanie obrazu to 'pojedynczy dwukropek.)

Dowód działania 'pojedynczego jelita grubego

Leaky Nun
źródło
Potrzebujesz swcześniej 'Q, ponieważ obraz jest reprezentowany jako lista list trojaczków.
Jakube,
Oto poprawne (i krótsze) rozwiązanieV_SrS%L+\#*3"%02X"s'z8jd_N
Jakube
2

Mathematica 103 92 bajty

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

Przykład

fotka


Wyjaśnienie

DominantColorszwykle zwraca listę kolorów i zlicza reprezentujące główne skupienia na obrazie. Gdy liczba żądanych kolorów przekroczy liczbę kolorów na obrazie, zwracane są dokładne kolory pikseli. (Zakładam, że na obrazie wejściowym będzie mniej niż 10 000 kolorów).

obrazek


{"#"<>IntegerString[255Round[List@@#],16,2],#2} konwertuje podstawowe 10 wartości kolorów na wartości szesnastkowe.


Uwaga: na obrazie mandryl znajduje się tylko 5 kolorów. (Kiedyś ColorQuantize[<image>,5]zmniejszałem liczbę kolorów na standardowym obrazie mandrylowym.)

DavidC
źródło
Właśnie
przegrałem
Trochę. Ale twoje podejście przyjmuje nieograniczoną liczbę kolorów.
DavidC
1

PowerShell v2 +, 187 bajtów

$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

Ponownie wykorzystuje prawie cały kod z mojej odpowiedzi Uzyskaj najbardziej dominujący kolor . Proszę zapoznać się z tym, aby uzyskać pełne wyjaśnienie.

Tutejsze zmiany są w indeksowania $bw trzecim wierszu, aby dopasować bezpośrednimi wymagań formatu wyjściowego, aw ostatnim wierszu sortprzez valuew -desporządku cending, wtedy rury Format-Tablez -HideTableHeaders i-A utoSize jako parametry. Bardzo rzadko używa się go FTtutaj w PPCG, ponieważ dane wyjściowe są niejawne pod koniec wykonywania, ale tutaj bardzo przydatne jest upewnienie się, że otrzymujemy tylko prawidłowe dane wyjściowe części.

Przykłady

Pierwszy to „czerwony” obraz testowy z wyzwania Dominant Color, drugi to „testimage” z tego wyzwania.

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
źródło
1

Tcl / Tk , 134 bajty

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}

djest dla data.

Tcl / Tk , 232 bajty

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

wprowadź opis zdjęcia tutaj


wish sort_pix.tcl 5s1Ob.png

wprowadź opis zdjęcia tutaj


wish sort_pix.tcl z07VA.gif

wprowadź opis zdjęcia tutaj

sergiol
źródło
1

Brain-Flak , 1110 bajtów

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

Wypróbuj online!

To była przygoda. Okazuje się, że Brain-Flak nie jest bardzo dobry w przetwarzaniu obrazu. Kto wiedział?

Zacznę od zauważenia, że ​​technicznie nie spełnia on ściśle wymaganego formatu wyjściowego. Jeśli chcesz to wymuszone, daj mi znać, a ja postaram się dodać kod tłumaczenia. Na razie wyprowadza liczby dziesiętne: każda 4 liczba reprezentuje kolor w kolejności CZERWONY ZIELONY NIEBIESKI LICZ.

Następnie wprowadź. Dozwolone formaty wejściowe były bardziej elastyczne, więc użyłem formatu najłatwiejszego do przeanalizowania przez Brain-Flak (który mogłem znaleźć): Netpbm P6. Niestety, Brain-Flak nie mógł przeanalizować liczb dziesiętnych z formatu P3, ponieważ wszystkie obrazy Netpbm zaczynają się od znaku, Pa Brain-Flak nie może obsłużyć danych dziesiętnych z plików zawierających znaki nienumeryczne. Zamiast tego zastosowano P6, ponieważ P6 przechowuje informacje o kolorze jako bajty, które w trybie wprowadzania ASCII są traktowane jak liczby. Pozostało wyzwanie, ponieważ informacja o nagłówku nie zakodowane w sposób użyteczny, ale na szczęście nie potrzebowałem żadnej z tych informacji, więc zostały po prostu odrzucone. Ten program nie jest w pełni zgodny ze standardem Netpbm, ponieważ nie zezwala na nowe wiersze w nagłówku, ale nowe wiersze nie są była wymagana przez standard, więc dane wejściowe są poprawnymi plikami Netpbm.

Ostatnim zastrzeżeniem jest to, że wersja TIO nie jest właściwie skonfigurowana do działania „oficjalnego”, ponieważ (o ile mi wiadomo) nie mogę dostarczyć plików jako danych wejściowych w TIO, ani nie mogę podać bajtów odpowiadających niedrukowalnym ASCII na wejściu bezpośrednim. Do oficjalnej operacji -aflaga jest potrzebna do pobrania danych wejściowych jako surowych bajtów i -fdo pobrania danych z pliku. Przykładowe dane wejściowe linku TIO zostały zamiast tego ręcznie przetłumaczone z przykładu na stronie wiki Netpbm .

Dodatkowo chciałbym podziękować wiki Brain-Flak za udostępnienie pomocnych fragmentów kodu do pracy. W szczególności implementacja Bubble-Sort miała tutaj zasadnicze znaczenie dla ostatniego kroku, gdy tylko policzyłem każdy kolor, ponieważ tak naprawdę nie miałem pojęcia, od czego zacząć. Wymagało to ciężkich modyfikacji, ale cieszę się, że nie musiałem zaczynać od zera.

Oto niepoznakowana i skomentowana wersja kodu. Brain-Flak jest nieco zbyt gadatliwy, aby w tym poście umieścił przydatne sformatowane wyjaśnienie, ale wersja dla graczy bez Tolfa zawiera wszystko, co bym w nim zawierała z lepszym formatowaniem, niż mógłbym tutaj zarządzać, więc jeśli jesteś zainteresowany, weź Popatrz.

Być może czeka nas jeszcze gra w golfa, moja poprzednia odpowiedź Brain-Flak przeszła wiele poprawek, ale mam nadzieję, że zdobyte tam doświadczenia dały temu lepszy punkt wyjścia.

Kamil Drakari
źródło
0

Python 2, 186 bajtów

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

Wypróbuj online!

Oświadczenie: Prezentowane dane wyjściowe są jedno-liniowe dla czytelności. Wyniki kodu wynikają z separacją odstępów i linii zgodnie z żądaniem wyzwania.

Wyjście dla 10 czerwonych 20 niebieskich 30 czarnych 40 białych:

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

Ouput dla niebieskiego gradientu:

[('#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)]

Wyjście dla obrazu testowego

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

Wyjaśnienie:

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
Dead Possum
źródło
0

Java (1.4+) , 483 428 bajtów

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);}}

Wypróbuj online! (Nie działa online)


Nie golfowany:

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);
    }
}

Dane toString()wyjściowe mapy wyglądają następująco:

{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}

Nie publikuj propozycji specyficznych dla golfa 1.8, chyba że działa w starszej Javie, ja nie chcę.

Przykład: Lambda nie działają w większej liczbie wersji Javy niż w.

Urna Magicznej Ośmiornicy
źródło
Nie publikuj propozycji specyficznych dla golfa 1.8, chyba że działa w starszej Javie, ja nie chcę. ” Z ciekawości: dlaczego Java 4, podczas gdy Java 10 jest już dostępna?
Kevin Cruijssen
Niektóre 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);}}
pola golfowe,
@KevinCruijssen Ponieważ 1.8 był prawdopodobnie największym wydaniem pod względem kodu, który nie będzie działał z poprzednimi wersjami. Większość innych wydań to poprawki i dodatki klas do środowiska JRE. 1.8 był najmniej kompatybilny z poprzednimi JRE.
Magic Octopus Urn
@KevinCruijssen x.toHexIntegerbył mądrzejszy niż import statyczny.
Magic Octopus Urn
Również nie Java 3, ponieważ Java 3 ... naprawdę ... ma tak mało skrótów ...
Magic Octopus Urn
0

SmileBASIC, 165 bajtów

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

Obraz jest podawany jako tablica 32-bitowych wartości kolorów ARGB (wartość alfa jest przycinana, gdy liczba jest konwertowana na sześciocyfrowy ciąg szesnastkowy)

12Me21
źródło