ระดมสมองสร้างภาพ


10

บทนำ

Braincopterเป็นอนุพันธ์ Brainf *** ที่ลึกลับที่เข้ารหัสโปรแกรม Brainf *** เป็นภาพ ในฐานะภาษา 2D มันใช้สองคำสั่งเพิ่มเติม พวกเขาหมุนตัวชี้คำแนะนำ (เริ่มต้นชี้ไปทางขวา) ตามเข็มนาฬิกาและทวนเข็มนาฬิกา Braincopter คล้ายกับBrainlollerมากยกเว้นว่าแทนที่จะใช้สีที่ต่างกันเป็นคำสั่งต่าง ๆ มันจะคำนวณคำสั่งตามค่า RGB ของแต่ละพิกเซลแทน

Braincopter คำนวณคำสั่งสำหรับแต่ละพิกเซลตามสูตร N = (65536 * R + 256 * G + B) % 11โดยที่Nหมายเลขคำสั่งอยู่ การแม็พจากหมายเลขคำสั่งไปยังคำสั่ง Brainf *** มีดังนี้:

0  >
1  <
2  +
3  -
4  .
5  ,
6  [
7  ]
8  rotate instruction pointer to the right (clockwise)
9  rotate instruction pointer to the left (counterclockwise)
10 NOP

Braincopter นั้นมีประโยชน์สำหรับ steganography หรือการซ่อนข้อความลับในสิ่งอื่นเนื่องจากสีของแต่ละพิกเซลในรูปภาพใด ๆ สามารถเปลี่ยนแปลงได้เพียงเล็กน้อยเพื่อให้การดำเนินการที่ต้องการ รูปภาพที่เปลี่ยนแปลงดังกล่าวมักจะแยกไม่ออกจากต้นฉบับ

ท้าทาย

เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้รูปภาพและสตริงของรหัส brainf *** เป็นอินพุตและสร้างภาพต้นฉบับด้วยรหัส brainf *** ที่เข้ารหัสในนั้น

เมื่อต้องการทำเช่นนี้ให้ใช้แต่ละพิกเซลในภาพต้นฉบับและแทนที่ด้วยค่า RGB ที่ใกล้เคียงกับสีของพิกเซลดั้งเดิมที่ประเมินเป็นคำสั่ง Braincopter ที่ถูกต้อง ความแตกต่างของสีสำหรับวัตถุประสงค์ของการท้าทายนี้ถูกกำหนดเป็นabs(R1 - R2) + abs(G1 - G2) + abs(B1 - B2)แตกต่างของสีสำหรับวัตถุประสงค์ของการท้าทายนี้ถูกกำหนดให้เป็นในกรณีของเน็คไทที่สองสีที่แก้ไขเป็นคำสั่ง Braincopter เดียวกันจะใกล้เคียงกับสีเดิมอย่างเท่าเทียมกันสามารถเลือกได้

ตัวอย่างเช่นหากสีดั้งเดิม#FF8040และจำเป็นต้องได้รับการแก้ไขเพื่อให้ได้คำสั่ง '1' ใน Braincopter#FF7F40ควรได้รับการเลือก

Braincopter จะออกเมื่อตัวชี้คำแนะนำวิ่งไปที่ขอบของภาพดังนั้นเราจะเก็บไว้ในภาพโดยใช้คำสั่ง 8 และ 9 (หมุนตัวชี้คำสั่งตามเข็มนาฬิกาและทวนเข็มนาฬิกาตามลำดับ) ง่ายที่สุดในการอธิบายรูปแบบของการเข้ารหัสด้วยตัวอย่าง

สำหรับอินพุต+[[->]-[-<]>-]>.>>>>.<<<<-.>>-.>.<<.>>>>-.<<<<<++.>>++.และรูปภาพขนาด 8x9 คำแนะนำจะถูกจัดวางเช่นนี้ (ใช้คำสั่ง Brainf *** แทนการเทียบเท่ากับ Braincopter และเป็นตัวแทนยูนิโค้ดของการเลี้ยว):

+ [ [ - > ] - ↲
↳ - > ] < - [ ↲
↳ ] > . > > > ↲
↳ < < < < . > ↲
↳ - . > > - . ↲
↳ > . < < . > ↲
↳ > > > - . < ↲
↳ + + < < < < ↲
↳ . > > + + . N

(โดยที่ N คือ NOP) อย่างที่คุณเห็นการควบคุมโฟลว์เดินทางจากซ้ายไปขวาจนกว่ามันจะกระทบกับการหมุนตามเข็มนาฬิกาชุดแรกจากนั้นเดินทางไปทางขวาไปซ้ายข้ามแถวที่สองเป็นต้น โปรแกรมของคุณจะต้องใช้โฟลว์ควบคุมนี้ การป้อนข้อมูลด้วยสมองจะสามารถให้พอดีกับภาพ อย่างไรก็ตามคุณอาจไม่คิดว่ามันจะเหมาะสมกับภาพเสมอ ถ้ามันเล็กเกินไปให้ปัดด้วย NOP รหัส Braincopter ยังคงต้องมีทวนเข็มนาฬิกา / ทวนเข็มนาฬิกาหันไปทั้งสองข้างแม้ว่า

