งานของคุณในความท้าทายนี้คือการวิเคราะห์ "สมการจับคู่" ที่กำหนดเช่นนี้ ...
... และเพื่อดูว่าสามารถเปลี่ยนเป็นสมการที่ถูกต้องได้หรือไม่โดยการจัดเรียงการแข่งขันใหม่ ถ้าเป็นเช่นนั้นคุณจะต้องแสดงจำนวนการเคลื่อนไหวน้อยที่สุดและสมการที่เกิดขึ้น
อินพุต
อินพุตเป็นสตริงที่สามารถอ่านได้จาก STDIN, ถ่ายเป็นอาร์กิวเมนต์ฟังก์ชันหรือแม้กระทั่งเก็บไว้ในไฟล์ มันเป็นสมการที่แสดงถึงการจัดเรียงไม้ขีดไฟและสามารถอธิบายได้โดยใช้ EBNF ต่อไปนี้:
input = term, "=", term ;
term = number | (term, ("+" | "-"), term) ;
number = "0" | (numeralExceptZero , {numeral}) ;
numeralExceptZero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
numeral = "0" | numeralExceptZero ;
3+6-201=0+0+8
ตัวอย่างสำหรับการป้อนข้อมูลที่ถูกต้องจะเป็น
งาน
พิจารณาภาพประกอบต่อไปนี้ที่ไม้ขีดไฟแต่ละอันมีหมายเลขกำหนดไว้:
ตอนนี้เราแมปสัญลักษณ์อินพุตแต่ละอันเข้ากับตำแหน่งของไม้ขีดไฟที่สอดคล้องกันดังนี้
0 ↦ 1,2,3,4,5,6
1 ↦ 4,5
2 ↦ 2,3,5,6,8
3 ↦ 3,4,5,6,8
4 ↦ 1,4,5,8
5 ↦ 1,3,4,6,8
6 ↦ 1,2,3,4,6,8
7 ↦ 4,5,6
8 ↦ 1,2,3,4,5,6,8
9 ↦ 1,3,4,5,6,8
- ↦ 8
+ ↦ 8,10
= ↦ 7,9
แต่ละสูตรป้อนข้อมูลสามารถเปลี่ยนเป็นการจัดเรียงของแท่งจับคู่ ตัวอย่างเช่นสมการ "45 + 6 = 92" จะกลายเป็น
ไม้ขีดที่เป็นสีเทาออกมา งานของคุณคือหาจำนวนไม้ขีดไฟที่น้อยที่สุดที่จะต้องจัดเรียงใหม่เพื่อให้สมการนั้นถูกต้อง
เอาท์พุต
เราแยกความแตกต่างระหว่างสามกรณีที่เป็นไปได้:
- หากอินพุตไม่ถูกต้อง (เช่นไม่เป็นไปตาม EBNF ด้านบน) ให้เอาต์พุตตามที่คุณต้องการ
- มิฉะนั้นหากมีวิธีที่จะเปลี่ยนสมการให้เป็นสมการที่ถูกต้องโดยจัดเรียงไม้ขีดไฟใหม่คุณจะต้องแสดงผลทั้งจำนวนขั้นต่ำของการจัดเรียงใหม่และสมการที่เกี่ยวข้อง เช่นเดียวกับอินพุตสมการเอาต์พุตจะต้องเป็นไปตาม EBNF ที่กำหนด ในตัวอย่างข้างต้นแสดงผลที่ถูกต้องจะเป็น
และ
1
46+6=52
หากมีความเป็นไปได้หลายอย่างสำหรับสมการที่ได้ - มิฉะนั้น (ดังนั้นถ้าใส่ที่ถูกต้อง แต่มีวิธีที่จะทำให้สมการเป็นจริงไม่ได้)
-1
คุณจะมีการส่งออก
รายละเอียด
- คุณไม่ได้รับอนุญาตให้ลบหรือเพิ่มการแข่งขัน นั่นหมายความว่าหากอินพุตถูกสร้างขึ้นจาก
n
ไม้ขีดไฟผลผลิตจะต้องประกอบด้วยn
ไม้ขีดไฟที่แน่นอน - "ว่างเปล่า" matchstick- บล็อกได้รับอนุญาตเฉพาะในตอนท้ายและจุดเริ่มต้นของสมการไม่ได้อยู่ตรงกลาง ตัวอย่างเช่นเปลี่ยน
7-1=6
เป็น7 =6-1
เพียงแค่ลบออก-1
จากด้านซ้ายและเพิ่มทางด้านขวาโดยไม่อนุญาตให้มีการจัดเรียงก้านไม้ขีดไฟเพียง 3 ครั้ง เนื่องจากฉันไม่เห็นการแมปจากตัวเลขไปยังตำแหน่งจับคู่เป็นส่วนที่น่าสนใจของความท้าทายนี้บวก20 ไบต์คุณอาจ
- เข้าถึงไฟล์ที่
(number/operation ↦ matchstick positions)
จัดเก็บการแมปด้วยวิธีที่สมเหตุสมผลหรือ - หากภาษาการเขียนโปรแกรมของคุณรองรับ
Map
ประเภทข้อมูลสมมติว่าคุณสามารถเข้าถึงแผนที่ที่กำหนดค่า(number/operation ↦ matchstick positions)
เริ่มต้นล่วงหน้าด้วย -mapping ตัวอย่างเช่นแผนที่นี้อาจมีลักษณะดังนี้:{(0,{1,2,3,4,5,6}),(1,{4,5}),(2,{2,3,5,6,8}),(3,{3,4,5,6,8}), ..., (-,{8}),(+,{8,10}),(=,{7,9})}
- เข้าถึงไฟล์ที่
ตัวอย่าง
อินพุต: 1+1=3
↦ เอาต์พุต: 1
และ1+1=2
อินพุต: 15+6=21
↦ เอาต์พุต: 0
และ15+6=21
อินพุต: 1=7
↦ เอาท์พุท: -1
อินพุต: 950-250=750
↦ เอาต์พุต: 2
และ990-240=750
อินพุต: 1-2=9
↦ เอาต์พุต: 1
และ1+2=3
อินพุต: 20 + 3=04
↦ เอาท์พุท:อะไรก็ได้
ผู้ชนะ
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่ถูกต้องสั้นที่สุด (เป็นไบต์) ชนะ ผู้ชนะจะได้รับการคัดเลือกหนึ่งสัปดาห์หลังจากโพสต์คำตอบแรกที่ถูกต้อง
=
(2 ไม้ขีดไฟ) และ-
(1 ไม้ขีดไฟ) และปล่อยตัวเลขทั้งหมดที่พวกเขาอยู่ อย่างไรก็ตามหากต้องย้ายทั้งสองไปทางซ้ายคุณจะต้องนับการเคลื่อนไหวที่ต้องการด้วย
1+1+2=3-6+10
อย่างไร และคำถามเดียวกันเกี่ยวกับผลลัพธ์
0: 1, 2, 3, 4, 5, 6
สอดคล้อง