ฉันกำลังเดินผ่านแพทช์ฟักทองในวันอื่น ๆ สำหรับงานเลี้ยงวันเกิดและสังเกตเห็นเถาวัลย์ฟักทองทำรูปแบบที่ดีพร้อมกับวน, วน, และหน่อ เรากำลังจะจำลองสิ่งนี้ด้วยศิลปะ ASCII บางส่วน
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
กฎการก่อสร้างเถา
- มีเถาวัลย์หลักเพียงอันเดียวเท่านั้นซึ่งประกอบด้วย
\ / - p q b d
ตัวละครเพียงอย่างเดียว - เถาวัลย์เดินทางจากซ้ายไปขวาผ่านหน้าจอเท่านั้น กล่าวอีกนัยหนึ่งสมมติว่าคุณเป็นมดเริ่มต้นที่ตัวอักษรเถาซ้ายสุด ในขณะที่คุณไปยังตัวละครถัดไปที่อยู่ติดกันบนเถาวัลย์หลักคุณจะต้องย้ายหนึ่งคอลัมน์ไปทางขวา - ไม่ไปทางซ้าย
- เมื่อเถาวัลย์เปลี่ยนทิศทาง
p q b d
ต้องใช้อักขระตัวใดตัวหนึ่งในการจำลองลูปp
ร่วมเถาเดินทางไปทางทิศตะวันออกเฉียงเหนือที่q
สำหรับไปทางทิศตะวันออกเฉียงใต้b
จากทิศตะวันออกไปทางทิศตะวันออกและd
จากตะวันออกไปภาคตะวันออกเฉียงเหนือ โปรดทราบว่า "ห่วง" ของจดหมายเชื่อมต่อกับเถาแนวนอนและ "ลำต้น" ของจดหมายเชื่อมต่อกับเส้นทแยงมุม - จุดเริ่มต้นของเถาต้องเป็นหนึ่งใน
p
หรือb
(ตัวเลือกของคุณไม่จำเป็นต้องสุ่ม) และเริ่มต้นในแนวนอน จุดจบของเถาต้องเป็นหนึ่งq
หรือd
(ตัวเลือกของคุณไม่จำเป็นต้องสุ่ม) และต้องจบในแนวนอน - โปรดทราบว่าสามารถวางลูปได้ทันทีติดกับลูปอื่น ๆ (เช่น
pd
เป็นซับสตริงที่ถูกต้องของเถาวัลย์) แต่นั่นอาจทำให้ยากต่อการวางฟักทองในภายหลัง คุณอาจต้องการมีหนึ่งใน- / \
ทันทีหลังจากวนรอบ (ตามที่ฉันทำในตัวอย่างของฉัน) แต่ก็ไม่จำเป็น
กฎฟักทอง
- ฟักทองประกอบด้วย แต่เพียงผู้เดียวของ
(())
(สตริงที่แน่นอนนี้) - จากเถาวัลย์หลักฟักทองมีหน่อหน่อ หน่อเหล่านี้สามารถยึดติดกับ
p q b d
ลูปได้อย่างเดียว\
หรือ/
ยาวและแนบกับฟักทองดังนั้น "ปลาย" ของหน่อที่อยู่ตรงกลาง - พวกเขาสามารถเชื่อมต่อด้านบนหรือด้านล่างเถาหลัก
- หน่อที่สามารถเชื่อมต่อไปที่ "ซ้าย"
- ฟักทองหนึ่งอันสามารถแนบเอาไว้ที่หน่อแต่ละอันและหน่อหนึ่งอันต่อห่วงเท่านั้น
randomness
- เมื่อเดินทางในแนวนอนเถามีโอกาส 50% ในการดำเนินการต่อในแนวนอนมีโอกาส 25% ที่จะเลี้ยวไปทางทิศตะวันออกเฉียงเหนือและมีโอกาส 25% ในการเลี้ยวไปทางตะวันออกเฉียงใต้
- เมื่อเดินทางในแนวทแยงมุมเถาวัลย์มีโอกาส 90% ที่จะหมุนในแนวนอนและมีโอกาส 10% ที่จะหมุนแนวทแยงมุมต่อไป
- จะต้องมีการเลี้ยวที่เพียงพอเพื่อรองรับจำนวนอินพุตของฟักทองแม้ว่าจะอนุญาตได้มากขึ้น
- เมื่อสร้างเถาวัลย์ฟักทองสามารถวางแบบสุ่มที่มุมใด ๆ ที่ไม่ได้ครอบครองโดยฟักทอง
- ฟักทองไม่สามารถทับซ้อนเถาหรือฟักทองอื่น ๆ
ความท้าทาย
รับหมายเลขอินพุตส่งเอาต์พุตแพตช์ฟักทองแบบสุ่มโดยปฏิบัติตามกฎข้างต้น การรันโค้ดหลายครั้งด้วยอินพุตเดียวกันควรให้ผลลัพธ์ที่ต่างกัน แพทช์ฟักทองที่เป็นไปได้ทั้งหมดสำหรับหมายเลขอินพุตที่กำหนดควรมีโอกาส (ไม่จำเป็นต้องเท่ากัน) ที่ไม่เป็นศูนย์ซึ่งเกิดขึ้น
อินพุต
จำนวนเต็มเดียวn
แทนจำนวนฟักทองในแพทช์ในรูปแบบที่สะดวกใด ๆ 0 < n < 256
เพื่อความกระชับของรหัสที่คุณสามารถสันนิษฐานได้เข้าเป็น
เอาท์พุต
แพทช์ฟักทองที่เกิดขึ้นพิมพ์ / แสดงไปที่หน้าจอหรือส่งคืนเป็นสตริง / string-array / etc
กฎระเบียบ
- นี่คือโค้ดกอล์ฟเพื่อให้ใช้กฎตามปกติสำหรับการเล่นกอล์ฟและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ
- ใช้คำจำกัดความมาตรฐานของ "สุ่ม"
- ยอมรับทั้งโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ
- ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
- ช่องว่างชั้นนำและต่อท้าย / ขึ้นบรรทัดใหม่เป็นทางเลือกที่สมบูรณ์แบบ
ตัวอย่าง
สำหรับการป้อนข้อมูลn = 3
ต่อไปนี้เป็นตัวอย่างที่ถูกต้องของแพทช์ฟักทองตามกฎข้างต้น (คั่นด้วยบรรทัดว่างใหม่)
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
(()) (())
\ /
b-q (())
\ /
b-q
p-----------------------q (())
/ \ /
(()) b-q
/
(())
นี่คือตัวอย่างบางส่วนไม่ถูกต้องสำหรับการป้อนข้อมูลพร้อมคำอธิบายn = 3
#
(()) (())
/ /
p---q----q
\
(())
# The vine continued horizontally after a loop was placed.
(()(())
\ /
p---q
\
(())
# The pumpkins are both overlapping and sprouting from the same loop.
p----------------q
\ \ \
(()) (()) (())
# The pumpkin is attached to the middle of the vine, not at a loop.