Steganographic Squares
งานของคุณคือการใช้สตริงและสร้างNxN
ภาพที่แสดงถึงสตริงนี้ คุณต้องเขียนอัลกอริทึมที่ใช้ในภาพและเปลี่ยนกลับเป็นสตริงเช่นกัน การให้คะแนนจะรวมจำนวนไบต์ของอัลกอริทึมทั้งสอง:
"เข้ารหัส" อัลกอริทึม + "ถอดรหัส" อัลกอริทึม
คุณควรโพสต์แต่ละรายการแยกกันด้วยจำนวนไบต์สำหรับอัลกอริทึมการเข้ารหัสและถอดรหัสที่แสดงแยกกัน
อัลกอริทึมตัวอย่าง
ตัวอย่างเช่นต่อไปนี้เป็น "การเขียนโปรแกรมปริศนาและการเขียนโค้ดกอล์ฟ" โดยใช้อัลกอริธึม Steganographic ตาม ASCII แบบง่าย ๆ ในช่องสีฟ้า:
#2e7250,#6ea972,#04eb6f,#0fc767,#74ab72,#ee6161
#b73b6d,#1aae6d,#f37169,#bda56e,#1fe367,#e99620
#706450,#0d3575,#146b7a,#4ea47a,#2a856c,#95d065
#3f2d73,#cef720,#bab661,#d1b86e,#f22564,#12b820
#0f3d43,#c86e6f,#1ee864,#a66565,#247c20,#c3bb47
#0e296f,#89d46c,#585b66,#c08f20,#455c20,#136f20
คุณสามารถเห็นช่องสีฟ้าเพียงถือค่า ASCII สำหรับภาพนี้:
50 = 80(P) 72 = 114(r) 6f = 111(o) 67 = 103(g) 72 = 114(r) 61 = 97(a)
6d = 109(m) 6d = 109(m) 69 = 105(i) 6e = 110(n) 67 = 103(g) 20 = 32( )
50 = 80(P) 75 = 117(u) 7a = 122(z) 7a = 122(z) 6c = 108(l) 65 = 101(e)
73 = 115(s) 20 = 32( ) 61 = 97(a) 6e = 110(n) 64 = 100(d) 20 = 32( )
43 = 67(C) 6f = 111(o) 64 = 100(d) 65 = 101(e) 20 = 32( ) 47 = 71(G)
6f = 111(o) 6c = 108(l) 66 = 102(f) 20 = 32( ) 20 = 32( ) 20 = 32( )
ในขณะที่ส่วนที่เหลือของช่องเก็บค่าที่สร้างแบบสุ่มเพื่อ "เติมชีวิตชีวา" ความหลากหลายของสีในภาพ เมื่อดึงข้อความกลับออกมาจากภาพเราก็สามารถเพิกเฉยค่าช่องอื่น ๆ และดึงบิตฐานสิบหกในช่องสีฟ้าสร้างสตริงใหม่:
"Programming Puzzles and Code Golf"
ขอให้สังเกตว่าช่องว่างที่ใช้ในการวางสายอักขระในสี่เหลี่ยมจะไม่รวมอยู่ในผลลัพธ์ที่ถอดรหัสสุดท้าย ในขณะที่คุณต้องใส่สตริงในภาพคุณอาจสมมติว่าสตริงอินพุตจะไม่ลงท้ายด้วยช่องว่าง
กฎระเบียบ
- คุณจะต้องเข้ารหัส 1 ตัวอักษรต่อพิกเซลช่องทางที่เลือกให้เข้ารหัสอักขระนั้นเป็นกฎเกณฑ์
- แชนเนลของสี RGB อื่น ๆ จะต้องทำการสุ่มนอกจากที่คุณเลือกที่จะเข้ารหัสสตริงเข้าไป นี่หมายความว่าแชนเนลที่ไม่ได้เข้ารหัสสุดท้ายของคุณจะต้องอยู่ระหว่าง
0x0000-0xFFFF
(สุ่มเลือก) - การแสดงผลลัพธ์สุดท้ายเนื่องจากอาร์เรย์สี RGB มีค่า 2 มิติ
0x000000-0xFFFFFF
ไม่จำเป็นต้องใช้การสร้างรูปภาพเว้นแต่ว่าคุณต้องการที่จะสนุกกับมันหรือถ้าไบต์น้อย หากคุณเลือกที่จะส่งออกเป็นสตริงฐานสิบหกนำหน้าสตริง hex ด้วย#
EG#FFFFFF
หรือ#05AB1E
หรือคุณอาจคั่นด้วยแท็บเครื่องหมายจุลภาคหรืออะไรก็ได้ที่จะสมเหตุสมผลในแนวนอน แต่ต้องรักษารูปแบบสี่เหลี่ยม กล่าวอีกนัยหนึ่งคุณต้องใช้การขึ้นบรรทัดใหม่ที่เหมาะสม - เอาต์พุตจะต้องอยู่ในรูปสี่เหลี่ยมจัตุรัสและสตริงต้องมีการเว้นวรรคที่ท้ายเพื่อรองรับสิ่งนี้
N≈SQRT(Input#Length())
ซึ่งหมายความว่า หากความยาวของอินพุตไม่ใช่สี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบคุณควรปัดเศษขึ้นN
และวางแผ่นด้วยช่องว่าง - ตามที่ระบุไว้ก่อนหน้านี้หากคุณกำลังขยายช่องว่างในภาพคุณจะต้องไม่รวมอักขระที่มีเบาะรองในผลลัพธ์ "ถอดรหัส" สุดท้าย
- คุณสามารถสันนิษฐานได้ว่า:
- สตริงอินพุตจะไม่ลงท้ายด้วยช่องว่าง
- สตริงอินพุตจะใช้เฉพาะอักขระ ASCII ที่พิมพ์ได้
- นี่คือcode-golf , จำนวนไบต์ต่ำสุดที่ชนะ