วันนี้เราจะคำนวณฟังก์ชันไบนารีที่มีประสิทธิภาพที่สุด โดยเฉพาะอย่างยิ่งเราจะคำนวณฟังก์ชันซึ่งเมื่อนิพจน์ถูกสร้างขึ้นจากการใช้ฟังก์ชันกับอินพุตคงที่ 0 หรือเอาท์พุทของตัวเองสามารถแสดงจำนวนเต็มบวกทั้งหมดด้วยนิพจน์ที่สั้นที่สุดที่เป็นไปได้วางลำดับความสำคัญสูงกว่า
ฟังก์ชั่นนี้สร้างขึ้นดังนี้
สำหรับแต่ละจำนวนเต็มเริ่มต้นที่ 1 และขึ้นไปเลือกนิพจน์ที่สั้นที่สุดซึ่งเรายังไม่ได้กำหนดเอาท์พุทและทำให้จำนวนเต็มนั้นเป็นเอาท์พุทของนิพจน์นั้น ความสัมพันธ์ในความยาวของการแสดงออกจะถูกทำลายโดยอาร์กิวเมนต์ซ้ายที่เล็กกว่าและจากนั้นด้วยอาร์กิวเมนต์ที่เล็กลง นี่คือวิธีการทำงาน:
เริ่มแรกมีการมอบหมาย 1 รายการ นิพจน์ที่ไม่ได้กำหนดที่สั้นที่สุดคือ
f(0, 0)
ดังนั้นเราจะตั้งค่าเป็น 1ตอนนี้ 2 ยังไม่ได้กำหนด ที่สั้นที่สุดการแสดงออกที่ไม่ได้กำหนดเป็น
f(f(0, 0), 0)
=f(1, 0)
และ=f(0, f(0, 0))
ความสัมพันธ์จะถูกแบ่งไปทางซ้ายอาร์กิวเมนต์ที่มีขนาดเล็กดังนั้นf(0, 1)
f(0, 1) = 2
การแสดงออกที่ไม่ได้กำหนดที่สั้นที่สุดที่เหลือ
f(f(0, 0), 0)
= ดังนั้นf(1, 0)
f(1, 0) = 3
ตอนนี้เราไม่ได้แสดงออกเพียง 2
f
วินาทีและ 30
วินาทีดังนั้นเราจะต้องเพิ่มอีกหนึ่งรายการ ทำลายความสัมพันธ์โดยอาร์กิวเมนต์ซ้ายแล้วโต้แย้งสิทธิที่เราจะได้รับตั้งแต่f(0, 2) = 4
f(0, f(0, f(0, 0))) = f(0, f(0, 1)) = f(0, 2)
อย่างต่อเนื่องเรามี
f(0, 3) = 5
,f(1, 1) = 6
,f(2, 0) = 7
,f(3, 0) = 8
,f(0, 4) = 9
...
นี่คือตารางที่ฉันกรอกสำหรับค่าแรก ๆ :
0 1 2 3 4 5 6 7 8
/---------------------------
0| 1 2 4 5 9 10 11 12 13
1| 3 6 14 15 37 38 39 40 41
2| 7 16 42 43
3| 8 17 44 45
4| 18 46
5| 19 47
6| 20 48
7| 21 49
8| 22 50
อีกวิธีในการดูคือแต่ละเอาต์พุตมีขนาดเท่ากับผลรวมของขนาดของอินพุตบวกหนึ่ง ตารางจะถูกเติมตามลำดับของการเพิ่มขนาดของเอาต์พุตความสัมพันธ์ที่ขาดโดยการย่อขนาดอินพุตซ้ายแล้วป้อนอินพุตให้ถูกต้อง
ความท้าทายของคุณคือให้ป้อนจำนวนเต็มไม่เป็นลบสองตัวเป็นอินพุตคำนวณและส่งออกค่าของฟังก์ชันนี้ นี่คือรหัสกอล์ฟ ทางออกที่สั้นที่สุดเป็นไบต์ชนะ ช่องโหว่มาตรฐานถูกแบน
((0, (0, (0, 0))), 0)
มีขนาดเล็กกว่าพจนานุกรม(((0, 0), 0), (0, 0))
แต่หลังมีขนาดเล็กกว่าด้านซ้ายมือ