"Додати один" до кожного кольору зображення


23

Ви просто зробите це зображення і зробите кожен колір доданим до кожної шістнадцяткової цифри. Наприклад, #49de5fстане #5aef609циклом на an aі fциклом на a 0.)

Колір № 49de5fКолір №5aef60

Це також означатиме, що все біле ( #ffffff) стане чорним ( #000000), тому що всі fпетлі назад 0, але всі чорні стануть світлішим відтінком чорного ( #111111).

Колір № 000000Колір №111111

Оцінка балів базується на найменшій кількості використаних байтів, оскільки це питання з .

Використовуйте наведене нижче зображення як вхідне зображення для вашого коду, а вихідне зображення коду помістіть у свою відповідь.

Вхідне зображення

Якщо ви хочете, ви також можете використовувати це інше зображення веселки:

Ще одне необов'язкове вхідне зображення


Які припущення ми можемо зробити у форматі вводу / виводу, якщо ми хотіли б використовувати мову програмування, розроблену для дизайну апаратних засобів / FPGA?
Відновіть Моніку - ζ--

@hexafraction Я думаю, що за замовчуванням ви можете взяти як файл або шестнадцятковий код iirc.
Rɪᴋᴇʀ


5
@Peanut, було б добре мати тестовий випадок, що включає efбайти (який повинен стати f0на відміну від того, 00що відбувається, коли ви просто додаєте 17 та приймаєте мод 256).
Мартін Ендер

2
Ви повинні розмістити зображення для виведення зразка, а не просто надавати зразок. Крім цього, це дуже приємний перший пост! Ласкаво просимо на сайт!
DJMcMayhem

Відповіді:


5

Пайк, 17 13 байт

.Fh16j%ijcjs 8{

Спробуйте тут!

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

Приймає вхід у вигляді тривимірного масиву 3d цілого масиву та виводить у тому ж форматі

RAINBOWZ (Не єдиноріг :()


Чи можете ви надати вихідне зображення?
haykam

7

Математика, 78 байт

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

Бере та повертає об’єкт зображення (щоб створити об’єкт зображення, просто вставте зображення в Mathematica).

Результат для тестового випадку:

введіть тут опис зображення

Приймаючи вхід і повертаючи вихід у вигляді тривимірного масиву цілих значень каналу, це зменшується до 51 байта :

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

Але ці метапости ще не мають величезної кількості підтримки, тому я зараз переживаю 78-байтну версію.


4

Верилог, 220 байт:

  • Програми можуть приймати дані як масив значень пікселів RGB з розмірами
  • Програми можуть виводити через масив значень пікселів RGB з розмірами

Наразі не зрозуміло, яким чином мають бути надані розміри та якщо масив має бути потоковим або наданим всім відразу. Я збираюсь передавати його 8 біт за один раз за допомогою тактового сигналу (з прапорчиком дійсних даних, який знижується після обробки всього зображення) і вводити / виводити розміри як 32-бітні цілі числа:

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

Пітон, 226 байт

Тепер це дійсно!

Використовуйте бібліотеку Подушки.

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

Вихід:Вихід

Дякуємо @TuukkaX за збереження 9 байт!
Дякуємо @ mbomb007 за економію 18 байт!


Чи потрібно використовувати 0xFFзамість 255?
Yytsi

@TuukkaX Woops я не помітив, що дякую
TuxCrafting

Там є ще один 0xFF: D
Yytsi

Я думаю, ви можете зберегти більше байтів, сказавши from PIL import*. Я також думаю, що Image.openце можна змінити на одразу openпісля цього.
Yytsi

@TuukkaX Так, це можна змінити from PIL import*, але я не можу змінитиImage.open
TuxCrafting

1

Діалог APL , 21 15 байт

Програми можуть виводити у вигляді матриці значень пікселів RGB

Я припускаю, що вихід може бути в тому ж форматі.

Нове рішення приймає матрицю значень [[ r , g , b , r , g , b ], [ r , g , b ,…

16⊥16|1+16 16⊤⎕

Пояснення

отримати числовий вхід
16 16⊤перетворити на двозначну основу 16
1+додати 1, тобто 0 → 1, 1 → 2, 15 → 16
16|модуль 16, тобто 16 → 0
16⊥перетворити з бази 16

Приклад

      ⊢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

Старе 21-байтне рішення має матрицю [["RRGGBB", "RRGGBB"], ["RRGGBB",…

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

Потреби ⎕IO←0, які за замовчуванням застосовуються у багатьох системах.

Пояснення

{Для кожного 6-діаграмового рядка RGB представляйте його як і виконайте:
n←⎕D,⎕Aпризначте «0… 9A… Z» n, щоб
⍵⍳⍨знайти індекси окремих символів у n,
1+ додайте один до індексу, тобто 0 → 1, 1 → 2, 15 → 16
16|модулем 16, тобто 16 → 0
n[…, ]використовуйте його для індексації в n

Приклад

      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

С - 114 113 70 66 61 72 67 байт

Ось код (з підтримкою тестового випадку Мартіна Ендера (без 60b)):

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

І ось менш затуманена версія:

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

Компілюйте та запускайте gcc -o color colorgolf.c && cat a.bmp | ./color > b.bmp

Цей код підтримує роботу з растровими картами . Для перетворення pngфайлів bmpя використав таку команду:convert -flatten -alpha off png.png a.bmp

Код припускає, що цей bmpзаголовок становить 54 байти - в цьому випадку він працює, але я не впевнений, чи не я щось дискретно ламаю.

Також це веселка:
Зараз виглядає сумно ... :(


1

Java 142 байти

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

Гольф:

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

Перш за все, ласкаво просимо до PPCG! Ваш код з гольф-кодом використовує iяк параметр, так і в циклі for -pet , тому я міняв би параметр на щось інше, як a. Крім того, ви можете пограти ще трохи, видаливши int перед jі додавши його до int i. Так як це: 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;}. Також подивіться цей пост: Поради щодо гольфу на Яві . :)
Кевін Круїссен

Ви не встановите кольори правильно. Додавши 0x111111 до значень RGB, у вас є можливість переповнення з одного шістнадцяткового місця в інше. Наприклад, # 49de5f повинен стати №5aef60, а не # 5aef70.
kamoroso94

0

R, 302 байти

Далеко не ідеально, але тут іде:

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

Пояснення:

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

      }
   }
}

красива веселка

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.