4
รหัสสีเทาทั่วไป
อินพุต:อาร์เรย์Iของจำนวนเต็มบวกk จำนวนเต็มจะมีขนาดไม่เกิน 100 k ≤ 100 เอาท์พุท:อาร์เรย์เป็นไปได้ทั้งหมดต้องรหัสการส่งออกของคุณOของจำนวนเต็มไม่ใช่เชิงลบของความยาวkกับข้อ จำกัด ที่0 ≤ O ฉัน ≤ฉันฉัน ที่จะได้รับจากอาร์เรย์หนึ่งไปยังอีกคุณสามารถเพิ่มหรือลบ 1 ถึงหนึ่งมูลค่าในอาร์เรย์ รหัสของคุณจะต้องไม่ส่งออกอาร์เรย์เดียวกันสองครั้ง หากจำนวนของอาร์เรย์ที่แตกต่างกันที่จะส่งออกมีขนาดใหญ่มากรหัสของคุณควรดำเนินการในการส่งออกตลอดไปจนกว่าจะถูกฆ่าตาย ตัวอย่าง ถ้าฉันเป็นอาร์เรย์ของkแล้วนี่เป็นปัญหาของการวนซ้ำรหัสสีเทาทั้งหมดของความกว้างบิตkยกเว้นว่าองค์ประกอบแรกและองค์ประกอบสุดท้ายไม่จำเป็นต้องเข้าถึงได้ในขั้นตอนเดียว ถ้าI = [2,1]เป็นไปได้การเรียงลำดับของเอาต์พุตเอาท์พุตอย่างใดอย่างหนึ่งคือ(0,0),(0,1),(1,1),(1,0),(2,0),(2,1) หากแล้วหนึ่งการสั่งซื้อเป็นไปได้ของอาร์เรย์ออกเป็นI = [2,1,3](0,0,0),(0,0,1),(0,0,2),(0,0,3),(0,1,3),(0,1,2),(0,1,1),(0,1,0),(1,1,0),(1,1,1),(1,1,2),(1,1,3),(2,1,3),(2,1,2),(2,1,1),(2,1,0),... นี่คือความท้าทายของรหัสกอล์ฟการส่งพร้อมซอร์สโค้ดที่มีความยาวสั้นที่สุดชนะ อย่าปล่อยให้คำตอบสั้น ๆ ในภาษากอล์ฟกีดกันคุณจากการโพสต์คำตอบในภาษาอื่น ลองคิดหาคำตอบที่สั้นที่สุดในทุกภาษา นี่เป็นความท้าทายที่ จำกัด อย่างซับซ้อน อาร์เรย์ใหม่ทุกตัวควรถูกส่งออกด้วยการผ่านเวลาO (k)นับตั้งแต่อาร์เรย์เอาท์พุทก่อนหน้า (หรือจุดเริ่มต้นของโปรแกรมสำหรับอาร์เรย์แรกที่เอาต์พุต) ซึ่งหมายความว่าเวลาการทำงานต่ออาร์เรย์ส่งออกใหม่ (พวกเขาจะมีความยาวแต่ละk ) ที่ควรจะเป็นมากขึ้นกว่าไม่มีO (k) นั่นคือมันควรจะใช้สัดส่วนของเวลาที่จะkและไม่ได้ตัวอย่างเช่นk 2หรือ2 k หมายเหตุนี่ไม่ใช่เวลาเฉลี่ยต่อเอาต์พุต แต่เวลาที่เลวร้ายที่สุดสำหรับแต่ละอาร์เรย์ที่เอาต์พุต คุณสามารถสันนิษฐานได้ว่าการคำนวณทางคณิตศาสตร์ทั้งหมดในจำนวนเต็ม 64 บิตสามารถดำเนินการได้ในเวลาคงที่เช่นเดียวกับการอ่านและส่งออกรวมถึงการมอบหมายและค้นหาและการเปลี่ยนแปลงค่าในอาร์เรย์ …