Ваша задача в этой задаче - проанализировать данное «уравнение спички», как это ...

... и выяснить, можно ли превратить его в правильное уравнение путем перестановки совпадений. Если это так, вы должны вывести наименьшее количество ходов и полученное уравнение.
вход
Входные данные представляют собой строку, которую можно прочитать из 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спичек. - «Пустые» блоки спичек допускаются только в конце и в начале уравнения, а не в середине. Так, например, переход
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 спичка) и оставить все числа там, где они есть. Однако, если 2 нужно было сдвинуть влево, вам также нужно будет подсчитать необходимые ходы.
1+1+2=3-6+10? И тот же вопрос о выходе.
0: 1, 2, 3, 4, 5, 6для согласованности