ในการท้าทายครั้งก่อนของฉันฉันวาดไดอะแกรมแรกด้วยมือเป็นส่วนใหญ่ (ด้วยความช่วยเหลือของโหมดบล็อกที่มองเห็นเป็นกลุ่ม) แต่แน่นอนว่าต้องมีวิธีที่ดีกว่า ...
รับอินพุตสองมิติความกว้างและความสูงส่งออกตารางหกเหลี่ยมกับมิติเหล่านั้นในงานศิลปะ ASCII
นี่คือแผนภาพที่อ้างอิงในบทนำ (ด้วยการแก้ไขเล็กน้อย) ซึ่งควรเป็นผลลัพธ์ของคุณสำหรับอินพุตwidth=7, height=3
:
_____ _____ _____
/ \ / \ / \
_____/ -2,-1 \_____/ 0,-1 \_____/ 2,-1 \_____
/ \ / \ / \ / \
/ -3,-1 \_____/ -1,-1 \_____/ 1,-1 \_____/ 3,-1 \
\ / \ / \ / \ /
\_____/ -2,0 \_____/ 0,0 \_____/ 2,0 \_____/
/ \ / \ / \ / \
/ -3,0 \_____/ -1,0 \_____/ 1,0 \_____/ 3,0 \
\ / \ / \ / \ /
\_____/ -2,1 \_____/ 0,1 \_____/ 2,1 \_____/
/ \ / \ / \ / \
/ -3,1 \_____/ -1,1 \_____/ 1,1 \_____/ 3,1 \
\ / \ / \ / \ /
\_____/ \_____/ \_____/ \_____/
สังเกตเห็นหลายสิ่ง:
ความกว้างและความสูงนั้นเทียบเท่ากับจำนวนหกเหลี่ยมที่มีสำหรับพิกัด y และ x ตามลำดับ เหล่านี้จะมักจะเป็นเลขคี่
รูปหกเหลี่ยมแต่ละรูปแสดงด้วยศิลปะ ASCII
_____ / \ / \ \ / \_____/
แต่เส้นขอบจะ "แชร์" ระหว่างรูปหกเหลี่ยมที่อยู่ใกล้เคียง
เครื่องหมายจุลภาคในพิกัดมักจะเป็นอักขระสองตัวที่อยู่ด้านล่างตรงกลางของขอบด้านบนเสมอ พิกัด x นั้นจะถูกวางตำแหน่งตรงหน้าเครื่องหมายจุลภาคและพิกัด y โดยตรงหลังจากนั้น
คุณอาจยืนยันว่าพิกัดจะไม่ใหญ่เกินไปเช่นที่พวกเขาจะทับขอบของรูปหกเหลี่ยม
อินพุตอาจถูกใช้เป็นสตริง whitespace- / คั่นด้วยเครื่องหมายจุลภาคอาร์เรย์ของจำนวนเต็มหรืออาร์กิวเมนต์สองฟังก์ชัน / commandline เอาต์พุตต้องเป็นสตริงเดี่ยว (ถึง STDOUT เป็นค่าส่งคืนและอื่น ๆ )
เนื่องจากนี่คือcode-golfรหัสที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ
ตารางด้านบนสามารถใช้เป็นกรณีทดสอบได้ width=199, height=199
กริดขนาดสูงสุด
เห็นได้ชัดว่าไม่สามารถรวมได้ที่นี่ แต่แถวและคอลัมน์แรก ๆ ควรมีลักษณะดังต่อไปนี้:
_____ ___
/ \ /
_____/-98,-99\_____/-96,
/ \ / \
/-99,-99\_____/-97,-99\___
\ / \ /
\_____/-98,-98\_____/-96,
/ \ / \
/-99,-98\_____/-97,-98\___
\ / \ /
\_____/-98,-97\_____/-96,
/ \ / \
/-99,-97\_____/-97,-97\___
\ / \ /