การเข้ารหัสทำงานอย่างไร
รับรายการบิต:
- กดค้างไว้ (เริ่มต้นด้วย
2
) - มีรายการ
- สำหรับแต่ละบิตในอินพุต
- หากเป็นเช่นเดียวกับบิตก่อนหน้าให้เพิ่มไพรม์ที่คุณถืออยู่ในรายการ
- ถ้ามันแตกต่างกันให้ถือนายกตัวถัดไปและเพิ่มเข้าไปในรายการ
- ส่งคืนผลิตภัณฑ์ของตัวเลขทั้งหมดในรายการของคุณ
- สำหรับบิตแรกสมมติว่าบิตก่อนหน้านี้คือ
0
หมายเหตุ: ขั้นตอนเหล่านี้มีวัตถุประสงค์เพื่อประกอบการอธิบายเท่านั้นคุณไม่จำเป็นต้องปฏิบัติตาม
ตัวอย่าง
Input: 001
hold 2
0: add 2 to the list
0: add 2 to the list
1: hold 3, add 3 to the list
list: 2,2,3
Output: 12
Input: 1101
hold 2
1: hold 3, add 3 to the list
1: add 3 to the list
0: hold 5, add 5 to the list
1: hold 7, add 7 to the list
list: 3,3,5,7
Output: 315
ตัวอย่างเพิ่มเติม:
000000000 -> 512
111111111 -> 19683
010101010 -> 223092870
101010101 -> 3234846615
011101101 -> 1891890
000101101010010000 -> 3847834029582062520
ท้าทาย
เขียนตัวเข้ารหัสและตัวถอดรหัสสำหรับวิธีการเข้ารหัสนี้
(ตัวถอดรหัสย้อนกลับกระบวนการของตัวเข้ารหัส)
อินพุต / เอาต์พุต
ตัวเข้ารหัสสามารถรับอินพุตในรูปแบบที่เหมาะสม
ตัวเข้ารหัสจะต้องแสดงผลเป็นจำนวนเต็มหรือสตริง
ตัวถอดรหัสต้องใช้อินพุตในรูปแบบเดียวกับที่ตัวเข้ารหัสใช้
ตัวถอดรหัสจะต้องส่งออกในรูปแบบเดียวกับที่ตัวเข้ารหัสใช้เป็นอินพุต
ในคำอื่น ๆ decoder( encoder( input ) ) === input
หมายเหตุ
- ตัวถอดรหัสอาจสมมติว่าอินพุตนั้นสามารถถอดรหัสได้
- คำตอบของคุณเท่านั้นที่มีการจัดการกับเลขที่ภาษาของคุณโดยกำเนิดสามารถรองรับโดยไม่ต้องใช้ (
long
,bigInt
ฯลฯ ) จะเหมาะสมถ้าคุณรองรับเฉพาะภาษา ints ถึง 1 อาจจะพิจารณาการโพสต์คำตอบ
เกณฑ์การให้คะแนน
คะแนนของคุณคือผลรวมของความยาวเป็นไบต์ของตัวเข้ารหัสและตัวถอดรหัส
หากคุณต้องการนำเข้าโมดูลการนำเข้าสามารถนับได้เพียงครั้งเดียวโดยมีเงื่อนไขว่าตัวเข้ารหัสและตัวถอดรหัสของคุณสามารถอยู่ร่วมกันในไฟล์เดียวกันและนำมาใช้ซ้ำ (เช่นฟังก์ชั่น)
ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
นี่คือรหัสกอล์ฟเพื่อให้คะแนนสั้นที่สุดสำหรับทุกภาษาชนะ