นี่คือคำสั่ง dicelab ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้เวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
dicelab - หมุนและตรวจสอบแผนการทอยลูกเต๋า
เรื่องย่อ
ลูกเต๋า [ตัวเลือก] [-NS ]
OPTIONS
-h, --ช่วยด้วย, -?
พิมพ์ข้อความช่วยเหลือ
--รุ่น, -v
แสดงหมายเลขรุ่น
--คำนวณ, -c
คำนวณการกระจาย
--ม้วน, -r
ทอยลูกเต๋าตามที่กำหนด นอกจากนี้ยังจะใช้หากไม่มีการร้องขอการดำเนินการอื่น ๆ
--ประเมิน, -e
ทำซ้ำหลาย ๆ ครั้งและสรุปผลลัพธ์เพื่อรับการแจกแจงทางสถิติของ
ค่า
--นับ, -n
ระบุจำนวนการสุ่มใหม่สำหรับ --eval ค่าเริ่มต้นคือ 10000
--พิมพ์-ต้นไม้, -p
พิมพ์ parse tree (เพื่อการดีบัก)
-f
อ่านคำอธิบายโครงร่างจากไฟล์แทน stdin
DESCRIPTION
Dicelab อ่านคำอธิบายของแผนการทอยลูกเต๋าจากไฟล์หรือจาก stdin หากไม่มีไฟล์
ระบุแล้วม้วนหรือตรวจสอบโครงร่างนี้
QUICK เริ่มต้น
ม้วนเดียวสามารถทำได้โดยใช้ตัวดำเนินการ 'd' ตามด้วยจำนวนหน้าบน
แม่พิมพ์ที่จะรีด เช่น d6 จะหมุนลูกเต๋าหกด้านเดียว และ d2 จะพลิกเหรียญ
นิพจน์อาจถูกแก้ไขโดยตัวดำเนินการเลขคณิตมาตรฐาน d10-1 จะให้ค่า
ระหว่าง 0 ถึง 9 รวม ในการทอยลูกเต๋าประเภทเดียวกันหลายๆ ลูก ให้ใช้ปุ่ม
ตัวดำเนินการซ้ำ '#' 2#d6 จะทอยลูกเต๋าหกด้านสองลูก นี้ไม่เหมือนกับ 2*d6,
ซึ่งกลิ้งเพียงลูกเดียวแต่คูณผลลัพธ์ด้วยสองหรือ 2d6 ซึ่งจะทำให้a
ข้อผิดพลาดทางไวยากรณ์ เพื่อให้ได้ผลรวมของลูกเต๋าหกด้านสองลูก ให้ทำ sum(2#d6)
เต็ม ซิงค์
::=
-?[0-9]+
::=
[อา-ซ่า-ซ]+
::=
|
| ( )
| -
| +
| -
| *
| /
| %
| ^
| .
| NS
| ผลรวม
| แยง
| นับ
::=
#
| ( )
| ..
| ,
| ดัด
| เรียงลำดับ
| rev
| (วาง|เก็บ)? ต่ำ
| (วาง|เก็บ)? สูง
| (วาง|เก็บ)? แรก
| (วาง|เก็บ)? ล่าสุด
| (วาง|เก็บ)? ==
| (วาง|เก็บ)? !=
| (วาง|เก็บ)? <
| (วาง|เก็บ)? >
| (วาง|เก็บ)? <=
| (วาง|เก็บ)? >=
| ถ้า แล้ว อื่น
| ปล่อย = ใน
| ในขณะที่ = ทำ
| แต่ละ ใน ทำ
::=
::=
| ;
ความคิดเห็นอาจถูกแทรกโดยใช้เครื่องหมายทับคู่ (//) เช่นเดียวกับใน C
ความหมาย
+ - * / ^
เหล่านี้คือตัวดำเนินการเลขคณิตฐานสองที่คุ้นเคยสำหรับการบวก การลบ
การคูณ การหาร และการยกกำลัง หารรอบเป็นศูนย์
ตัวอย่าง: 5+7, d6-1, 2^10
-
นี่คือตัวดำเนินการลบเอกภาพ ตัวอย่าง: -1
%
นี่คือตัวดำเนินการโมดูลัส x % y ให้ส่วนที่เหลือของ x หารด้วย y
ตัวอย่าง: 11%2, d6%3
.
นี่คือตัวดำเนินการต่อสเกลาร์ NS . y ให้ xy การต่อกันของ x
และ ย. ตัวอย่าง: -10.9, d6.d6
d
นี่คือตัวดำเนินการม้วนแม่พิมพ์ dn ให้ค่าของม้วนเดียวของ n-sided
ตาย. ตัวอย่าง: d6, 2#d6
รวม แยง
เหล่านี้คือผลรวมเพิ่มเติมและตัวดำเนินการผลิตภัณฑ์ ถ้า e เป็นนิพจน์ ให้รวม e และ
แยง e ให้ผลรวมของสมาชิกของ e และผลิตภัณฑ์ของสมาชิกของ e
ตามลำดับ ตัวอย่าง: ผลรวม(1..100), การผลิต(3#d6)
นับ
นี่คือตัวดำเนินการขนาดรายการ ถ้า e เป็นนิพจน์ การนับ e ให้
จำนวนสมาชิกของ e. ตัวอย่าง: นับ(1,2,3), นับ(== 6 10#d6)
#
นี่คือตัวดำเนินการทำซ้ำรายการ ถ้า n เป็นสเกลาร์ไม่ติดลบ และ e เป็น an
นิพจน์ ดังนั้น n#e คือรายการที่มีผลลัพธ์ของการประเมิน n ของ e
ตัวอย่าง: 10#8, 3#d10
..
นี่คือตัวดำเนินการช่วง ถ้า x และ y เป็นสเกลาร์ ดังนั้น x..y คือรายการประกอบด้วย
ของช่วง [x,y] ถ้า x>y รายการผลลัพธ์จะว่างเปล่า ตัวอย่าง: 1..10,
4..ง10
,
นี่คือตัวดำเนินการต่อรายการ v,u ให้รายการประกอบด้วยทั้งหมด
สมาชิกของ v ตามด้วยสมาชิกของ u ทั้งหมด ตัวอย่าง: 1,2 4,(3#d6)
ประเภท
นี่คือตัวดำเนินการเรียงลำดับรายการ sort e เรียงลำดับรายการ e ตามลำดับจากน้อยไปมาก
ตัวอย่าง: เรียงลำดับ(10#d6)
ดัด
นี่คือตัวดำเนินการเรียงสับเปลี่ยนรายการ sort e ส่งผลให้เกิดการเรียงสับเปลี่ยนแบบสุ่มของ
รายการ e. ใช้ดัดผมเพื่อสับเปลี่ยนรายการ ตัวอย่าง: ดัด(1)
การหมุนรอบ
นี่คือตัวดำเนินการกลับรายการ rev e ผลลัพธ์ในรายการที่มีสมาชิกคนเดียวกัน
เป็นรายการ e แต่ในลำดับที่กลับกัน ตัวอย่าง: รอบ(1..10), เรียงรอบ(10#d8)
ต่ำ สูง
ตัวดำเนินการเหล่านี้ทำหน้าที่เป็นตัวกรองโดยการค้นหาค่าที่น้อยที่สุดและยิ่งใหญ่ที่สุดในรายการ
ถ้า n เป็นสเกลาร์ไม่ติดลบ และ e เป็นนิพจน์ ดังนั้น ne ต่ำจะให้ n น้อยที่สุด
สมาชิกของ e และ high ne ให้สมาชิกที่ยิ่งใหญ่ที่สุด n ของ e ตัวอย่าง: สูง 3 5#d6
เป็นครั้งแรก ล่าสุด
ตัวดำเนินการเหล่านี้ทำหน้าที่เป็นตัวกรองโดยการค้นหาส่วนเริ่มต้นและส่วนสุดท้ายของรายการ ถ้า n
เป็นสเกลาร์ที่ไม่เป็นลบ และ e เป็นนิพจน์ จากนั้น ne ให้ n . ตัวแรก
สมาชิกของ e และ ne สุดท้าย ให้สมาชิก n คนสุดท้ายของ e ตัวอย่าง: 3 . แรก
(1..10)
== != < > <= >=
ตัวดำเนินการเหล่านี้ทำหน้าที่เป็นตัวกรองโดยการค้นหาค่าในรายการที่ตรงตามที่กำหนด
เงื่อนไข. ถ้า x เป็นสเกลาร์ และ e เป็นนิพจน์ ดังนั้น == xe จะแสดงรายการของ
สมาชิกของ e เท่ากับ x; != xe ให้รายชื่อสมาชิกของ e ไม่เท่ากับ x; < x
e ให้รายชื่อสมาชิกของ e น้อยกว่า x; > xe ให้รายชื่อสมาชิกของ e
มากกว่า x; <= xe ให้รายชื่อสมาชิกของ e น้อยกว่าหรือเท่ากับ x; >= x
e ให้รายชื่อสมาชิกของ e ที่มากกว่าหรือเท่ากับ x ตัวอย่าง: >= 3 5#d6
หล่น เก็บ
ตัวดำเนินการเหล่านี้แก้ไขตัวกรองในรายการ หาก fop เป็นการดำเนินการกรองบน an
นิพจน์ e จากนั้นให้ fop e มีผลเช่นเดียวกับ fop e และปล่อย fop e ประเมิน
ให้ fop e น้อยลง กล่าวอีกนัยหนึ่ง ดรอปจะลบล้างเงื่อนไขตัวกรอง และเก็บ
ยืนยันพวกเขา ไม่จำเป็นและมีอยู่เพื่อความสมมาตรเท่านั้น ตัวอย่าง:
ผลรวม(ลดลงต่ำ 1 4#d6)
ให้
นี่คือตัวดำเนินการกำหนดตัวแปรและการแทนที่ ถ้า x เป็นตัวแปรและ e
และ f เป็นนิพจน์ จากนั้นให้ x = e ใน f ให้รายการที่เป็นผลจาก
ประเมินค่า f ด้วยค่าของ e แทนที่ทุกครั้งที่เกิดขึ้นของ x ใน f
การประเมิน e ทำได้ก่อนการแทนที่ ตัวอย่าง: ให้ x = d6 ใน x*x
แต่ละ
นี่คือตัวดำเนินการวนซ้ำที่มีขอบเขต ถ้า x เป็นตัวแปร และ e และ f เป็น
นิพจน์ แล้ว foreach x ใน e do f ให้รายการที่เป็นผลมาจากการกำหนด
ถึง x สมาชิกของ e แต่ละตัวและประเมินค่า f ตัวอย่าง: foreach x ใน c ทำ x+1
ในขณะที่
นี่คือตัวดำเนินการวนซ้ำที่ไม่มีขอบเขต ถ้า x เป็นตัวแปร และ e และ f เป็น
นิพจน์ ดังนั้นในขณะที่ x = e do f คือรายการ v0,v1,...,vn โดยที่ v0 คือผลลัพธ์
ของการประเมิน e และ vi+1 เป็นผลมาจากการกำหนด vi ให้กับ x และการประเมิน f
หยุดที่ vi แรกซึ่งว่างเปล่า ตัวอย่าง: ในขณะที่ x=d6 ทำ ((นับ <6 x)#d6)
if
นี่คือตัวดำเนินการการแตกแขนง ถ้า e, f และ g เป็นนิพจน์ ถ้า e แล้ว f
อื่น g ให้ f ถ้า e ไม่ว่าง และ g ไม่เช่นนั้น ตัวอย่าง: if count(>4 2#d6) แล้ว
อีก 1 รายการ 0
ตัวอย่าง
นับจำนวนลูกเต๋าที่มากกว่า 7:
นับ >7 5#d10
นับจำนวนลูกเต๋าที่มากกว่า 7 ลบด้วยจำนวนลูกเต๋าเท่ากับ 1:
ให้ c=5#d10 ใน (นับ >7 c)-(นับ ==1 c)
นับจำนวนม้วนจนกว่าจะถึง 6 ม้วน:
นับ (ในขณะที่ x=d6 ทำ ((นับ <6 x)#d6))
นับจำนวนม้วนจนครบ 6 ม้วน อย่างมีประสิทธิภาพมากขึ้น:
นับ (ในขณะที่ x=(d6/6) ทำ ((นับ <1 x)#(d6/6)))
คุณลักษณะม้วนสำหรับอักขระ D&D ใหม่:
6#ผลรวม(ลดลงต่ำ 1 4#d6)
เลื่อนตารางตรวจสอบขวัญกำลังใจ 11..66 ในชุด The Gamers' Civil War Brigade:
d6.d6
ค้นหาค่ามัธยฐานของ 3 d20s:
สูง 1 ต่ำ 2 3#d20
3d6 พร้อม rerolls ใน 6s:
ผลรวม(ในขณะที่ x=3#d6 ทำ ((นับ ==6 x)#d6))
ทอย 7 d10 และหาผลรวมของลูกเต๋าที่เหมือนกันมากที่สุด:
ให้ x = 7#d10 ในระดับสูง 1 ( foreach y ใน 1..10 ทำผลรวม (==yx))
ลำดับฟีโบนักชีถูกกำหนดโดย Fn = Fn-1 + Fn-2 โดยที่ F1 = F2 = 1 คำนวณ
ตัวเลขฟีโบนักชียี่สิบตัวแรก:
ให้ n = 20 นิ้ว
ให้ f = (1,1) ใน
foreach ฉันใน 1..n do
ให้ f = (f,sum(สูง 2 f)) ใน
ถ้า ==ni แล้ว f อื่น ()
ความเสี่ยงมีการต่อสู้ที่ผู้โจมตีหมุน 3d6 และผู้พิทักษ์หมุน 2d6 สูงที่สุด
ผู้โจมตีตายจะจับคู่กับผู้โจมตีสูงสุดและผู้โจมตีสูงสุดอันดับสอง
ให้ผู้พิทักษ์สูงสุดอันดับสองตาย ทั้งสองแมตช์ ชนะสูงสุด เสมอกัน
ผู้พิทักษ์ จำนวนผู้โจมตีชนะ:
ให้ a = 3#d6 ใน
ให้ b = 2#d6 ใน
นับ ((<(สูง 1 a) สูง 1 b),
(<(สูง 1 ต่ำ 2 a) ต่ำ 1 b))
Storyteller die roll กับเป้าหมายหมายเลข 8 และจุดบอดที่ระบุที่ -1:
ให้ c=5#d10 ใน
ให้ succs = นับ >7 c ใน
ให้คน = นับ == 1 c ใน
ถ้า >0 สำเร็จ ให้สูง 1 (0,สำเร็จ-คน)
อื่นถ้า >0 ตัวแล้ว -1 อื่น 0
การต่อสู้ใน Silent Death ค่อนข้างซับซ้อน ลูกเต๋าสามลูกถูกทอย หากผลรวมของพวกเขาสูงกว่า a
เป้าหมาย ม้วนเป็นตี. ในการคำนวณความเสียหาย จะเรียงลูกเต๋าเดียวกัน ถ้าทั้งสามเป็น
เท่ากันทั้งหมดจะรวมกันเพื่อสร้างความเสียหาย ถ้าอย่างน้อยสองคนเท่ากัน แต่ที่สามคือ
สูงกว่าดายสูงคือความเสียหาย ถ้าสองตัวสูงสุดเท่ากัน แต่ตัวที่สามต่ำกว่า
ลูกเต๋าสูงสองลูกจะรวมกันเพื่อสร้างความเสียหาย หากลูกเต๋าทั้งสามลูกต่างกัน
ดายกลางคือความเสียหาย ตัวอย่างนี้ถือว่าลูกเต๋าเป็นสอง d8 และ d10 โดยมี a
เป้าหมายหมายเลข 15:
ให้ x = 2#d8,d10 ใน
(นับ >15 ผลรวม x)#
ให้ a = ต่ำ 1 x ใน // ตายต่ำ
ให้ b = สูง 1 ต่ำ 2 x ใน // ดายกลาง
ให้ c = สูง 1 x ใน // ตายสูง
ถ้า ==a ==bc แล้ว a+b+c // ทั้งหมดเท่ากัน
อย่างอื่นถ้า ==a
อื่นถ้า >a ==cb แล้ว b+c // สองสูงเท่ากับelse
b // ต่างกันทั้งหมด
เครดิต
Dicelab ขึ้นอยู่กับ "ม้วน" ผลงานที่ยอดเยี่ยมโดย Torben Mogensen
(http://www.diku.dk/~torbenm/Dice.zip). หากไม่มีงานและความคิดเห็นของเขา เรื่องนี้ก็แทบจะไม่มี
เคยเกิดขึ้น
ข้อกำหนดภาษาปัจจุบันและส่วนขยายของภาษาต้นฉบับได้รับมา
จากผลงานของ Joel Uckelman (http://dice.nomic.net/bones.html) ส่วนใหญ่ของ
เอกสารก็ถูกขโมยไปจากเขาเช่นกัน
รหัสนี้เขียนโดย Robert Lemmen[ป้องกันอีเมล]>ใครเล่าจะยินดีฟัง
คำถามและข้อสังเกตของคุณ
ใช้ dicelab ออนไลน์โดยใช้บริการ onworks.net