ความท้าทาย
ฉันขอเสนออีกสายลับเทียบกับสายลับที่ท้าทายการเจาะรู obfuscators เมื่อเทียบกับแคร็กเกอร์ ในกรณีนี้ แต่ตัวเลขที่จะป้องกันไม่ได้ใส่ แต่เอาท์พุท
กฎของการท้าทายนั้นง่าย เขียนรูทีนด้วยข้อกำหนดต่อไปนี้:
- ชุดคำสั่งอาจเขียนเป็นภาษาใดก็ได้ แต่ต้องไม่เกิน 320 ไบต์
- รูทีนต้องยอมรับจำนวนเต็ม 32- บิตที่ได้รับการรับรองทั้งสามเป็นอินพุต มันสามารถอยู่ในรูปแบบของฟังก์ชั่นที่ยอมรับ 3 ข้อโต้แย้งฟังก์ชั่นที่ยอมรับอาร์เรย์ 3 องค์ประกอบเดียวหรือโปรแกรมสมบูรณ์ที่อ่านจำนวนเต็ม 3 จำนวนจากอินพุตมาตรฐานใด ๆ
- รูทีนต้องเอาท์พุทจำนวนเต็ม 32- บิตที่เซ็นชื่อหนึ่งชุด
- โดยอินพุตที่เป็นไปได้ทั้งหมดรูทีนต้องส่งออกระหว่างค่าเฉพาะ 2 ถึง 1,000 (รวม) จำนวนของค่าที่ไม่ซ้ำกันการส่งออกสามารถประจำเรียกว่ามันสำคัญ
ดังตัวอย่างโปรแกรม C
int foo( int i1, int i2, int i3 ) {
return 20 + (i1^i2^i3) %5;
}
มีที่สำคัญของ 9 เพราะมัน (หวังว่า) เท่านั้นที่สามารถส่งออกค่าเก้า16
, 17
, 18
, 19
, 20
, 21
, 22
, และ23
24
ข้อ จำกัด เพิ่มเติมบางประการมีดังนี้:
- ชุดคำสั่งจะต้องกำหนดอย่างเต็มที่และไม่แปรผันตามเวลาส่งคืนเอาต์พุตที่เหมือนกันสำหรับอินพุตที่เหมือนกัน ชุดคำสั่งไม่ควรทำการโทรไปยังเครื่องกำเนิดหมายเลขเทียมเทียม
- รูทีนอาจไม่พึ่งพา "ตัวแปรที่ซ่อนอยู่" เช่นข้อมูลในไฟล์ตัวแปรระบบหรือคุณสมบัติทางภาษาที่ลึกลับ ตัวอย่างเช่นกิจวัตรโดยทั่วไปไม่ควรอ้างถึงค่าคงที่เว้นแต่ค่าคงที่จะถูกกำหนดไว้อย่างชัดเจนในรหัสตัวเอง รูทีนที่ต้องพึ่งพาคอมไพเลอร์ quirks, เอาต์พุตจากการดำเนินการที่ไม่ได้กำหนดทางคณิตศาสตร์, ข้อผิดพลาดทางคณิตศาสตร์และอื่น ๆ หากมีข้อสงสัยโปรดสอบถาม.
- คุณ (coder) ต้องทราบอย่างแม่นยำถึงจำนวนเอาต์พุตที่ไม่ซ้ำกันที่รูทีนสามารถสร้างได้และควรสามารถจัดเตรียมอินพุตลำดับอย่างน้อยหนึ่งลำดับที่สร้างแต่ละเอาต์พุต (เนื่องจากอาจมีเอาต์พุตที่ไม่ซ้ำกันหลายร้อยชุดชุดนี้จะถูกร้องขอในกรณีที่คีย์ของคุณเข้าร่วมเท่านั้น)
เนื่องจากปัญหานี้มีความคล้ายคลึงกับการเข้ารหัสแบบดั้งเดิมน้อยกว่าการเข้ารหัสก่อนหน้านี้ฉันจึงคาดว่าจะสามารถเข้าถึงผู้ชมได้กว้างขึ้น
ยิ่งสร้างสรรค์ยิ่งดี
เกณฑ์การให้คะแนน
การส่งที่ไม่แตกสั้นที่สุดต่อจำนวนไบต์จะถูกประกาศให้เป็นผู้ชนะ
หากมีความสับสนใด ๆ โปรดอย่าลังเลที่จะถามหรือแสดงความคิดเห็น
การท้าทาย
ผู้อ่านทุกคนรวมถึงผู้ที่ส่งกิจวัตรของตนเองได้รับการสนับสนุนให้ "ส่งเสียงดัง" การส่งจะแตกเมื่อคีย์ของมันถูกโพสต์ในส่วนความคิดเห็นที่เกี่ยวข้อง หากการส่งยังคงมีอยู่เป็นเวลา 72 ชั่วโมงโดยไม่มีการดัดแปลงหรือแตกมันจะถือว่า "ปลอดภัย" และความสำเร็จใด ๆ ที่ตามมาในการถอดรหัสจะถูกเพิกเฉยเพราะการประกวด
อนุญาตให้แคร็กได้หนึ่งครั้งต่อการส่งต่อผู้อ่านเท่านั้น ตัวอย่างเช่นหากฉันส่งให้กับผู้ใช้ X: "คีย์ของคุณคือ 20" และฉันผิดผู้ใช้ X จะปฏิเสธการเดาของฉันว่าไม่ถูกต้องและฉันจะไม่สามารถส่งการเดาเพิ่มเติมสำหรับการส่งนั้นได้อีก
การส่งที่แคร็กจะถูกกำจัดออกจากการแข่งขัน (หากไม่ปลอดภัย) ไม่ควรแก้ไข หากผู้อ่านประสงค์ที่จะส่งกิจวัตรใหม่เขาควรทำในคำตอบที่แยกต่างหาก
คะแนนของแคร็กเกอร์คือจำนวนของการส่ง (ตามหรือไม่) (s) เขาแตก สำหรับแครกเกอร์ที่มีจำนวนเท่ากันการจัดอันดับจะพิจารณาจากจำนวนไบต์ทั้งหมดในการส่งข้อมูลที่ถอดรหัสทั้งหมด (ยิ่งสูงยิ่งดี)
แคร็กเกอร์ที่มีคะแนนสูงสุดจะถูกประกาศให้กับผู้ชนะพร้อมกับผู้พัฒนาของกิจวัตรที่ชนะ
โปรดอย่าถอดรหัสของคุณเอง
ขอให้โชคดี :)
ลีดเดอร์บอร์ด
อัปเดตล่าสุด 2 กันยายนเวลา 22:45 น. EST
ปัญหาและอุปสรรคที่ไม่สามารถเคลื่อนย้ายได้
- CJam, 105 [เดนนิส]
กองกำลัง Unstoppable (แครกเกอร์):
- เดนนิส [ Java, 269 ; C, 58 ; Mathematica, 29 ]
- Martin Büttner [ Java, 245 ]
return
ฯลฯ ...