„Dodaj jeden” do każdego koloru na obrazie

23

Po prostu weź ten obraz i spraw, aby każdy kolor był dodawany jeden do każdej cyfry szesnastkowej. Na przykład #49de5fstałby się #5aef60(z 9zapętleniem do ai fzapętleniem do a 0.)

Kolor # 49de5fKolor # 5aef60

Oznaczałoby to również, że wszystkie białe ( #ffffff) stałyby się czarne ( #000000), ponieważ wszystkie fpętle wracają do 0, ale cała czarna stanie się jaśniejszym odcieniem czerni ( #111111).

Kolor # 000000Kolor # 111111

Punktacja opiera się na najmniejszej liczbie użytych bajtów, ponieważ jest to kwestia .

Użyj poniższego obrazu jako obrazu wejściowego dla swojego kodu i umieść obraz wyjściowy swojego kodu w swojej odpowiedzi.

Wprowadź obraz

Jeśli chcesz, możesz również użyć tego innego obrazu tęczy:

Kolejny opcjonalny obraz wejściowy

Haykam
źródło
Jakie założenia możemy przyjąć odnośnie formatu wejściowego / wyjściowego, jeśli chcielibyśmy użyć języka programowania zaprojektowanego do projektowania sprzętowego / FPGA?
Przywróć Monikę - ζ--
@ hexafraction Myślę, że domyślnie możesz wziąć jako plik lub jako kod szesnastkowy iirc.
Rɪᴋᴇʀ
@hexafraction meta.codegolf.stackexchange.com/q/9093/8478
Martin Ender
5
@Peanut, dobrze byłoby mieć przypadek testowy, który zawiera efbajty (które powinny się stać, f0w przeciwieństwie do tego, 00co dzieje się, gdy dodasz 17 i weź mod 256).
Martin Ender,
2
Powinieneś opublikować obraz jako próbkę wyjściową, a nie tylko podać próbkę wejściową. Poza tym jest to bardzo fajny pierwszy post! Witamy na stronie!
DJMcMayhem

Odpowiedzi:

5

Pyke, 17 13 bajtów

.Fh16j%ijcjs 8{

Wypróbuj tutaj!

.F            - for i in deep_for(input):
  h16%        -    (i+1)%16
          +   -   ^+V
      i16+    -    (i+16)
           8{ -  unset_bit(8, ^)

Pobiera dane wejściowe jako tablicę pikseli całkowitych 3d i wyjścia w tym samym formacie

RAINBOWZ (Bez jednorożca :()

niebieski
źródło
Czy możesz podać obraz wyjściowy?
haykam
7

Mathematica, 78 bajtów

Image@Apply[16#+#2&,Mod[IntegerDigits[#~ImageData~"Byte",16,2]+1,16]/255,{3}]&

Pobiera i zwraca obiekt obrazu (aby utworzyć obiekt obrazu, wystarczy wkleić obraz do Mathematica).

Wynik dla przypadku testowego:

wprowadź opis zdjęcia tutaj

Przyjmując dane wejściowe i zwracane jako trójwymiarową tablicę wartości całkowitych kanałów, zmniejsza się to do 51 bajtów :

Apply[16#+#2&,Mod[IntegerDigits[#,16,2]+1,16],{3}]&

Ale te posty z meta nie mają jeszcze przytłaczającego wsparcia, więc na razie wybieram wersję 78-bajtową.

Martin Ender
źródło
4

Verilog, 220 bajtów:

  • Programy mogą przyjmować dane wejściowe jako tablicę wartości pikseli RGB z wymiarami
  • Programy mogą generować dane wyjściowe za pomocą tablicy wartości pikseli RGB o wymiarach

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:

module a(input[31:0]w,input[31:0]h,input[7:0]d,input c,output[31:0]W,output[31:0]H,output reg[7:0]D,output reg v=0);assign W=w;assign H=h;reg[65:0]p=1;always@(posedge c) begin v<=(p<3*w*h); p<=p+v; D<=d+17; end endmodule
Przywróć Monikę - ζ--
źródło
4

Python, 226 bajtów

Teraz jest ważny!

Skorzystaj z biblioteki Pillow.

from PIL import Image
m=Image.open(input()).convert("RGB")
for y in range(m.size[1]):
 for x in range(m.size[0]):
    t=m.getpixel((x,y))
    h=t[0]+(t[1]<<8)+(t[2]<<16)+1118481
    m.putpixel((x,y),(h&255,h>>8&255,h>>16&255))
m.show()

Wydajność:Wydajność

Dzięki @TuukkaX za oszczędność 9 bajtów!
Dzięki @ mbomb007 za oszczędność 18 bajtów!

TuxCrafting
źródło
Czy konieczne jest użycie 0xFFzamiast 255?
Yytsi
@TuukkaX Woops, nie zauważyłem, że dziękuję
TuxCrafting
Jest jeszcze jeden 0xFF: D
Yytsi
Myślę, że możesz zaoszczędzić więcej bajtów, mówiąc from PIL import*. Myślę też, że Image.openmożna to zmienić zaraz openpo tym.
Yytsi
@TuukkaX Tak, można to zmienić from PIL import*, ale nie mogę zmienićImage.open
TuxCrafting
1

Dyalog APL , 21 15 bajtów

Programy mogą wyświetlać jako macierz wartości pikseli RGB

Zakł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 ,…

16⊥16|1+16 16⊤⎕

Wyjaśnienie

uzyskaj wejście numeryczne
16 16⊤przekonwertowane na 2-cyfrową bazę 16
1+dodaj 1, tj. 0 → 1, 1 → 2, 15 → 16
16|moduł 16, tj. 16 → 0
16⊥przekonwertuj z bazy 16

Przykład

      ⊢m←2 6⍴90 239 96 255 255 255 0 0 0 239 239 239
90 239 96 255 255 255
 0   0  0 239 239 239
      16⊥16|1+⎕⊤⍨2/16
⎕:
      m
107 240 113   0   0   0
 17  17  17 240 240 240

Stare rozwiązanie 21-bajtowe przyjmuje macierz [[„RRGGBB”, „RRGGBB”], [„RRGGBB”,…

{n[16|1+⍵⍳⍨n←⎕D,⎕A]}¨

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,⎕Aprzypisz „0… 9A… Z”, aby n
⍵⍳⍨ znaleźć indeksy poszczególnych znaków w n
1+ dodać jeden do indeksu, tj. 0 → 1, 1 → 2, 15 → 16
16|moduł 16, tj. 16 → 0
n[]użyj tego, aby zindeksować do n

Przykład

      f←{n[16|1+⍵⍳⍨n←⎕D,⎕A]}¨ 
      ⊢p←2 2⍴'5AEF60' 'FFFFFF' '000000' 'EFEFEF'
┌──────┬──────┐
│5AEF60│FFFFFF│
├──────┼──────┤
│000000│EFEFEF│
└──────┴──────┘
      f p           
┌──────┬──────┐
│6BF071│000000│
├──────┼──────┤
│111111│F0F0F0│
└──────┴──────┘
Adám
źródło
1

C - 114 113 70 66 61 72 67 bajtów

Oto kod (z obsługą przypadku testowego Martina Endera (bez jego wersji 60b)):

main(c,b){for(;~(b=getchar());putchar(c++<54?b:b+16&240|b+1&15));}

A tutaj jest mniej zaciemniona wersja:

main( c, b ) //Defaults to int
{
    //Get characters until EOF occurs
    //Copy first 54 bytes of header, later add 1 to each hexadecimal digit
    for ( ; ~( b = getchar( ) ); putchar( c++ < 54 ? b: b + 16 & 240 | b + 1 & 15 ) ); 
}

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ć pngpliki bmp, użyłem następującego polecenia:convert -flatten -alpha off png.png a.bmp

Kod zakłada, że bmpnagłówek ma 54 bajty - w tym przypadku działa, ale nie jestem pewien, czy nie dyskretnie coś psuję.

Jest to również tęcza:
Teraz wygląda smutno ... :(

Jacajack
źródło
1

Java 142 bajty

public BufferedImage translateColor(BufferedImage image){
  for(int i=-1;++i<image.getWidth();)
    for(int j=-1;++<image.getHeight();)
      image.setRGB(i,j,image.getRGB(i,j)+1118481);
  return image;
}

Gra w golfa:

BufferedImage t(BufferedImage i){for(int x=-1;++x<i.getWidth();)for(int y=-1;++y<i.getHeight();)i.setRGB(x,y,i.getRGB(x,y)+1118481);return i;}
Roman Gräf
źródło
Po pierwsze witamy w PPCG! Twój kod z kodem golfowym używa izarówno jako parametru, jak i w pętli for, więc zmieniłbym parametr na coś innego a. Możesz także zagrać w golfa, usuwając int przód ji dodając go do int 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 . :)
Kevin Cruijssen
Nie ustawiasz poprawnie kolorów. Dodając 0x111111 do wartości RGB, masz możliwość przepełnienia z jednego miejsca szesnastkowego na drugie. Na przykład # 49de5f ma stać się # 5aef60, a nie # 5aef70.
kamoroso94,
0

R, 302 bajtów

Daleko od ideału, ale oto idzie:

a<-as.raster(imager::load.image(file.choose()));l=letters;n=as.numeric;d=a;f=function(x){if(suppressWarnings(is.na(n(x)))){if(x=="F")"0" else{l[match(x,toupper(l))+1]}}else{if(x==9)"A" else as.character(n(x)+1)}};for(o in 1:90){for(g in 1:200){for(h in 2:7){substr(d[o,g],h,h)<-f(substr(a[o,g],h,h))}}}

Wyjaśnienie:

a<-as.raster(imager::load.image(file.choose()));  //chooses file
l=letters;n=as.numeric;d=a;                      //shortens some names and creates
                                                   duplicate variable to modify

f=function(x){                                //creates a function that takes in a
   if(suppressWarnings(is.na(n(x)))){            character type and checks whether it is
      if(x=="F")"0"                              a number or letter.
      else{l[match(x,toupper(l))+1]}}            Returns the converted letter or number.                               
   else{                                   
      if(x==9)"A"                         
      else as.character(n(x)+1)}         
};                                      

for(o in 1:90){                       //loops through every single hex digit and applies
   for(g in 1:200){                     the converting function, modifying the duplicate
      for(h in 2:7){                    variable. Now you have 2 images =D

         substr(d[o,g],h,h)<-f(substr(a[o,g],h,h))

      }
   }
}

piękna tęcza

miękka poduszka
źródło