Musisz zagrać w golfa w programie, który pobierze nazwę pliku jako dane wejściowe i musisz podać kolor pliku.
Plik będzie miał jedno z tych rozszerzeń, ale Twój program musi tylko je obsługiwać. Powiedz, który z nich w odpowiedzi.
.jpg
.png
.svg
.gif
.bmp
A teraz do klasycznego układu.
Wejście
Nazwa pliku z jednym z powyższych rozszerzeń.
Zamiast tego możesz również wziąć obiekt obrazu lub już zakodowany obraz.
Wynik
Jedynym kolorem w tym pliku jako sześciocyfrowy kod szesnastkowy z opcjonalnym wiodącym #
np. #000000
Jest czarny.
Możesz również wypisać listę / krotkę / łańcuch zawierający wartości dziesiętne lub szesnastkowe koloru RGB, z wyraźnym, nienumerycznym separatorem, np.
,
|
Itp.
Nie możesz wydrukować przezroczystości.
Jeśli plik nie ma tylko jednego koloru, musisz wygenerować wartość fałszowania, która nie jest, #000000
i zakończyć bez drukowania niczego STDERR
. Jest tak, że nie można po prostu otworzyć pliku i uzyskać wartości RGB pierwszego piksela.
Zasady
- Kod szesnastkowy musi być wyprowadzony tylko wtedy, gdy plik ma tylko jeden kolor.
- Plik będzie miał
500x500
piksele - Wszystkie piksele będą miały 0% przezroczystości.
- To jest golf-golf więc najkrótszy kod wygrywa!
Przykłady
źródło
bool
. W tym przypadku zwracałbym astring
dla sprawy normalnej ibool
dla sprawy niestandardowej, owiniętej wobject
. Czy to dobrze, czy mogę zwrócić pusty ciąg znaków lub podobny?Odpowiedzi:
MATL ,
1512 bajtówTestowany z obrazami „.png” podanymi w wyzwaniu. Prawdopodobnie działa również z innymi rozszerzeniami. Dane wejściowe mogą być nazwą pliku lub adresem URL obrazu.
Dane wyjściowe to wartości dziesiętne R, G, B oddzielone spacjami lub pusty ciąg znaków (co jest fałszem), jeśli występuje więcej niż jeden kolor.
Przykład z pierwszym i ostatnim przypadkiem testowym:
Wyjaśnienie
źródło
You may also take an image object or already encoded image instead.
Zaktualizowano OP może być w stanie zapisać bajty ...M×N×3
bezpośrednio wprowadzić tablicę, co prawdopodobnie nie oznacza tego, co OPBash + core-utils + Imagemagick, 60
Wyprowadza kolor, jeśli jest jeden kolor i nic, jeśli jest więcej niż jeden kolor.
convert $1 txt:
odczytuje plik wejściowy i dane wyjściowe jako plik tekstowy, szczególnie w tym formacie:sort -uk3
jednoznacznie sortuje to według trzeciej kolumny. To wyjście jest przypisane do tablicya
((${#a[@]}-9))
sprawdza, czy tablica NIE ma długości 9jeśli tablica NIE ma długości 9 (tzn. ma długość 9), to element wyjściowy 2 (oparty na 0) będzie unikalnym kolorem.
źródło
JavaScript (ES6) + HTML,
315289243218217215211210208 bajtówSprawdzanie, czy wszystkie piksele były identyczne, dodawało dużo bajtów.Do tego stopnia, że nie jest dużo większy niż wtedy, gdy sprawdzałem tylko kolor pierwszego piksela - z tego zadowolony :)Pobiera na wejściu adres URL (bezwzględny, względny, dane lub cokolwiek, co może być użyte jako
src
animg
) pliku obrazu. Wyświetla kolor RGB jako ciąg oddzielony przecinkami lub0
falsey. Testowany z plikami PNG, ale powinien również działać z JPG i GIF.Spróbuj
Wymaga dodania zamknięcia
>
nacanvas
elemencie, aby działał w Snippet. Ponieważ pobieranie obrazów ze źródeł zewnętrznych spowodowałoby zgłoszenie błędu, poniższe dane zamiast tego przyjmą adresy URL danych Base-64 jako dane wejściowe. Odkomentuj ostatnią linię do testowania różnych kolorów, używając obrazu składającego się z 4 kolorów testowych.źródło
A filename with one of the above extensions.
-> Jesteś pewien, że możesz wziąć obraz jako zakodowany ciąg zamiast ładować z pliku?You may also take an image object or already encoded image instead.
Zaktualizowano OP może być w stanie zapisać bajty ..."data:image/png;base64,"+
wyciąć kod, przyjmując dane wejściowe jako adres URL.Python 2, 80 bajtów
PIL.Image ma funkcję getcolors, która zwraca,
None
jeśli liczba kolorów jest większa niż parametr, i zwraca histogram kolorów w[(pixels, (r,g,b,a)), ...]
strukturze.źródło
You may also take an image object or already encoded image instead.
Zaktualizowano OP może być w stanie zapisać bajty ...print i and i[0][1][:3]
?Mathematica,
5551 bajtów-4 dzięki CalculatorFeline
+0 za refaktoryzację do pełnej funkcji.
Wykorzystanie obiektu obrazu Mathematica jako danych wejściowych -
Import["filename.png"]
.Zwraca 0, jeśli nie wszystkie w jednym kolorze. Zwraca wartość dziesiętną koloru, jeśli tylko jeden.
Wyjaśnienie:
źródło
a==1
==a<2
iJoin@@
jest równoważne~Flatten~1
w tym przypadku. (Przyłącz się, jeśli lista zawiera jakieś nielista.)If[Length@#==1,#,0]&@Union[ImageData@#~Flatten~1]&
You may also take an image object or already encoded image instead.
. Zaktualizuję.Join@@
.Java 8+,
331165119 bajtów-duże bajty dzięki @LethalCoder za aktualizację mnie w sprawie zmiany reguły, która pozwoliła na dużo gry w golfa
-46 bajtów dzięki @KevinCruijssen i poprawiona literówka
źródło
You may also take an image object or already encoded image instead.
Zaktualizowano OP może być w stanie zapisać bajty ...Object f(java.awt.image.BufferedImage i){Integer j=i.getRGB(0,0),k=500,l;for(;k-->0;)for(l=500;l-->0;)if(i.getRGB(k,l)!=i)return"";return j.toHexString(j);}
. Zmieniając wersję Java na 8+, możesz także zmienićObject f(java.awt.image.BufferedImage i)
nai->
. Myślę też, że popełniłeś literówkę: nie powinnoif(i.getRGB(k,l)!=i)
być!=j
zamiast tego?Python 2 ,
12385 bajtówźródło
You may also take an image object or already encoded image instead.
Zaktualizowano OP może być w stanie zapisać bajty ...PIL
jest wyjątkiem importu, nie można zrobićfrom PIL import*
aniPIL.
C #,
163128125 bajtówZaoszczędź 3 bajty dzięki @Kevin Cruijssen.
Jeśli nie musieliśmy dodatkowo sprawdzać, czy obraz ma te same kolory, to tylko 55 bajtów:
źródło
b=>{var c=b.GetPixel(0,0);for(int w=500,h;w-->0;)for(h=500;h-->0;)if(b.GetPixel(w,h)!=c)return"";return c.R+" "+c.G+" "+c.B;}
(-3 bajty)Mathematica, 112 bajtów
wizerunek
źródło
You may also take an image object or already encoded image instead.
Zaktualizowano OP może być w stanie zapisać bajty ...Most@PixelValue[i, {1, 1}, "Byte"]
zapisze niektóre bajty.If[Length@Tally[a=i~ImageData~"Byte"]<2,"#"<>StringPadLeft[Most@a[[1,1]]~IntegerString~16,2,"0"],False]
- użyj funkcji ImageData. Nie wiedziałem, że istnieje.Bash + ImageMagick, 100 bajtów
Testowany z .png, powinien również działać z innymi formatami. Wyjściem dla obrazu polichromatycznego jest po prostu pusty ciąg.
źródło
((`identify -format %k $1`-1))||
Jest także krótszy niżi=$(expr `identify -format "%k" $1` = 1)&&
.C,
224205 bajtówPobiera bitmapę 500 x 500 jako argument wiersza polecenia. Drukuje RGB pliku, np.
255,255,255
Lub0
jeśli plik nie jest stały. Prawdopodobnie ulega awarii, jeśli nie podano pliku.Ciekawe punkty do zapamiętania:
void*
w miejscu, któregoFILE*
należy unikać, w tym<stdio.h>
for
pętli z,i%3
aby ustalić, czy wszystkie bajty są takie sameźródło
JavaScript + HTML, 143 + 23 = 166 bajtów
Spróbuj:
Mniej golfa:
źródło
PowerShell, 79 bajtów
Skrypt testu mniej golfowego:
499..0*500
oznacza: powtórz 500 razy zakres od 499 do 0$b|% G*l $_ $y
jest skrót dla$b.GetPixel($_,$y)
. Ta sztuczka jest przydatna przy gofingu, ale spowalnia kod.Wyjście z
$b|% G*l $_ $y
:Wyjście z
$b.GetPixel($_,$y)
:Wyjaśnienie:
gu
(alias Get-Unique ) do tablicy kolorów.hu
jest pojedynczy element (właściwośćrank
ma wartość tylko dla tablicy), wówczas wypisz wartość dziesiętną R, G, B tego elementuźródło
Python 2 + OpenCV + NumPy: 66 znaków
colors.py
test.py
Wynik:
OpenCV jest w stanie odczytać obraz i zwrócić go jako macierz N-wymiarową. NumPy służy do testowania pierwszego piksela względem innych i drukowania wartości RGB lub pustego.
źródło
PHP, 88 bajtów
funkcja anonimowa przyjmuje indeksowany zasób obrazu PHP jako parametr, przyjmuje kolor w pierwszym polu palety, zwraca kod koloru lub 0.
program, 96 bajtów
pobiera nazwę pliku GIF z argumentu, drukuje kod koloru lub nic. Uruchom z
php -r '<code>' <filename.gif>
.dla prawdziwych kolorowych obrazów,
113112 bajtówjak wyżej, ale wymaga prawdziwego kolorowego obrazu.
program,
122116 bajtówjak wyżej, ale wymaga pliku PNG.
źródło