“ เพิ่มหนึ่ง” ให้กับทุกสีในภาพ


23

คุณเพียงแค่จะถ่ายภาพนี้และทำให้ทุกสีเพิ่มหนึ่งในเลขฐานสิบหกทุกหลัก ตัวอย่างเช่น#49de5fจะกลายเป็น#5aef60(โดยการ9วนซ้ำไปยังaและการfวนซ้ำไปยัง0.)

สี # 49de5fสี # 5aef60

นี่ก็หมายความว่าสีขาวทั้งหมด ( #ffffff) จะกลายเป็นสีดำ ( #000000) เพราะทุกอย่างfกลับไป0แต่สีดำทั้งหมดจะกลายเป็นสีดำที่อ่อนกว่าของ ( #111111)

สี # 000000สี # 111111

การให้คะแนนขึ้นอยู่กับจำนวนไบต์น้อยที่สุดที่ใช้เนื่องจากนี่เป็นคำถามเกี่ยวกับการเขียน

ใช้ภาพด้านล่างเป็นภาพที่ป้อนสำหรับรหัสของคุณและใส่ภาพที่ส่งออกของรหัสของคุณเป็นคำตอบของคุณ

ใส่ภาพ

หากคุณต้องการคุณสามารถใช้ภาพสายรุ้งอื่น ๆ ได้:

อีกภาพตัวเลือกเสริม


เราสามารถตั้งสมมติฐานอะไรในรูปแบบอินพุต / เอาท์พุตหากเราต้องการใช้ภาษาการเขียนโปรแกรมที่ออกแบบมาสำหรับการออกแบบฮาร์ดแวร์ / FPGA
Reinstate Monica - ζ--

@hexafraction ฉันคิดว่าโดยค่าเริ่มต้นคุณสามารถใช้เป็นไฟล์หรือรหัสฐานสิบหก iirc
Rɪᴋᴇʀ


5
@Panut มันจะดีถ้ามีกรณีทดสอบซึ่งรวมถึงefไบต์ (ซึ่งควรจะf0ตรงข้ามกับ00ที่เกิดขึ้นเมื่อคุณเพิ่ม 17 และใช้ mod 256)
Martin Ender

2
คุณควรโพสต์ภาพสำหรับตัวอย่างผลลัพธ์แทนที่จะให้เพียงแค่ตัวอย่างอินพุต นอกจากนั้นนี่เป็นโพสต์แรกที่ดีมาก ๆ ! ยินดีต้อนรับสู่เว็บไซต์!
DJMcMayhem

คำตอบ:


5

Pyke, 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

Mathematica, 78 ไบต์

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

รับและส่งคืนอิมเมจออบเจกต์ (เพื่อสร้างอิมเมจอิมเมจเพียงแค่วางภาพลงใน Mathematica)

ผลการทดสอบกรณี:

ป้อนคำอธิบายรูปภาพที่นี่

เมื่อรับอินพุตและส่งคืนเอาต์พุตเป็นอาร์เรย์ 3D ของค่าช่องจำนวนเต็มสิ่งนี้จะลดลงเป็น51 ไบต์ :

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

แต่เมตาโพสต์เหล่านั้นยังไม่ได้รับการสนับสนุนมากมายดังนั้นตอนนี้ฉันจะใช้เวอร์ชัน 78- ไบต์แล้ว


4

Verilog, 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

Python 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

Dyalog APL , 21 15 ไบต์

โปรแกรมอาจแสดงผลเป็นเมทริกซ์ของค่าพิกเซล RGB

ฉันถือว่าผลลัพธ์อาจอยู่ในรูปแบบเดียวกัน

โซลูชันใหม่ใช้เมทริกซ์ของค่า [[ r , g , b , r , g , b ], [ r , g , b , ...

16⊥16|1+16 16⊤⎕

คำอธิบาย

รับอินพุตตัวเลข
16 16⊤แปลงเป็นฐาน 2 หลัก 16
1+เพิ่ม 1 คือ 0 → 1, 1 → 2, 15 → 16
16|โมดูลัส 16, ie 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ซึ่งเป็นค่าเริ่มต้นในหลาย ๆ ระบบ

คำอธิบาย

{... สำหรับแต่ละ RGB สตริง 6 ถ่านแสดงเป็นและทำ
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

C - 114 113 70 66 61 72 67 ไบต์

นี่คือรหัส (ด้วยการสนับสนุนสำหรับกรณีทดสอบของMartin Ender (ไม่ต้องมีขนาด 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 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;}. นอกจากนี้มีลักษณะที่โพสต์นี้: เคล็ดลับสำหรับการเล่นกอล์ฟในชวา :)
Kevin Cruijssen

คุณไม่ได้ตั้งค่าสีอย่างถูกต้อง ด้วยการเพิ่ม 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))

      }
   }
}

รุ้งสวยงาม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.