พื้นหลัง
แหล่งที่มาหนึ่งของความสนุกในเกมเล่นตามบทบาทบนโต๊ะคือการรับมือกับการทอยลูกเต๋า การร่ายคาถา Disintegration นั้นอาจจะเกิดขึ้นทันที แต่การกลิ้งและการรวมเข้าด้วยกัน 40 ลูกเต๋าไม่ใช่อย่างแน่นอน!
จำนวนของข้อเสนอแนะสำหรับการจัดการนี้จะมีการหารือในที่ rpg.stackexchange.com อย่างไรก็ตามบางส่วนของพวกเขาเช่นการใช้โปรแกรมโรลเลอร์หรือลูกเต๋าเฉลี่ยทำให้ความสนุกและความรู้สึกควบคุมได้จากผู้เล่น อื่น ๆ เช่นการทอยลูกเต๋า 4 ลูกและการคูณทั้งหมด 10 ทำให้ได้ผลลัพธ์ที่แกว่งไปมามากขึ้น (ในขณะที่การเฉลี่ยลูกเต๋ากระทำในทิศทางตรงกันข้าม)
คำถามนี้เกี่ยวข้องกับวิธีการลดจำนวนการทอยลูกเต๋าโดยไม่เปลี่ยนผลลัพธ์เฉลี่ย (หมายถึง) หรือความผันผวน (ความแปรปรวน)
โน้ตและคณิตศาสตร์
ในคำถามนี้เราจะใช้สัญลักษณ์ต่อไปนี้เพื่อเป็นตัวแทนของลูกเต๋า:
- n d k (เช่น 40d6) หมายถึงผลรวมของ n ม้วนของ k-sided die
- n d k * c (เช่น 4d6 * 10) อธิบายการคูณผลลัพธ์ด้วยค่าคงที่ c
- นอกจากนี้เรายังสามารถเพิ่มม้วน (เช่น 4d6 * 10 + 40d6) และค่าคงที่ (เช่น 4d6 + 10)
สำหรับม้วนกระดาษเดียวเราสามารถแสดงได้ว่า:
- ค่าเฉลี่ย : E [1d k ] = (k + 1) / 2
- ความแปรปรวน : Var (1d k ) = (k-1) (k + 1) / 12
การใช้คุณสมบัติพื้นฐานของค่าเฉลี่ยและความแปรปรวนเราสามารถอนุมานได้ว่า:
- หมายถึง : E [ m d k * a + n d l * b + c ] = am. E [1d k ] + bn . [1d l ] + c
- ความแปรปรวน : Var ( m d k * a + n d l * b + c ] = a ². m.วาร์ (1d k ) + b ². n .Var (1d l )
งาน
ด้วยจำนวนเต็มสามจำนวนn , kและrโปรแกรมของคุณควรแสดงผลลัพธ์ประมาณn d kในค่าr rillsส่วนใหญ่โดยมีข้อ จำกัด ดังต่อไปนี้:
- การแก้ปัญหาควรมีเหมือนกันค่าเฉลี่ยและความแปรปรวนเป็นn d k
- การแก้ปัญหาควรมีจำนวนม้วนที่ใหญ่ที่สุดที่เป็นไปได้น้อยกว่าหรือเท่ากับrเนื่องจากม้วนจำนวนมากจะให้การกระจายที่ราบรื่นยิ่งขึ้น
- คุณควร จำกัด วิธีการแก้ปัญหาเฉพาะการใช้ลูกเต๋าแบบk-ด้านเว้นแต่คุณจะตั้งเป้ารับโบนัส (ดูด้านล่าง)
- หากไม่มีวิธีแก้ปัญหา (เนื่องจากrมีขนาดเล็กเกินไป) โปรแกรมควรส่งออกสตริง "ฉันเป็นพระเจ้าแห่งการต่อสู้อย่างเซ็กซี่!"
- พารามิเตอร์ถูกส่งเป็นสตริงที่คั่นด้วยช่องว่างเดียว
- คุณอาจคิดว่า 1 ≤ n ≤ 100, 1 ≤ r ≤ nและkนั้นเป็นหนึ่งใน 4, 6, 8, 10, 12 และ 20 (ลูกเต๋ามาตรฐานที่ใช้ใน tabletops)
- เอาต์พุตควรอยู่ในรูปแบบที่อธิบายไว้ในสัญกรณ์ (เช่น 4d6 * 10 + 5) โดยมีช่องว่างเพิ่มเติมรอบ + s แต่ไม่มีที่อื่น ตัวคูณหน่วยก็เป็นทางเลือกเช่นกัน: ทั้ง 4d6 * 1 และ 4d6 นั้นถูกต้อง
คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นรับอินพุตผ่าน STDIN (หรือทางเลือกที่ใกล้เคียงที่สุด) อาร์กิวเมนต์บรรทัดคำสั่งหรืออาร์กิวเมนต์ฟังก์ชัน ควรพิมพ์ผลลัพธ์ไปที่ STDOUT (หรือตัวเลือกที่ใกล้เคียงที่สุด) หรือส่งคืนเป็นสตริง
ตัวอย่าง
>> "10 6 10"
10d6
>> "10 6 4"
2d6*2+2d6+14
>> "10 6 3"
1d6*3+1d6+21
>> "10 6 2"
1d6*3+1d6+21
>> "10 6 1"
I AM A SEXY SHOELESS GOD OF WAR!
เกณฑ์การให้คะแนน
รหัสที่สั้นที่สุดชนะ ใช้กฎมาตรฐาน
โบนัส
-33% (ปัดเศษก่อนการลบ) หากโปรแกรมของคุณส่งคืนโซลูชันที่มีลูกเต๋าที่ถูกต้องนอกเหนือจากk (ซึ่งค่าที่ถูกต้องตามที่กล่าวไว้ข้างต้นคือ 4, 6, 8, 10, 12 และ 20) หากคุณเลือกที่จะทำเช่นนั้นแล้วคุณควรเสมอกลับมาแก้ปัญหาดังกล่าวเมื่อการแก้ปัญหาที่เหมาะสมและการจัดการที่ใช้หลายประเภทของการตาย ตัวอย่าง:
>> "7 4 3"
3d6+7