มีเป็น500 ตัวแทนโปรดปรานอย่างไม่เป็นทางการสำหรับการตีคำตอบที่ดีที่สุดในปัจจุบัน
เป้าหมาย
เป้าหมายของคุณคือการคูณสองตัวเลขโดยใช้ชุดการดำเนินการทางคณิตศาสตร์และการกำหนดตัวแปรที่ จำกัด มาก
- ส่วนที่เพิ่มเข้าไป
x,y -> x+y
- ซึ่งกันและกัน
x -> 1/x
( ไม่หารx,y -> x/y
) - การปฏิเสธ
x -> -x
( ไม่ใช่การลบx,y -> x-y
ถึงแม้ว่าคุณสามารถทำได้สองการดำเนินการx + (-y)
) - ค่าคงที่
1
(ไม่อนุญาตให้มีค่าคงที่อื่นยกเว้นที่สร้างโดยการดำเนินการจาก1
) - การมอบหมายตัวแปร
[variable] = [expression]
เกณฑ์การให้คะแนน:ค่าเริ่มต้นในตัวแปรและa
b
เป้าหมายของคุณคือการบันทึกผลิตภัณฑ์a*b
ลงในตัวแปรc
โดยใช้การดำเนินการให้น้อยที่สุด การดำเนินการและการมอบหมายแต่ละครั้ง+, -, /, =
มีค่าใช้จ่ายจุด (เทียบเท่าการใช้ (1), (2), (3) หรือ (4) แต่ละครั้ง ค่าคงที่1
มีอิสระ การแก้ปัญหาที่จุดน้อยที่สุดชนะ Tiebreak เป็นโพสต์แรกสุด
ค่าเผื่อ:การแสดงออกของคุณจะต้องมีความถูกต้องสำหรับ arithmetically reals "สุ่ม" และa
b
มันอาจล้มเหลวในเซตย่อยที่มีค่าเป็นศูนย์ของR 2นั่นคือเซตที่ไม่มีพื้นที่ถ้าพล็อตในระนาบa
- b
ระนาบคาร์ทีเซียน (อาจมีความจำเป็นเนื่องจากส่วนกลับของนิพจน์ที่อาจเป็น0
เช่น1/a
นี้)
ไวยากรณ์:
นี่คืออะตอมรหัสกอล์ฟ ไม่สามารถใช้การดำเนินการอื่นได้ โดยเฉพาะอย่างยิ่งสิ่งนี้หมายความว่าไม่มีฟังก์ชั่น, เงื่อนไข, ลูปหรือประเภทข้อมูลที่ไม่ใช่ตัวเลข นี่คือไวยากรณ์สำหรับการดำเนินการที่อนุญาต (ความเป็นไปได้ถูกคั่นด้วย|
) โปรแกรมคือลำดับของ<statement>
s โดยที่ a <statement>
ถูกกำหนดดังนี้
<statement>: <variable> = <expr>
<variable>: a | b | c | [string of letters of your choice]
<expr>: <arith_expr> | <variable> | <constant>
<arith_expr>: <addition_expr> | <reciprocal_expr> | <negation_expr>
<addition_expr>: <expr> + <expr>
<reciprocal_expr>: 1/(<expr>)
<negation_expr>: -<expr>
<constant>: 1
คุณไม่จำเป็นต้องโพสต์รหัสในไวยากรณ์ที่ถูกต้องนี้ตราบใดที่มันชัดเจนว่าคุณกำลังทำอะไรอยู่และการนับการทำงานของคุณถูกต้อง ตัวอย่างเช่นคุณสามารถเขียนa-b
สำหรับa+(-b)
และนับเป็นสองการดำเนินงานหรือกำหนดแมโครสำหรับความกะทัดรัด
(มีคำถามก่อนหน้านี้Multiply โดยไม่มี Multiplyแต่อนุญาตให้ใช้ชุดการดำเนินการที่หลวมมาก)