มีเป็น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แต่อนุญาตให้ใช้ชุดการดำเนินการที่หลวมมาก)
