"Aggiungi uno" per ogni colore in un'immagine


23

Dovresti semplicemente prendere questa immagine e aggiungere ogni colore a una cifra esadecimale. Ad esempio, #49de5fdiventerebbe #5aef60(con il 9looping a an ae il flooping a a 0.)

Colore # 49de5fColore # 5aef60

Ciò significherebbe anche che tutto il bianco ( #ffffff) diventerebbe nero ( #000000) perché tutti i floop tornano a 0, ma tutto il nero diventerà una tonalità più chiara di nero ( #111111).

Colore # 000000Colore # 111111

Il punteggio si basa sul numero minimo di byte utilizzati, in quanto si tratta di una domanda di .

Usa l'immagine qui sotto come immagine di input per il tuo codice e metti l'immagine di output del tuo codice nella tua risposta.

Immagine di input

Se vuoi, puoi anche usare quest'altra immagine arcobaleno:

Un'altra immagine di input opzionale


Quali ipotesi possiamo fare sul formato di input / output, se desideriamo utilizzare un linguaggio di programmazione progettato per la progettazione hardware / FPGA?
Ripristina Monica - ζ--

@hexafraction Penso che di default tu possa prendere come file o come codice esadecimale iirc.
Rɪᴋᴇʀ


5
@Peanut, sarebbe bene avere un caso di test che includa efbyte (che dovrebbe diventare f0al contrario di quello 00che succede quando aggiungi semplicemente 17 e prendi mod 256).
Martin Ender,

2
È necessario pubblicare un'immagine per l'output di esempio, anziché fornire semplicemente input di esempio. A parte questo, questo è un primo post molto bello! Benvenuti nel sito!
DJMcMayhem

Risposte:


5

Pyke, 17 13 byte

.Fh16j%ijcjs 8{

Provalo qui!

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

Accetta input come una matrice di numeri interi 3d di pixel e output nello stesso formato

RAINBOWZ (Nessun unicorno :()


Potete fornire l'immagine di output?
Hayakam,

7

Mathematica, 78 byte

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

Cattura e restituisce un oggetto immagine (per creare un oggetto immagine, basta incollare l'immagine in Mathematica).

Risultato per il test case:

inserisci qui la descrizione dell'immagine

Prendendo input e restituendo output come un array 3D di valori di canali interi, questo si riduce a 51 byte :

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

Ma quei meta post non hanno ancora una quantità enorme di supporto, quindi per ora vado con la versione a 78 byte.


4

Verilog, 220 byte:

  • I programmi possono accettare input come una matrice di valori di pixel RGB con dimensioni
  • I programmi possono essere emessi tramite una matrice di valori di pixel RGB con dimensioni

Al momento non è chiaro come debbano essere fornite le dimensioni e se l'array debba essere trasmesso in streaming o fornito contemporaneamente. Lo farò in streaming 8 bit alla volta usando un segnale di clock (con un flag di dati validi che diventa basso dopo che l'intera immagine è stata elaborata) e input / output le dimensioni come numeri interi a 32 bit:

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

4

Python, 226 byte

Ora è valido!

Usa la libreria 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()

Produzione:Produzione

Grazie a @TuukkaX per aver salvato 9 byte!
Grazie a @ mbomb007 per aver salvato 18 byte!


È necessario utilizzare al 0xFFposto di 255?
Yytsi,

@TuukkaX Woops non ho notato che grazie
TuxCrafting il

Ce 0xFFn'è ancora uno lì dentro: D
Yytsi,

Penso che puoi salvare più byte dicendo from PIL import*. Penso anche che Image.openpossa essere cambiato subito opendopo.
Yytsi,

@TuukkaX Sì, può essere cambiato in from PIL import*, ma non posso cambiare ilImage.open
TuxCrafting

1

Dyalog APL , 21 15 byte

I programmi possono essere emessi come una matrice di valori di pixel RGB

Presumo che l'output possa essere nello stesso formato.

La nuova soluzione prende una matrice di valori [[ r , g , b , r , g , b ], [ r , g , b , ...

16⊥16|1+16 16⊤⎕

Spiegazione

ottieni input numerico
16 16⊤converti in base a 2 cifre 16
1+aggiungi 1, ovvero 0 → 1, 1 → 2, 15 → 16
16|modulo 16, ovvero 16 → 0
16⊥converti da base 16

Esempio

      ⊢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

La vecchia soluzione a 21 byte prende la matrice di [["RRGGBB", "RRGGBB"], ["RRGGBB", ...

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

Necessità ⎕IO←0, che è predefinita su molti sistemi.

Spiegazione

{... per ogni RGB corda 6-char, rappresentarlo come e fare:
n←⎕D,⎕Aassegnare "0 ... 9A ... Z" n
⍵⍳⍨ individuare indici dei singoli caratteri n
1+ aggiungere uno all'indice, cioè 0 → 1, 1 → 2, 15 → 16
16|modulo 16, ovvero 16 → 0
n[]usalo per indicizzare in n

Esempio

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

1

C - 114 113 70 66 61 72 67 byte

Ecco il codice (con supporto per il test case di Martin Ender (senza la sua 60b)):

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

Ed ecco la versione meno offuscata:

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

Compila ed esegui con gcc -o color colorgolf.c && cat a.bmp | ./color > b.bmp

Questo codice supporta funziona con bitmap . Per convertire i pngfile in bmp, ho usato il seguente comando:convert -flatten -alpha off png.png a.bmp

Il codice presuppone che l' bmpintestazione sia lunga 54 byte, in questo caso funziona, ma non sono sicuro che non stia rompendo discretamente qualcosa.

Inoltre, questo è l'arcobaleno:
Sembra triste ora ... :(


1

Java 142 byte

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

golfed:

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

Prima di tutto benvenuto in PPCG! Il tuo codice code-golfed utilizza isia come parametro sia nel for-loop, quindi cambierei il parametro in qualcos'altro a. Inoltre, puoi giocare a golf un po 'di più rimuovendo il int davanti je aggiungendolo a int i. Così come questo: 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;}. Inoltre, dai un'occhiata a questo post: Suggerimenti per giocare a golf in Java . :)
Kevin Cruijssen il

Non stai impostando i colori correttamente. Aggiungendo 0x111111 ai valori RGB, hai la possibilità di traboccare da una posizione esadecimale alla successiva. Ad esempio, # 49de5f dovrebbe diventare # 5aef60, non # 5aef70.
kamoroso94,

0

R, 302 byte

Lungi dall'essere perfetto, ma qui va:

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

Spiegazione:

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

      }
   }
}

un bellissimo arcobaleno

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.