Если вы читали книгу « Контакт Карла Сагана», этот вызов может показаться вам знакомым.
Учитывая ввод набора математических уравнений, состоящих из числа, неизвестного оператора, другого числа и результата, определите, какие операторы представляют сложение, вычитание, умножение или деление.
Каждое входное уравнение всегда будет состоять из
- неотрицательное целое число
- одна из букв
A,B,CилиD - другое неотрицательное целое число
- персонаж
= - окончательное неотрицательное целое число
соединены вместе. Например, возможный ввод 1A2=3, из которого вы можете вывести, что Aпредставляет сложение. Каждое из целых чисел будет удовлетворять 0 ≤ x ≤ 1,000.
Однако это не всегда так просто. Возможна неясность между:
5A0=5: сложение / вычитание1A1=1: умножение / деление0A5=0: умножение / деление2A2=4: сложение / умножение4A2=2: вычитание / деление0A0=0: сложение / вычитание / умножение
и так далее. Задача состоит в том, чтобы использовать эту возможность, чтобы сузить выбор в сочетании с процессом исключения, чтобы выяснить, какого оператора представляет каждая буква. (Всегда будет хотя бы одно входное уравнение, и всегда можно будет однозначно, однозначно сопоставить каждую букву, использованную во вводе, с одним оператором.)
Например, предположим, что входными данными являются следующие уравнения:
0A0=0: это сужает A до сложения, вычитания или умножения (не может делиться на 0).10B0=10: B должно быть либо сложением, либо вычитанием.5C5=10: C, очевидно, сложение, которое делает B вычитанием, которое делает A умножением.
Следовательно, выходные данные для этих входных уравнений должны совпадать Aс *, B
с -и Cс +.
Входные данные могут быть представлены в виде одной строки с пробелами / запятыми или массива строк, каждая из которых представляет одно уравнение. Выходными данными может быть либо одиночная строка ( "A*B-C+"), array ( ["A*", "B-", "C+"]), либо словарь / dict-подобный 2D-массив ( {"A": "*", ...}или [["A", "*"], ...]).
Вы можете предположить, что число никогда не будет разделено на другое число, на которое оно не делится (поэтому вам не нужно беспокоиться о том, должно ли деление быть плавающим или усеченным).
Поскольку это код-гольф , выигрывает самый короткий код в байтах.
Тестовые случаи:
In Out
-------------------------------
0A0=0 10B0=10 5C5=10 A*B-C+
100D100=10000 D*
4A2=2 4B2=2 0A0=0 A-B/
15A0=15 4B2=2 2C2=0 A+B/C-
1A1=1 0A0=0 A*
0A0=0 2A2=4 5B0=5 2B2=4 A*B+
2A2=4 0C0=0 5B0=5 5A0=5 A+B-C*
0A1000=0 4A2=2 A/