สนุกมาก! อย่างไรก็ตามด้วยตัวเลขสามหลักความสนุกก็จบลงเร็วเกินไป ความท้าทายนี้คล้ายกัน แต่เราจะดำเนินต่อไปอย่างสนุกสนาน
ความท้าทาย
พิมพ์ตัวเลขทองคำอัตราส่วน φให้ได้มากที่สุด อัตราส่วนทองคำถูกกำหนดให้เป็นตัวเลขที่ตอบสนองφ = (φ + 1) / φและให้ 100 หลักแรกโดย:
1,6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...
ความท้าทายนี้ไม่ได้เกี่ยวกับการคำนวณφ! มันเกี่ยวกับการพิมพ์ตัวเลขให้ได้มากที่สุดโดยไม่ต้องใช้วิธีการใด ๆ ในการทำสองครั้ง ดังนั้นหาวิธีที่สร้างสรรค์เพื่อรับตัวเลขของคุณมากที่สุด!
ข้อ จำกัด
ด้วยตัวเองการพิมพ์ตัวเลขของφอาจจะง่ายเกินไปดังนั้นนี่คือกฎ:
- คุณต้องสร้างตัวเลขตามลำดับจากซ้ายไปขวาไม่ว่าจะเป็นการพิมพ์ทีละชิ้นหรือโดยการสร้างสตริงจากซ้ายไปขวาและพิมพ์ในตอนท้าย - คุณสามารถสร้างอาเรย์ของตัวละครหลักแล้วเข้าร่วมและ พิมพ์มันตราบใดที่คุณทำตามลำดับ ในกฎต่อไปนี้ "print" และ "output" อาจอ้างถึงกระบวนการใด ๆ เหล่านั้น (เช่นหากคุณกำลังสร้างสตริงและสตริง
1.6
นั้นมีจำนวนที่นับว่า1.6
พิมพ์แล้ว) - สำหรับรหัสของคุณคุณจะได้รับงบประมาณจำนวน15 ตัวอักษรต่อหลัก ระยะเวลาไม่นับรวมกับงบประมาณนั้น แต่จะต้องพิมพ์เช่นกัน โปรดทราบว่าข้อ จำกัด นั้นมีเพียงขนาดรหัสทั้งหมด: คุณสามารถใช้ตัวเลขได้มากกว่า 15 ตัวสำหรับตัวเลขใดก็ได้ตราบใดที่คุณไม่ได้ใช้โดยเฉลี่ยมากขึ้น ในความเป็นจริงคุณอาจสร้าง "หนี้สิน" เป็นตัวอักษรและ "ชำระคืน" ในภายหลัง เช่นการพิมพ์
1.618
คุณมี60ตัวอักษร - การรวม / นำเข้าไลบรารีมาตรฐานไม่นับรวมกับขนาดรหัส แต่คุณไม่สามารถให้ชื่อแทนชวเลขได้ฟรี!
- คุณต้องไม่ใช้ตัวเลขที่คุณกำลังสร้างอยู่หรือสิ่งใดก็ตามที่คุณพิมพ์ไปแล้ว เช่น
1
อาจปรากฏอยู่ในที่ใดก็ได้ในซอร์สโค้ดของคุณเนื่องจากเป็นเลขตัวแรก รหัสที่ออกผลลัพธ์เป็น8
ใน1.618
อาจจะใช้ใดหรือทั้งหมดของตัวเลขแต่ไม่มี[0234579]
[168]
เพื่อจุดประสงค์นี้ตัวอักษรทั้งหมดที่เทียบเท่ากับตัวเลขหนึ่งหลักจะถือว่าเป็นตัวเลขนั้น ดังนั้นหากภาษาของคุณสามารถแทนได้9
เนื่องจาก'\t'
คุณไม่ได้รับอนุญาตให้ใช้สิ่งนั้นทุกที่ที่คุณไม่สามารถใช้9
แทนได้ - คุณต้องไม่สร้างตัวเลขหลายหลักพร้อมกัน มันควรจะเป็นไปได้ที่จะแยกรหัสของคุณออกเป็นชิ้น ๆ อย่างชัดเจน
คุณต้องไม่อ้างถึงฟังก์ชันในตัวตัวดำเนินการทางคณิตศาสตร์ / บูลีน / บิต - ฉลาด / สตริงตัวแปรหรือค่าคงที่ซึ่งคุณใช้ในรหัสที่สร้างตัวเลขก่อนหน้านี้ ข้อยกเว้นคือการแปลงจำนวนเต็มเป็นสตริงฟังก์ชันเชื่อมต่อสตริงและฟังก์ชันการพิมพ์ซึ่งคุณอาจต้องใช้กับทุกหลักเดียว โปรดทราบว่าไม่สำคัญว่าชื่อใดที่คุณอ้างถึงในตัว: เพียงเพราะคุณใช้นามแฝงในตัว
PI
ทั้งสองp
และq
ไม่ได้หมายความว่าคุณจะต้องใช้งานp
ครั้งq
เดียว เช่นเดียวกันคุณจะได้รับอนุญาตให้ใช้ชื่อสองครั้งถ้ามันหมายถึงแตกต่างกันสองตัว -ins เช่นสตริงและอาเรย์length
length
หากภาษาการเขียนโปรแกรมของคุณไม่มีฟังก์ชั่นให้ใช้วิจารณญาณที่ดีที่สุดของคุณในสิ่งที่เทียบเท่า - สำหรับการใช้สคริปต์ทุบตีการเรียกใช้โปรแกรมอื่นควรทำตามกฎที่กำหนดไว้ในฟังก์ชั่น
- การส่งของคุณจะต้องเขียนในภาษาเดียว ดังนั้นไม่ต้องดำเนินการล่ามของภาษาอื่นเพื่อให้สามารถเข้าถึงบิวด์อินของภาษานั้นได้เช่นกัน
ผลกระทบ
ประเด็นต่อไปนี้ล้วนเป็นนัยโดยกฎข้างต้น แต่ฉันเพิ่มไว้ที่นี่เพื่อหลีกเลี่ยงคำถามที่มีมาในกล่องทราย ::
- คุณไม่ได้รับอนุญาตให้เขียนทับส่วนต่าง ๆ ของผลลัพธ์โดยพิมพ์ backspaces (ปกติ
'\b'
) ระหว่างนั้น - ลูปที่สร้าง / ส่งออกหลายหลักเป็นสิ่งต้องห้าม (ลูปที่คำนวณตัวเลขหลักเดียวนั้นใช้ได้)
(1 + √5)/2
ห้ามใช้เวอร์ชั่นที่ซับซ้อนหรือแบ่งตัวเลขฟีโบนักชีเพื่อให้ได้ตัวเลขมากกว่าหนึ่งหลัก- คุณไม่สามารถคำนวณล่วงหน้า 10 หลักและเก็บไว้ใน 10 ตัวแปรแล้วเพียงอ้างถึงเพราะการอ้างอิงตัวแปรเหล่านั้นไม่ได้สร้างตัวเลข - รหัสที่เติมตัวแปรทำดังนั้นนี่เป็นการละเมิดกฎ 6
- ในความเป็นจริงคุณจะไม่สามารถนำมาใช้ใหม่ (ผลหรือกลาง) ก่อน ๆ เพราะนั่นจะหมายถึงตัวเลขสองหลักจะแบ่งสำหรับที่ถูกสร้างขึ้น
- มิฉะนั้นคุณสามารถใช้วิธีการใด ๆ (ซึ่งไม่จำเป็นต้องใช้คณิตศาสตร์อย่างเดียว) เพื่อสร้างตัวเลข (และคุณควรจะ!)
- ในความเป็นจริงไม่จำเป็นต้องคำนวณอะไรเลยถ้าคุณสามารถดึงตัวเลขที่ถูกต้องจากหลาย ๆ ที่โดยใช้ห้องสมุดมาตรฐานของคุณ
- คุณอาจใช้โอเปอเรเตอร์หลายครั้งในขณะที่สร้างตัวเลขหลักเดียวดังนั้นจึง
2+2+2
เป็นเกมที่ยุติธรรมที่จะสร้างตัวแรก6
(แม้ว่าจะไม่น่าจะสั้นที่สุด) - คุณสามารถใช้ตัวอักษรใด ๆ ได้บ่อยเท่าที่คุณต้องการเพราะมันไม่ได้เป็นค่าคงที่ในตัว ดังนั้นตราบใดที่คุณไม่จำเป็นต้องพิมพ์
5
คุณสามารถ5
ใส่รหัสลงไปได้มากเท่าที่คุณต้องการ - คุณไม่สามารถฮาร์โค้ดเอาท์พุทได้เนื่องจากจะเกี่ยวข้องกับการใช้ตัวเลขที่คุณกำลังส่งออก
กล่าวโดยย่อ: อย่าใช้วิธีใด ๆ ในการสร้างตัวเลขสองครั้งและไม่ใช้ตัวเลขที่คุณส่งออกในปัจจุบันหรือมีการพิมพ์ออกมาแล้ว
หากคุณมองเห็นช่องโหว่ที่ทำให้คุณได้รับคะแนนอนันต์ (เสมือนจริง) โปรดอย่าทำลายความท้าทายด้วยการใช้ประโยชน์จากมัน แต่แจ้งให้เราทราบเพื่อที่ฉันจะได้เห็นว่าช่องโหว่นั้นสามารถแก้ไขได้หรือไม่
เกณฑ์การให้คะแนน
โปรแกรมที่พิมพ์จำนวนตัวเลขสูงสุดได้อย่างถูกต้องชนะ ในกรณีที่มีการผูกรหัสที่สั้นกว่าแบ่งการผูก
โปรดเพิ่มรุ่นที่มีการคอมเม้นต์ที่ระบุว่าส่วนใดของรหัสของคุณที่สร้างตัวเลข
x = (x+1)/x
(หรือx^2 = x+1
) (หรือx^2-x+1
)