ตัวอย่างคลาสสิกที่จะแนะนำคนกับแนวคิดของการกระจายความน่าจะเป็นที่ไม่ต่อเนื่องเป็นเครื่องถั่ว เครื่องนี้มีลูกหินจำนวนมากตกลงมาจากทางเดินแคบ ๆ ที่ด้านบนหลังจากนั้นพวกเขาก็ตีพินอินเทอร์เลซเป็นแถวซึ่งในแต่ละครั้งที่หินอ่อนพุ่งชนมันอาจตกไปทางซ้ายหรือทางขวาของพิน ในที่สุดหมุดจะถูกรวบรวมในถังขยะแนวตั้งที่ด้านล่างของเครื่อง แผนภาพง่าย ๆ ของเครื่องนี้มีลักษณะดังนี้:
| O |
| ^ |
| ^ ^ |
| ^ ^ ^ |
| ^ ^ ^ ^ |
| ^ ^ ^ ^ ^ |
|_|_|_|_|_|_|
ในแผนภาพนี้O
หมายถึงตำแหน่งที่หินอ่อนตกลงมา แต่ละอัน^
คือพินที่หินอ่อนมีโอกาส 50% ที่จะย้ายไปที่จตุรัสไม่ว่าจะทางซ้ายหรือทางขวาของพิน จากนั้นหินอ่อนจะรวมตัวกันที่ถังขยะที่ด้านล่างของอุปกรณ์และสำหรับหินอ่อนจำนวนมากพอความสูงของกองหินอ่อนในถังขยะจะมีลักษณะคล้ายกับการแจกแจงแบบทวินาม
ท้าทาย
สำหรับความท้าทายนี้คุณจะคำนวณการกระจายความน่าจะเป็นที่ได้รับของเครื่องทำถั่วตามแผนภาพดังกล่าวข้างต้น ไดอะแกรมถูกตีความว่าเป็น 'โปรแกรม' สองมิติที่หินอ่อนผ่านไปไม่ว่าจะทางด้านข้างหรือด้านล่างของเขตข้อมูลปัจจุบัน เมื่อลูกหินมาถึงด้านล่างของเครื่องพวกเขาจะถูกนับสำหรับการแจกแจงความน่าจะเป็น เพื่อให้มันน่าสนใจไดอะแกรมเหล่านี้จะมีฟิลด์เพิ่มเติมอีกสองสามรายการมากกว่าเพียงแค่แหล่งข้อมูลและพินที่เรียบง่าย แผนภาพตัวอย่างคือ:
| O |
| ^ |
| ^ / |
| ^ | ^ |
| <^- = v |
| ^ ^ ^ ^ ^ |
ยิ่งไปกว่านั้นหินอ่อนในขณะนี้มีทิศทางการหมุน ทิศทางนี้ถูกกำหนดโดยบางฟิลด์และกำหนดว่าฟิลด์ใดที่หินอ่อนจะย้ายในฟิลด์อื่น ๆ
มีการกำหนดฟิลด์ต่อไปนี้:
O
: ที่มา วางไข่หินอ่อนด้านล่างโดยตรง ทิศทางของหินอ่อนเหล่านี้คือ 50% ที่เหลือ, 50% ที่ถูกต้อง แหล่งที่มาแต่ละแห่งสร้างหินอ่อนจำนวนเท่ากันU
: อ่างล้างจาน หินอ่อนใด ๆ ที่เข้าสู่ฟิลด์นี้จะถูกลบออกจากเครื่องถั่ว: พื้นที่ว่าง. หากหินอ่อนมาถึงที่นี่มันจะย้ายไปที่สนามด้านล่าง
-
: ชั้น หากหินอ่อนมาถึงที่สนามนี้มันจะย้ายไปที่สนามด้านซ้ายหรือด้านขวาโดยขึ้นอยู่กับทิศทางปัจจุบัน^
: ตัวแยก หากหินอ่อนมาถึงที่สนามนี้จะมี 50% ของการเคลื่อนที่ไปที่สนามทางด้านขวาหรือด้านซ้ายของตัวแยก นอกจากนี้ยังกำหนดทิศทางของหินอ่อนv
: เข้าร่วม หากหินอ่อนมาถึงที่นี่มันจะย้ายไปที่สนามด้านล่าง/
: แผ่นเอียง หากหินอ่อนมาถึงที่สนามนี้มันจะย้ายไปที่สนามทางด้านซ้ายของแผ่นโดยกำหนดทิศทางของหินอ่อน\
: เหมือนกับก่อนหน้า แต่ไปทางขวา|
: ตัวสะท้อนแสง หากหินอ่อนมาถึงที่สนามนี้ก็จะกลับทิศทางของหินอ่อนและย้ายหินอ่อนไปที่สนามไปทางขวาหรือซ้ายตามทิศทางที่ตรงกันข้ามนี้=
: ปืนใหญ่ หากหินอ่อนมาถึงที่สนามนี้ก็จะย้ายไปทางขวาหรือทางซ้ายในทิศทางที่ปัจจุบันจนกระทั่งหินอ่อนพบข้อมูลที่ไม่ได้เป็น, หรือ
-
O
<
: เหมือนกับก่อนหน้า แต่จะกำหนดทิศทางและเลื่อนไปทางซ้ายเสมอ>
: เหมือนกับก่อนหน้า แต่ไปทางขวา
รับประกันดังต่อไปนี้จะได้รับเกี่ยวกับแผนภาพ
- แต่ละแถวอินพุตจะมีความยาวเท่ากันในฟิลด์
|
สนามซ้ายสุดและขวาสุดของแต่ละแถวจะเป็น- แผนภาพจะไม่ประกอบด้วยเส้นทางที่เป็นไปได้ใด ๆ ผ่านที่หินอ่อนจะได้รับการติดอยู่ในเครื่องสำหรับจำนวนเงินที่ไม่แน่นอนของการทำซ้ำเช่นหรือ
\/
^^
- แผนภาพจะมีฟิลด์ที่กล่าวถึงข้างต้นเท่านั้น
- มีอย่างน้อยหนึ่งแหล่ง
ผล
งานของคุณคือการสร้างกราฟแท่ง ASCII สูง 16 บรรทัดของการแจกแจงความน่าจะเป็นซึ่งหินอ่อนออกจากด้านล่างของกราฟปรับสัดส่วนเพื่อให้ความน่าจะเป็นที่ใหญ่ที่สุดครอบคลุมทั้ง 16 ตัวอักษร ดังนั้นสำหรับปัญหาต่อไปนี้:
| O |
| ^ |
| ^ ^ |
| ^ ^ ^ |
| ^ ^ ^ ^ |
| ^ ^ ^ ^ ^ |
โปรแกรมของคุณควรสร้างโซลูชันต่อไปนี้ (โปรดทราบว่าควรมีความกว้างเท่ากับโปรแกรมอินพุตรวมถึงท่อไปทางด้านข้าง:
# #
# #
# #
# #
# #
# #
# #
# #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # # # #
# # # # # #
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างที่ควรทดสอบการทำงานของฟิลด์ประเภทต่าง ๆ :
| O O |
| O ^ / <^\\\ |
| ^ > ^ |
| ^ ^ ^ =|
| ^ ^ | ^ <^ O |
| ^ > ^ | ^ O ^> v |
|| ^U ^ | = ^\ |
| ^ ^ ^ ^U ^\ ---^ |
| = ^ ^ = v |
มันควรส่งผลให้ผลลัพธ์ต่อไปนี้:
#
#
#
#
# #
# #
# #
# # # #
# # # #
# # # #
# # # #
## # # #
## # # # #
# ### # # # #
# # ### # # # #
# # ### # # # #
กฎระเบียบ
ทั้งฟังก์ชั่นและโปรแกรมเต็มรูปแบบเป็นคำตอบที่ถูกต้องสำหรับความท้าทายนี้ คุณจะได้รับแผนภาพเป็นสตริงที่คั่นด้วยการขึ้นบรรทัดใหม่และคุณควรส่งคืนกราฟเอาต์พุตในรูปแบบที่กำหนด ใช้กฎอินพุต / เอาต์พุตเริ่มต้น ในขณะที่การขึ้นบรรทัดใหม่และนำขึ้นบรรทัดใหม่ได้รับอนุญาตในเอาต์พุตแต่ละแถวควรมีความกว้างเท่ากับอินพุต
ในการอนุญาตโซลูชันที่สร้างสรรค์มากขึ้นโปรแกรมของคุณจำเป็นต้องให้ผลลัพธ์ที่ถูกต้องมากกว่า 90% ของเวลาสำหรับไดอะแกรมเดียวกัน มันเป็นการจำลองความน่าจะเป็นหลังจากทั้งหมด
เกณฑ์การให้คะแนน
นี่คือโค้ดกอล์ฟดังนั้นคะแนนต่ำสุดเป็นไบต์ชนะ
v
= [space]
?
v
และ[space]
แตกต่างกันว่าปืนโต้ตอบกันอย่างไร