บทนำ
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เพื่อทดสอบผลลัพธ์ของโปรแกรมหรือฟังก์ชั่นของคุณ
กรณีทดสอบ
การป้อนข้อมูล:
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
ตัวอย่างผลลัพธ์:
เอาท์พุท Braincopter:
Hello World!
การป้อนข้อมูล:
>++++++++++[<++++++++++>-]>>>>>>>>>>>>>>>>++++[>++++<-]>[<<<<<<<++>+++>++++>++++++>+++++++>+++++++>++++>-]<++<+++++<++++++++++<+++++++++<++++++<<<<<<<<<<<<<[>+>+>[-]>>>>[-]>[-]<<<<<<<[>>>>>>+>+<<<<<<<-]>>>>>>[<<<<<<+>>>>>>-]+>---[<->[-]]<[>>>>>>.>.>..<<<<<<<<<<<<+<<[-]>>>>>>-]<<<<<[>>>>>+>+<<<<<<-]>>>>>[<<<<<+>>>>>-]+>-----[<->[-]]<[>>>>>>>>>>.<.<..<<<<<<<<<<<<+<[-]>>>>>-]<+>[-]>[-]>[-]<<<[>+>+>+<<<-]>[<+>-]+>----------[<->[-]]<[<<+>[-]>-]>[-]>[-]<<<<[>>+>+>+<<<<-]>>[<<+>>-]+>----------[<->[-]]<[<<<+>[-]>>-][-]>[-]<<<<<[>>>>+>+<<<<<-]>>>>[<<<<+>>>>-]+>[<->[-]]<[[-]>[-]<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[>++++++++[<++++++>-]<.-.[-]][-]>[-]<<<[>>+>+<<<-]>>>[<<<+>>>-]<[>++++++++[<++++++>-]<.[-]][-]>[-]<<[>+>+<<-]>>[<<+>>-]++++++++[<++++++>-]<.[-]]>>>>.<<<<<<<<<<<-]
เอาท์พุท:
เอาท์พุท Braincopter:
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17...
การป้อนข้อมูล:
>>+[>>[>]>+>,[>>++++[>++++++++<-]>[<<<[>+>+<<-]>[<+>-]>[<<->>[-]]>-]<<<<->[<+>-[<->-[-[-[-[-[-[-[-[-[<+>-[-[-[-[<->-[-[-[-[-[-[-[-[-[-[-[-[-[<+>-[<->-[<+>-[<->>>+++[>+++++++++<-]>+[<<<[>+>+<<-]>[<+>-]>[<<->>[-]]>-]<<<[<+>-[<->-[<+>-[<->[-]]<[-<++>]>]]<[-<+>]>]]<[-<++++++>]>]]]]]]]]]]]]]]]<[-<+++++>]>]<[-<++++++++>]>]<[-<++++>]>]<[-<+++++++>]>]]]]]]]]]]<[-<+++>]>]]<[-<<[<]<->>[>]>]>]<[-<<[<]<->>[>]>]<<[<]<]>>[>]>>>>>>+<<<<<<<[<]>[[<<[<]<<+>+>>[>]>-]<<[<]<[>>[>]>+<<[<]<-]+<-[-[-[-[-[-[-[->->>[>]>[>]>>>>>[>[>>]>>>]>>[<<<<+>>+>>-]<<[>>+<<-]>>>[<<<<+>+>>>-]<<<[>>>+<<<-]<[->>>>>[<<<<<+>+>>>>-]<<<<[>>>>+<<<<-]<[<++++++++++>-]]>>>>>>[<<<<<<+>+>>>>>-]<<<<<[>>>>>+<<<<<-]<[->>>>>>>[<<<<<<<+>+>>>>>>-]<<<<<<[>>>>>>+<<<<<<-]<[<<++++++++++[>++++++++++<-]>>-]]<.[-]<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]<<[->[-]>>>>[<<+>>->[<<+>>->[<<+>>-]>]>>>]<<<<<<<[<<]>[<<<<<[<<]>]>[>>]<<]>>>>>[>[>>]>>>]<<<<<[<<]>[>[>>]<<[->>+<[>>+<<-]<<<]>->>+<<<<<<<[<<]>]>+>>>>>[>[>>]>>>]>,[>+>+<<-]>[<+>-]>[[>+>+<<-]>>[<<+>>-]<[-<->[-<->[-<->[-<->[-<->[-<->[-<->[-<->[-<->[[-]<-><<<---------->+>>]]]]]]]]]]<]<[>+>+<<-]>[<+>-]>[-[-[-[-[-[-[-[-[-[-<<---------->+>[-[-[-[-[-[-[-[-[-[[-]<<---------->+>]]]]]]]]]]]]]]]]]]]]<<[>>+>+<<<-]>>[<<+>>-]+>[<<<+>>->[-]]<[-<[>+>+<<-]>[<+>-]>[<<<+>>>[-]]<]<[>+>+<<-]>[<+>-]>[<<+>>[-]]<<<<+[-[<<<<<<[<<]>[<<<<<[<<]>]>[>>]<+>>>>[>[>>]>>>]>-]>[>]<[[>+<-]<]<<<<<<[<<]>[>[>>]<<[>[>>+<<-]>+<<-<<]>->>+<<<<<<<[<<]>]>[>>]+>>>>>[>[>>]>>>]>]<<<<<<[<<]>[<<<<<[<<]>]>[>>]<<->>>>>[<<+>>->[<<+>>->[<<+>>-]>]>>>]<<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]+>[>>]>>>[-]>[-]+<<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]+<<<<<[<<]>-<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[->[<<<[<<]<<+>+>>>[>>]>-]<<<[<<]<[>>>[>>]>+<<<[<<]<-]+<[[-]>->>>[>>]>-<+[<<]<<]>[->>>[>>]>+++++++++<<<[<<]<]>>>[>>]+>>]<<-<<<<[>>>>+>+<<<<<-]>>>>[<<<<+>>>>-]>[-<<[>+>+<<-]>[<+>-]>>+<[[-]>-<]>[-<<<<->[-]>>>>[<<+>>->[<<+>>->[<<+>>-]>]>>>]<<<<<<<[<<]>[<<<<<[<<]>]>[>>]>>]<]<<<[<<]<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>>+<[->[<<<[<<]<<+>+>>>[>>]>-]<<<[<<]<[>>>[>>]>+<<<[<<]<-]<[-[-[-[-[-[-[-[-[-[->>>>[>>]>[-]>[-]+>+<<<<<[<<]<<]]]]]]]]]]>>>>[>>]+>>]>[-<<<[<<]<<+>+>>>[>>]>]<<<[<<]<[>>>[>>]>+<<<[<<]<-]<[->>>>[>>]>[>[>>]<<[>[>>+<<-]>+<<-<<]>->>+>[>>]>]<<<[<<]>[<<<<<[<<]>]<<<]<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>+[<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[>+<-]>[<<[<]<<+>+>>[>]>-]<<[<]<[>>[>]>+<<[<]<-]+<-[-[>-<[-]]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]+[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]<-<[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]>>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>]<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>>[<<<+>+>>-]<<[>>+<<-]>>>[<<<<+>+>>>-]<<<[>>>+<<<-]<<+>[[-]<-<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]>[>]>>>>>[>[>>]>>>]<]<[->>>[>>]>>>[>[>>]>>>]>+[<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]>[<<[<]<<+>+>>[>]>-]<<[<]<[>>[>]>+<<[<]<-]+<-[-[>-<[-]]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]<-<[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]+[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]>>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>]<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]>[>]>>>>>[>[>>]>>>]<<]<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]>>[>]>]
เอาท์พุท:
เอาท์พุท Braincopter:
นี่คือBrainf *** ตนเองล่าม มันแยกรหัสจากการป้อนข้อมูลโดย!
; ตัวอย่างเช่นการป้อนข้อมูล,[.,]!Hello, World!\0
จะส่งออกHello, World!
สมมติว่า\0
ถูกแทนที่ด้วยไบต์ว่าง
เกณฑ์การให้คะแนน
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดชนะ มีความสุขในการเล่นกอล์ฟ!