งานของคุณในความท้าทายนี้คือการวิเคราะห์ "สมการจับคู่" ที่กำหนดเช่นนี้ ...

... และเพื่อดูว่าสามารถเปลี่ยนเป็นสมการที่ถูกต้องได้หรือไม่โดยการจัดเรียงการแข่งขันใหม่ ถ้าเป็นเช่นนั้นคุณจะต้องแสดงจำนวนการเคลื่อนไหวน้อยที่สุดและสมการที่เกิดขึ้น
อินพุต
อินพุตเป็นสตริงที่สามารถอ่านได้จาก 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 ที่กำหนด ในตัวอย่างข้างต้นแสดงผลที่ถูกต้องจะเป็น
และ
146+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สอดคล้อง