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. (#xxxxxx
gdzie 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 (
\n
lub\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”:
Oczekiwany wynik:
#FFFFFF 40
#000000 30
#0000FF 20
#FF0000 10
Przykładowy obraz „niebieski gradient”:
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 :
Oczekiwany wynik:
#FFFFFF 18042
#000000 1754
#FF3300 204
Podobne do tego pytania , ale wynikiem jest tekst, a nie obraz.
code-golf
image-processing
color
Thomas Weller
źródło
źródło
count descending
jest trochę niejasne. Jak to sortujemy?the most frequent colors at the top
?Odpowiedzi:
Mathematica, 91 bajtów
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:
źródło
Bash + coreutils, 54
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
Tutaj nazwa pliku obrazu wejściowego jest przekazywana jako parametr wiersza polecenia.
źródło
,
awk
część:awk '$0=$2" "$1'
.JavaScript (ES6),
359355 bajtówZaoszczędź 4 bajty dzięki @Neil
Próbny
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.
źródło
|
ma niższy priorytet niż<<
wtedy, jeśli użyjesz go zamiast+
, nie będziesz potrzebował tylu()
s.<!-- language: lang-js -->
fragment kodu, skutecznie wyłączając JavaScript.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]))}}
Pyth , 29 bajtów
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źródło
s
wcześniej'Q
, ponieważ obraz jest reprezentowany jako lista list trojaczków.V_SrS%L+\#*3"%02X"s'z8jd_N
Mathematica
10392 bajtyPrzykład
Wyjaśnienie
DominantColors
zwykle 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).{"#"<>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.)źródło
PowerShell v2 +, 187 bajtów
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
$b
w trzecim wierszu, aby dopasować bezpośrednimi wymagań formatu wyjściowego, aw ostatnim wierszusort
przezvalue
w-des
porządku cending, wtedy ruryFormat-Table
z-H
ideTableHeaders i-A
utoSize jako parametry. Bardzo rzadko używa się goFT
tutaj 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.
źródło
Tcl / Tk , 134 bajty
d
jest dladata
.Tcl / Tk , 232 bajty
wish sort_pix.tcl QTE4O.png
wish sort_pix.tcl 5s1Ob.png
wish sort_pix.tcl z07VA.gif
źródło
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,
P
a 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
-a
flaga jest potrzebna do pobrania danych wejściowych jako surowych bajtów i-f
do 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.
źródło
Python 2, 186 bajtów
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:
Ouput dla niebieskiego gradientu:
Wyjście dla obrazu testowego
Wyjaśnienie:
źródło
Java (1.4+) ,
483428 bajtówWypróbuj online!(Nie działa online)Nie golfowany:
Dane
toString()
wyjściowe mapy wyglądają następująco: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.
źródło
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);}}
x.toHexInteger
był mądrzejszy niż import statyczny.SmileBASIC, 165 bajtów
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)
źródło