Введение
Мой калькулятор ведет себя странно. Иногда, когда я набираю, 8
он отображает 2
. И иногда, когда я набираю, 6
он отображает +
. Некоторые кнопки перепутаны!
Может ли кто-нибудь помочь мне определить, какой?
Вызов:
Вход: список неправильных уравнений с правильными результатами.
Вывод: две кнопки, которые поменялись местами.
Например:
вход может быть:
123 = 3
8423 = 252
4+4 = 8
4*7-10 = 417
9/3 = 3
42-9 = -36
Для которых ожидаемые результаты: 2
и *
.
Зачем? Потому что ВСЕ уравнения будут правильными, если поменять местами 2 и *:
1*3 = 3
84*3 = 252
4+4 = 8
427-10 = 417
9/3 = 3
4*-9 = -36
Правила соревнований:
- Ввод может быть в любом разумном формате. Может быть одной строкой с пробелом; список строк или -array; список с уравнениями и другой список с правильными результатами. Ваш звонок. Пожалуйста, укажите, какой формат ввода вы использовали!
ПРИМЕЧАНИЕ. Это также означает, что вам разрешено вводить контрольный пример-5--15
как-5- -15
или-5 - -15
. Однако число, полученное в результате,--
должно вводиться либо без пробелов, либо с пробелом между каждой цифрой. Таким образом, тестовый пример9119
может быть введен как9119
или9 1 1 9
(причина91 19
не допускается, потому что вы можете руководствоваться пробелом для поиска- -
). Так что пробелы (несколько) необязательны и разрешены. - Выходной формат также может быть в любом приемлемом формате. Может быть два символа; одиночная двухсимвольная строка; список строк, содержащий два символа. Ваш звонок. Опять же, пожалуйста, укажите, какой формат вывода вы использовали!
- Вам разрешено использовать любые 14 различных выходов, которые отображаются на
0123456789+-*/
. Так что вам даже разрешено выводить два разных целых числа, если вы хотите (опять же, пожалуйста, укажите отображение, которое вы использовали, если есть). - Вам нужно только поддерживать целые числа. Так что не будет никаких тестовых случаев, таких как
1/8=0.125
или1/8=0
. - Арифметические операнды, которые вы должны будете поддерживать: добавление (
+
); вычитание (-
); умножение (*
или×
или·
); деление (/
или÷
). (ПРИМЕЧАНИЕ. Символы в скобках добавляются только для пояснения.) - Вам придется поддерживать отрицательные числа. Это средство
-
можно интерпретировать в уравнении как математический операнд или как отрицательный индикатор. - Вы можете предположить, что данные неправильные уравнения и предполагаемые правильные уравнения всегда действительны (поэтому не будет таких вещей, как
4-/2
или,9+-+8
например). - Неправильные входные уравнения могут содержать деление на 0, но исправленные и ожидаемые уравнения никогда не будут содержать деление на 0.
- Неправильные уравнения ввода уже могут быть правильными, даже если вы поменяете местами нужные кнопки.
- Данный вход уравнение может быть не имеют значения для кнопок , чтобы своп (как
4+4=8
и9/3=3
уравнения, с обмениваемыми кнопками2
и*
). - Вы можете предположить, что всегда будет только один возможный обмен, который может быть сделан с данными тестовыми примерами.
- Обе кнопки для обмена всегда будут присутствовать хотя бы в одном из неправильных уравнений.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
Input:
123 = 3
8423 = 252
4+4 = 8
4*7-10 = 417
9/3 = 3
42-9 = -36
Output: 2 *
Input:
4/2 = 6
3/0 = 3
0/8+2 = 4
95-5 = 90
4+2 = 2
Output: + /
Input:
7+4 = 11
5-15 = 46
212-23 = -2121
Output: 1 -
Input:
4+8/2-9*1 = -5
99/3-13 = 20
1+2+3+4 = 10
4-3-2-1 = -6
Output: 2 4
Input:
18/18 = 1
98-8 = 90
55*88 = 4840
-5--15 = 10
Ouput: 5 8
Input:
9119 = 18
5-3 = 513
8*-9 = 152
13116/3 = -1
Output: 1 -
--
. Например 1991 = 2, -/3 = 3
. (Многие языки путают это с оператором декремента.)
91 19
случае, если решение есть, 9--9
и отсутствие пробела в том 9119
случае, если решение 9229
требуется, требует знаний о решении при создании тестовых случаев. Если бы это было позволено, я мог бы просто добавить пробел только до того, как поменялись местами символы, и решение могло быть немедленно получено из контрольного примера.
*
и /
до того +
и двоичного -
?