คุณอาจจะคิดว่า Brainf *** ><+-,.[]การป้อนข้อมูลจะมีเพียงแปดตัวอักษร

ใช้ล่ามทางการของ Braincopterเพื่อทดสอบผลลัพธ์ของโปรแกรมหรือฟังก์ชั่นของคุณ

กรณีทดสอบ

การป้อนข้อมูล:

20x20 สี่เหลี่ยมของ # EE2056

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

ตัวอย่างผลลัพธ์:

20x20 สี่เหลี่ยมแก้ไข

เอาท์พุท Braincopter:

Hello World!

การป้อนข้อมูล:

50x40 Starry Night

>++++++++++[<++++++++++>-]>>>>>>>>>>>>>>>>++++[>++++<-]>[<<<<<<<++>+++>++++>++++++>+++++++>+++++++>++++>-]<++<+++++<++++++++++<+++++++++<++++++<<<<<<<<<<<<<[>+>+>[-]>>>>[-]>[-]<<<<<<<[>>>>>>+>+<<<<<<<-]>>>>>>[<<<<<<+>>>>>>-]+>---[<->[-]]<[>>>>>>.>.>..<<<<<<<<<<<<+<<[-]>>>>>>-]<<<<<[>>>>>+>+<<<<<<-]>>>>>[<<<<<+>>>>>-]+>-----[<->[-]]<[>>>>>>>>>>.<.<..<<<<<<<<<<<<+<[-]>>>>>-]<+>[-]>[-]>[-]<<<[>+>+>+<<<-]>[<+>-]+>----------[<->[-]]<[<<+>[-]>-]>[-]>[-]<<<<[>>+>+>+<<<<-]>>[<<+>>-]+>----------[<->[-]]<[<<<+>[-]>>-][-]>[-]<<<<<[>>>>+>+<<<<<-]>>>>[<<<<+>>>>-]+>[<->[-]]<[[-]>[-]<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[>++++++++[<++++++>-]<.-.[-]][-]>[-]<<<[>>+>+<<<-]>>>[<<<+>>>-]<[>++++++++[<++++++>-]<.[-]][-]>[-]<<[>+>+<<-]>>[<<+>>-]++++++++[<++++++>-]<.[-]]>>>>.<<<<<<<<<<<-]

เอาท์พุท:

Starry Night ดัดแปลงแล้ว

เอาท์พุท Braincopter:

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17...

การป้อนข้อมูล:

Small Mona Lisa

