Po prostu weź ten obraz i spraw, aby każdy kolor był dodawany jeden do każdej cyfry szesnastkowej. Na przykład #49de5f
stałby się #5aef60
(z 9
zapętleniem do a
i f
zapętleniem do a 0
.)
Oznaczałoby to również, że wszystkie białe ( #ffffff
) stałyby się czarne ( #000000
), ponieważ wszystkie f
pętle wracają do 0
, ale cała czarna stanie się jaśniejszym odcieniem czerni ( #111111
).
Punktacja opiera się na najmniejszej liczbie użytych bajtów, ponieważ jest to kwestia golfa .
Użyj poniższego obrazu jako obrazu wejściowego dla swojego kodu i umieść obraz wyjściowy swojego kodu w swojej odpowiedzi.
Jeśli chcesz, możesz również użyć tego innego obrazu tęczy:
ef
bajty (które powinny się stać,f0
w przeciwieństwie do tego,00
co dzieje się, gdy dodasz 17 i weź mod 256).Odpowiedzi:
Pyke,
1713 bajtówWypróbuj tutaj!
Pobiera dane wejściowe jako tablicę pikseli całkowitych 3d i wyjścia w tym samym formacie
źródło
Mathematica, 78 bajtów
Pobiera i zwraca obiekt obrazu (aby utworzyć obiekt obrazu, wystarczy wkleić obraz do Mathematica).
Wynik dla przypadku testowego:
Przyjmując dane wejściowe i zwracane jako trójwymiarową tablicę wartości całkowitych kanałów, zmniejsza się to do 51 bajtów :
Ale te posty z meta nie mają jeszcze przytłaczającego wsparcia, więc na razie wybieram wersję 78-bajtową.
źródło
Verilog, 220 bajtów:
Obecnie nie jest jasne, w jaki sposób należy podać wymiary i czy tablica ma być przesyłana strumieniowo lub udostępniana jednocześnie. Mam zamiar przesyłać strumieniowo 8 bitów na raz za pomocą sygnału zegara (z flagą poprawnych danych, która zmniejsza się po przetworzeniu całego obrazu) i wprowadzać / wyprowadzać wymiary jako 32-bitowe liczby całkowite:
źródło
Python, 226 bajtów
Teraz jest ważny!
Skorzystaj z biblioteki Pillow.
Wydajność:
Dzięki @TuukkaX za oszczędność 9 bajtów!
Dzięki @ mbomb007 za oszczędność 18 bajtów!
źródło
0xFF
zamiast255
?0xFF
: Dfrom PIL import*
. Myślę też, żeImage.open
można to zmienić zarazopen
po tym.from PIL import*
, ale nie mogę zmienićImage.open
Dyalog APL ,
2115 bajtówZakładam, że dane wyjściowe mogą być w tym samym formacie.
Nowe rozwiązanie przyjmuje macierz wartości [[ r , g , b , r , g , b ], [ r , g , b ,…
Wyjaśnienie
⎕
uzyskaj wejście numeryczne16 16⊤
przekonwertowane na 2-cyfrową bazę 161+
dodaj 1, tj. 0 → 1, 1 → 2, 15 → 1616|
moduł 16, tj. 16 → 016⊥
przekonwertuj z bazy 16Przykład
Stare rozwiązanie 21-bajtowe przyjmuje macierz [[„RRGGBB”, „RRGGBB”], [„RRGGBB”,…
Potrzebuje
⎕IO←0
, co jest domyślne w wielu systemach.Wyjaśnienie
{
…}¨
Dla każdego ciągu 6-znakowego RGB reprezentuj go jako⍵
i wykonaj:n←⎕D,⎕A
przypisz „0… 9A… Z”, aby n⍵⍳⍨
znaleźć indeksy poszczególnych znaków w n1+
dodać jeden do indeksu, tj. 0 → 1, 1 → 2, 15 → 1616|
moduł 16, tj. 16 → 0n[
…]
użyj tego, aby zindeksować do nPrzykład
źródło
C -
1141137066617267 bajtówOto kod (z obsługą przypadku testowego Martina Endera (bez jego wersji 60b)):
A tutaj jest mniej zaciemniona wersja:
Skompiluj i uruchom z
gcc -o color colorgolf.c && cat a.bmp | ./color > b.bmp
Ten kod obsługuje działa z bitmapami . Aby przekonwertować
png
plikibmp
, użyłem następującego polecenia:convert -flatten -alpha off png.png a.bmp
Kod zakłada, że
bmp
nagłówek ma 54 bajty - w tym przypadku działa, ale nie jestem pewien, czy nie dyskretnie coś psuję.Jest to również tęcza:
źródło
Java 142 bajty
Gra w golfa:
źródło
i
zarówno jako parametru, jak i w pętli for, więc zmieniłbym parametr na coś innegoa
. Możesz także zagrać w golfa, usuwającint
przódj
i dodając go doint i
. Tak jak ten:BufferedImage t(BufferedImage a){for(int i=-1,j;++i<a.getWidth();)for(j=-1;++j<a.getHeight();)a.setRGB(i,j,a.getRGB(i,j)+1118481);return a;}
. Zobacz także ten post: Wskazówki dotyczące gry w golfa w Javie . :)R, 302 bajtów
Daleko od ideału, ale oto idzie:
Wyjaśnienie:
źródło