ด้ายของตำรวจ
ในเธรดนี้งานของคุณคือสร้างโปรแกรม / ฟังก์ชั่นตามการเรียกซ้ำเพื่อสร้างชุดเลขจำนวนเต็มใด ๆ โจรจะพยายามหาทางออกที่ไม่ใช่ recursive สั้นกว่าในหัวข้อโจร
บทสรุปความท้าทาย
ในหลาย ๆ ภาษาฟังก์ชั่นวนซ้ำสามารถทำให้งานการเขียนโปรแกรมง่ายขึ้นอย่างมาก อย่างไรก็ตามค่าโสหุ้ยไวยากรณ์สำหรับการเรียกซ้ำที่เหมาะสมอาจ จำกัด การใช้งานในโค้ดกอล์ฟ
ตำรวจจะสร้างโปรแกรมหรือฟังก์ชั่นการจำนวนเต็มเดียวn
ซึ่งจะสร้างเป็นครั้งแรกที่n
รายการของชุดจำนวนเต็มโดยใช้เพียงการเรียกซ้ำ 1 พวกเขาควรตรวจสอบให้แน่ใจว่ามีวิธีที่ไม่ใช้เวลาสั้นกว่าในการสร้างลำดับเพื่อทำเครื่องหมายรายการของพวกเขาว่าปลอดภัย
โจรจะพยายามที่จะหาที่สั้นลงโปรแกรมหรือฟังก์ชั่นในภาษาเดียวกันสร้างชุดจำนวนเต็มเดียวกันโดยใช้ไม่มีการเรียกซ้ำ 2
หากการส่งของตำรวจไม่แตกภายในสิบวัน (240 ชั่วโมง) ตำรวจจะพิสูจน์ว่าในความเป็นจริงมีความเป็นไปได้ที่จะมีวิธีการแบบไม่เรียกซ้ำสั้นกว่าโดยเปิดเผยวิธีแก้ปัญหาของตนเอง จากนั้นพวกเขาอาจทำเครื่องหมายการส่งของพวกเขาเป็นที่ปลอดภัย
ผู้ชนะของความท้าทายตำรวจจะสั้นที่สุด (ตามรหัสกอล์ฟ ) ส่งตาม recursion ที่ทำเครื่องหมายว่าปลอดภัย
ผู้ชนะการแข่งขันจะเป็นโจรที่แก้ปัญหาได้มากที่สุด
1: จำเป็นต้องเรียกซ้ำในไวยากรณ์เท่านั้น คุณไม่จำเป็นต้องกังวลเกี่ยวกับการเพิ่มประสิทธิภาพการโทรหางเช่น
2: อีกครั้งไม่เรียกซ้ำในไวยากรณ์; ดังนั้นคุณจึงไม่สามารถโพสต์โซลูชันแบบเรียกซ้ำและอ้างสิทธิ์การคอมไพล์ไปยังลูปด้วยการเพิ่มประสิทธิภาพการโทรหาง
ข้อกำหนดในการส่ง
การส่งแต่ละครั้งจะใช้จำนวนเต็มเดียวn
(เป็นศูนย์หรือหนึ่งฐาน) การส่งจะส่งออกหรือส่งคืนn
รายการแรกของชุดตัวเลือกจำนวนเต็ม (โปรดทราบว่าชุดจำนวนเต็มนี้ต้องไม่ขึ้นอยู่กับn
) วิธีการอินพุตและเอาต์พุตอาจแตกต่างกันระหว่างวิธีแบบเรียกซ้ำและแบบไม่เรียกซ้ำ ชุดเลขจำนวนเต็มอาจเป็นชุดแบบกำหนดค่าใด ๆ ที่มีความยาวอย่างน้อย 5 ชุดควรอธิบายอย่างถูกต้อง
การส่งของคุณไม่ได้มีการทำงานโดยพลการขนาดใหญ่แต่ควรจะทำงานอย่างน้อยn
n=5
วิธีที่ไม่ใช่แบบเรียกซ้ำจะต้องสามารถทำงานได้อย่างน้อยเหมือนกับn
วิธีแบบเรียกซ้ำหรือn=2^15-1
อย่างใดอย่างหนึ่งน้อยกว่า
recursion
เพื่อความท้าทายนี้การเรียกซ้ำถูกกำหนดให้เป็นการสร้างลำดับที่ต้องการโดยใช้ฟังก์ชั่น (หรือฟังก์ชั่นเหมือนโครงสร้าง) ที่เรียกตัวเอง (หรือเรียกลำดับของฟังก์ชั่นที่ลงท้ายด้วยการเรียกตัวเอง; ความลึกของการเรียกซ้ำควรไปที่ไม่มีที่n
สิ้นสุด วิธีการแบบไม่เรียกซ้ำคือสิ่งที่ไม่เกิดซ้ำ
n
ไหมว่ารหัสทำงานได้ตามอำเภอใจขนาดใหญ่ถ้ามันถูกต้องตามหลักวิชา แต่มันไม่สามารถทำงานได้เนื่องจากข้อ จำกัด ด้านเวลาหรือหน่วยความจำ?
n=5
ต้องคำนวณ
xfor
จะมีให้ผ่านการนำเข้าบางประเภท?) ดังนั้นภาษานี้อาจไม่สามารถแข่งขันได้
for
ทำโดยเรียกซ้ำเป็นfor
วนซ้ำหรือวนซ้ำ?