dc , 46 ไบต์
[[{}]]sx256?^dd3^8d^1-/8092541**r255/BF*+d0=xP
ลองออนไลน์!
อินพุตบน stdin, เอาต์พุตบน stdout
สิ่งนี้ทำงานได้โดยการคำนวณสูตรสำหรับผลลัพธ์ที่ต้องการเป็นตัวเลขฐาน 256 คำสั่ง P ใน dc จะถูกใช้เพื่อพิมพ์หมายเลขฐาน 256 เป็นสตริง
คำอธิบายเพิ่มเติม:
ให้ n เป็นอินพุต n โปรแกรม dc คำนวณผลรวมของ
A = floor (256 ^ n / 255) * 125 (BF ถูกตีความโดย dc เป็น 11 * 10 + 15 = 125)
และ
B = พื้น ((256 ^ n) ^ 3 / (8 ^ 8-1)) * 8092541 * (256 ^ n)
สำหรับ:
สังเกตว่า 1 + 256 + 256 ^ 2 + ... + 256 ^ (n-1) เท่ากับ (256 ^ n-1) / 255 โดยสูตรสำหรับความก้าวหน้าทางเรขาคณิตและเท่ากับชั้น (256 ^ n / 255 ) นี่คือจำนวนที่ประกอบด้วย n 1 ในฐาน 256
เมื่อคุณคูณด้วย 125 เพื่อรับ A ผลลัพธ์คือตัวเลขที่ประกอบด้วย n 125's ในฐาน 256 (125 เป็นตัวเลขหลักเดียวในฐาน 256 ของหลักสูตร) มันอาจจะดีกว่าถ้าเขียนตัวเลขในฐาน 256 เป็นเลขฐานสิบหก 125 คือ hex 7D ดังนั้น A คือตัวเลขฐาน 256 ซึ่งประกอบด้วย n 7D ในหนึ่งแถว
B คล้ายกัน:
เวลานี้สังเกตว่า 1 + 16777216 + 16777216 ^ 2 + ... + 16777216 ^ (n-1) เท่ากับ (16777216 ^ n - 1) / 16777215 และชั้นนี้เท่ากับ (16777216 ^ n / 16777215)
ทีนี้, 256 ^ 3 = 16777216, และ 8 ^ 8-1 = 16777215, นี่คือสิ่งที่เรากำลังคำนวณว่าเป็นพื้น ((256 ^ n) ^ 3 / (8 ^ 8-1))
จากการแสดงชุดรูปทรงเรขาคณิตตัวเลขนี้ในฐาน 256 คือ 100100100 ... 1001 โดยมี n ของตัวเลขเป็น 1 และส่วนที่เหลือเป็น 0
สิ่งนี้จะถูกคูณด้วย 8092541 ซึ่งเป็น 7B7B7D เป็นเลขฐานสิบหก ในฐาน 256 นี่คือตัวเลขสามหลักซึ่งประกอบด้วยตัวเลข 7B, 7B และ 7D (เขียนตัวเลขเหล่านั้นเป็นเลขฐานสิบหกเพื่อความสะดวก)
ตามด้วยผลิตภัณฑ์ที่เขียนในฐาน 256 เป็นหมายเลข 3n ซึ่งประกอบด้วย 3 หลัก 7B 7B 7D ซ้ำ n ครั้ง
สิ่งนี้จะถูกคูณด้วย 256 ^ n ทำให้ตัวเลข 4n- หลัก -254 ประกอบด้วย 3 หลัก 7B 7B 7D ซ้ำ n ครั้งตามด้วย n's 0 นั่นคือ B.
ตอนนี้การเพิ่ม A + B จะทำให้จำนวนฐาน 256 หลัก 4n ประกอบด้วย 3 หลัก 7B 7B 7D ทำซ้ำ n ครั้งตามด้วย n 7D's เนื่องจาก 7B และ 7D เป็นรหัส ASCII สำหรับ{
และ}
ตามลำดับนี่คือสตริงที่ประกอบด้วย n สำเนาของ{{}
ตามด้วย n สำเนาของ}
ซึ่งเป็นสิ่งที่เราต้องการสำหรับ n> 0 คำสั่ง P ใน dc พิมพ์จำนวนฐาน 256 เป็นสตริงเช่นเดียวกับที่เราต้องการ
น่าเสียดายที่ n = 0 จะต้องได้รับการปฏิบัติเป็นกรณีพิเศษ การคำนวณข้างต้นเกิดขึ้นเพื่อให้ผลลัพธ์เป็น 0 สำหรับ n = 0; ในกรณีนั้นฉันพิมพ์รหัสสตริง{}
ได้ยาก