Введение
Мой калькулятор ведет себя странно. Иногда, когда я набираю, 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требуется, требует знаний о решении при создании тестовых случаев. Если бы это было позволено, я мог бы просто добавить пробел только до того, как поменялись местами символы, и решение могло быть немедленно получено из контрольного примера.
*и /до того +и двоичного -?