>>+[>>[>]>+>,[>>++++[>++++++++<-]>[<<<[>+>+<<-]>[<+>-]>[<<->>[-]]>-]<<<<->[<+>-[<->-[-[-[-[-[-[-[-[-[<+>-[-[-[-[<->-[-[-[-[-[-[-[-[-[-[-[-[-[<+>-[<->-[<+>-[<->>>+++[>+++++++++<-]>+[<<<[>+>+<<-]>[<+>-]>[<<->>[-]]>-]<<<[<+>-[<->-[<+>-[<->[-]]<[-<++>]>]]<[-<+>]>]]<[-<++++++>]>]]]]]]]]]]]]]]]<[-<+++++>]>]<[-<++++++++>]>]<[-<++++>]>]<[-<+++++++>]>]]]]]]]]]]<[-<+++>]>]]<[-<<[<]<->>[>]>]>]<[-<<[<]<->>[>]>]<<[<]<]>>[>]>>>>>>+<<<<<<<[<]>[[<<[<]<<+>+>>[>]>-]<<[<]<[>>[>]>+<<[<]<-]+<-[-[-[-[-[-[-[->->>[>]>[>]>>>>>[>[>>]>>>]>>[<<<<+>>+>>-]<<[>>+<<-]>>>[<<<<+>+>>>-]<<<[>>>+<<<-]<[->>>>>[<<<<<+>+>>>>-]<<<<[>>>>+<<<<-]<[<++++++++++>-]]>>>>>>[<<<<<<+>+>>>>>-]<<<<<[>>>>>+<<<<<-]<[->>>>>>>[<<<<<<<+>+>>>>>>-]<<<<<<[>>>>>>+<<<<<<-]<[<<++++++++++[>++++++++++<-]>>-]]<.[-]<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]<<[->[-]>>>>[<<+>>->[<<+>>->[<<+>>-]>]>>>]<<<<<<<[<<]>[<<<<<[<<]>]>[>>]<<]>>>>>[>[>>]>>>]<<<<<[<<]>[>[>>]<<[->>+<[>>+<<-]<<<]>->>+<<<<<<<[<<]>]>+>>>>>[>[>>]>>>]>,[>+>+<<-]>[<+>-]>[[>+>+<<-]>>[<<+>>-]<[-<->[-<->[-<->[-<->[-<->[-<->[-<->[-<->[-<->[[-]<-><<<---------->+>>]]]]]]]]]]<]<[>+>+<<-]>[<+>-]>[-[-[-[-[-[-[-[-[-[-<<---------->+>[-[-[-[-[-[-[-[-[-[[-]<<---------->+>]]]]]]]]]]]]]]]]]]]]<<[>>+>+<<<-]>>[<<+>>-]+>[<<<+>>->[-]]<[-<[>+>+<<-]>[<+>-]>[<<<+>>>[-]]<]<[>+>+<<-]>[<+>-]>[<<+>>[-]]<<<<+[-[<<<<<<[<<]>[<<<<<[<<]>]>[>>]<+>>>>[>[>>]>>>]>-]>[>]<[[>+<-]<]<<<<<<[<<]>[>[>>]<<[>[>>+<<-]>+<<-<<]>->>+<<<<<<<[<<]>]>[>>]+>>>>>[>[>>]>>>]>]<<<<<<[<<]>[<<<<<[<<]>]>[>>]<<->>>>>[<<+>>->[<<+>>->[<<+>>-]>]>>>]<<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]+>[>>]>>>[-]>[-]+<<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]+<<<<<[<<]>-<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[->[<<<[<<]<<+>+>>>[>>]>-]<<<[<<]<[>>>[>>]>+<<<[<<]<-]+<[[-]>->>>[>>]>-<+[<<]<<]>[->>>[>>]>+++++++++<<<[<<]<]>>>[>>]+>>]<<-<<<<[>>>>+>+<<<<<-]>>>>[<<<<+>>>>-]>[-<<[>+>+<<-]>[<+>-]>>+<[[-]>-<]>[-<<<<->[-]>>>>[<<+>>->[<<+>>->[<<+>>-]>]>>>]<<<<<<<[<<]>[<<<<<[<<]>]>[>>]>>]<]<<<[<<]<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>>+<[->[<<<[<<]<<+>+>>>[>>]>-]<<<[<<]<[>>>[>>]>+<<<[<<]<-]<[-[-[-[-[-[-[-[-[-[->>>>[>>]>[-]>[-]+>+<<<<<[<<]<<]]]]]]]]]]>>>>[>>]+>>]>[-<<<[<<]<<+>+>>>[>>]>]<<<[<<]<[>>>[>>]>+<<<[<<]<-]<[->>>>[>>]>[>[>>]<<[>[>>+<<-]>+<<-<<]>->>+>[>>]>]<<<[<<]>[<<<<<[<<]>]<<<]<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>+[<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[>+<-]>[<<[<]<<+>+>>[>]>-]<<[<]<[>>[>]>+<<[<]<-]+<-[-[>-<[-]]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]+[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]<-<[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]>>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>]<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>>[<<<+>+>>-]<<[>>+<<-]>>>[<<<<+>+>>>-]<<<[>>>+<<<-]<<+>[[-]<-<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]>[>]>>>>>[>[>>]>>>]<]<[->>>[>>]>>>[>[>>]>>>]>+[<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]>[<<[<]<<+>+>>[>]>-]<<[<]<[>>[>]>+<<[<]<-]+<-[-[>-<[-]]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]<-<[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]+[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]>>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>]<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]>[>]>>>>>[>[>>]>>>]<<]<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]>>[>]>]

เอาท์พุท:

Mona Lisa ดัดแปลงแล้ว

เอาท์พุท Braincopter:

นี่คือBrainf *** ตนเองล่าม มันแยกรหัสจากการป้อนข้อมูลโดย!; ตัวอย่างเช่นการป้อนข้อมูล,[.,]!Hello, World!\0จะส่งออกHello, World!สมมติว่า\0ถูกแทนที่ด้วยไบต์ว่าง

เกณฑ์การให้คะแนน

นี่คือดังนั้นคำตอบที่สั้นที่สุดชนะ มีความสุขในการเล่นกอล์ฟ!


ดูเหมือนว่า Braincopter จะสร้างงานศิลปะ ศิลปะจริง
Erik the Outgolfer

คำตอบ:


1

งูหลาม 664 656

การใช้งาน: python snippet.py image.png <bf script>

R=range;_=R(256);a=abs
def C(c):R,G,B=c;return'><+-.,[]RLN'[(65536*R+256*G+B)%11]
def D(c,d):R,G,B=c;F,V,H=d;return a(R-F)+a(G-V)+a(B-H)
def E(c1,i):return min([(c,D(c1,c))for c in[(r,g,b)for r in _ for g in _ for b in _]if C(c)==i],key=lambda x:x[1])[0]
def B(b,w,h):
 x,y,d=0,0,1
 for c in(b[0]+'R'.join(['L'+s for s in[s[::-1]if i%2 else s for i,s in enumerate([(b[1:]+'N'*w*h)[q:q+w-2]for q in R(0,w*h,w-2)])]])[1:])[:w*h][:-1]+'N':
  yield c,(a(x),y)
  x+=d
  if c=='R':x=0;y+=1;d*=-1
import sys
from PIL import Image
I=Image.open(sys.argv[1]).convert('RGB')
W,H=I.size
P=I.load()
for i,p in B(sys.argv[2],W,H):P[p]=E(P[p],i)
I.save(sys.stdout,"PNG")

คำอธิบายที่จะมา ...

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