Помогите! Мой калькулятор неисправен!

28

Введение

Мой калькулятор ведет себя странно. Иногда, когда я набираю, 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 -
Кевин Круйссен
источник
2
«настоящее разделение» означает, что мы должны поддерживать поплавки?
Эрик Outgolfer
@EriktheOutgolfer Упс .. Скопировал это из моей предыдущей арифметической задачи. Удалено, и, как ответ на ваш вопрос, нет, вам нужно иметь дело только с целыми числами.
Кевин Круйссен,
1
Я бы предложил тестовый случай, в котором содержится правильное уравнение --. Например 1991 = 2, -/3 = 3. (Многие языки путают это с оператором декремента.)
nwellnhof
1
Проблема заключается в том, что добавление пробела в 91 19случае, если решение есть, 9--9и отсутствие пробела в том 9119случае, если решение 9229требуется, требует знаний о решении при создании тестовых случаев. Если бы это было позволено, я мог бы просто добавить пробел только до того, как поменялись местами символы, и решение могло быть немедленно получено из контрольного примера.
nwellnhof
1
Является ли оценка слева-направо, или *и /до того +и двоичного -?
aschepler

Ответы:

5

Perl 6 , 132 113 байтов

Спасибо Джо Кингу за -19 байт.

->\e,$r {first {($!=e.trans($_=>.flip))ne e&&try "all {$!.&{S:g/\-/- /}} Z==$r".EVAL},[X~] (|^10,|<+ - * />)xx 2}

Попробуйте онлайн!

Ввод - это разделенная запятыми строка уравнений и разделенная запятыми строка результатов (надеюсь, это нормально). Выходные данные - это строка, содержащая две поменяемые местами кнопки.

Правильно обрабатывает --. Мощь продукт ложных срабатываний на ---, ++, **, или //, но я не мог придумать теста.

nwellnhof
источник
Вы не должны справляться ---; ++; **; //; или другие подобные вещи, и *+т. д. Единственная двойная нецифровка, которую вы должны поддерживать, это --. Кроме того, если я правильно понимаю ваш код, вам это не понадобится .subst('-','- ', поскольку ввод контрольного примера -5--15с пробелом разрешен. Вы не первый, кто добавляет код для программного добавления этого пространства, поэтому я укажу это более четко в описании задачи.
Кевин Круйссен,
2
@KevinCruijssen Мне, возможно, придется разобраться с такими вещами, **потому что они имеют значение как выражения Perl 6 и могут вызывать ложные срабатывания. 1992 = 1может быть 1**2 = 1или 1//2 = 1, например. Это substдля случаев, когда правильное уравнение содержит --, например, новый тестовый пример, который вы добавили.
nwellnhof
Ваш ответ в настоящее время с наименьшим количеством байтов, поэтому я приму его сейчас. Если кто-то придумает что-то более короткое, проверка может снова сместиться.
Кевин Круйссен
113 байтов
Джо Кинг,
11

JavaScript (ES7), 159 158 байт

Редактировать: новая версия для соответствия обновленным правилам, касающимся --
сохраненного 1 байта, благодаря @Shaggy

Вводит синтаксис карри, (e)(r)где e - массив уравнений, а r - массив ожидаемых результатов. Возвращает массив символов.

e=>r=>(l=[...2**29+'4+-*/']).filter(x=>l.some(y=>eval("try{eval((S=(s=`[${e}]`).replace(/./g,c=>c==x?y:c==y?x:c)).split`--`.join`+`)+''==r&S!=s}catch(e){}")))

Контрольные примеры

Отформатировано и прокомментировано

e => r =>                                  // given e and r
  (l = [...2 ** 29 + '4+-*/'])             // generate l = [...'5368709124+-*/']
  .filter(x =>                             // for each character x of l
    l.some(y =>                            // for each character y of l
      eval("try {                          // we need to 'try', because we don't know
        eval(                              // whether the following expression is valid
          (S = (s = `[${e}]`).             // s = list of equations coerced to a string
            replace(/./g, c =>             // S =
              c == x ? y : c == y ? x : c  //   s with x and y exchanged
            )                              // end of replace()
          ).split`--`.join`+`              // replace '--' with '+'
        ) + '' == r                        // does the resulting list match r?
        & S != s                           // and was at least one character modified?
      } catch(e){}")                       // if we try, we oughta catch
    )                                      // end of some()
  )                                        // end of filter()
Arnauld
источник
1
Я думаю , что вы можете сохранить байты за evalТРАЕКТОРИИ try / catch: codepen.io/anon/pen/rzRrLp .
Лохматый
@ Шэгги Ах, да, хороший. Благодарность!
Арно
Похоже, это может работать на 139 байтов.
Лохматый
Да, я просто запустил полный набор тестов и заметил это.
Лохматый
Не работает 1991 = 2. Решение должно быть 1--1 = 2с 9и -поменяно местами.
nwellnhof
4

Python 2 , 204 , 199 , 193 , 173 , 165 байтов

  • От 199 байтов до 193 байтов благодаря Mr. Xcode
  • От 193 байтов до 173 байтов благодаря Халварду Хуммелю
s=input()
r=str.replace
t=set(''.join(zip(*s)[0]))
for i in t:
 for j in t:
	try:
	 if all(eval(r(r(r(e,i,'$'),j,i),'$',j))==v*(i<j)for e,v in s):print i,j
	except:0

Попробуйте онлайн!

mdahmoune
источник
@ Mr.Xcoder Спасибо за замечание, я исправляю это ...
mdahmoune
1
@ Mr.Xcoder вот исправленная версия
mdahmoune
2
193 байта
Mr. Xcoder
2
173 байта
Halvard Hummel
4

Oracle SQL и PL / SQL, 458 байт

Ввод может быть в любом разумном формате. [...] список с уравнениями и другой список с правильными результатами.

Скомпилируйте функцию PL / SQL (210 байт):

CREATE FUNCTION f(x CHAR,y CHAR)RETURN NUMBER IS o NUMBER;BEGIN EXECUTE IMMEDIATE 'BEGIN :1:='||REPLACE(x,'--','- -')||';END;'USING OUT o;RETURN CASE o WHEN y THEN 1 END;EXCEPTION WHEN OTHERS THEN RETURN 0;END;

Запустите SQL (248 байт):

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM T,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM T)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

После создания таблицы Tс тестовыми данными:

CREATE TABLE T(X,Y) AS
  SELECT '123',    3     FROM DUAL UNION ALL
  SELECT '8423',   252   FROM DUAL UNION ALL
  SELECT '4+4',    8     FROM DUAL UNION ALL
  SELECT '4*7-10', 417   FROM DUAL UNION ALL
  SELECT '9/3',    3     FROM DUAL UNION ALL
  SELECT '42-9',   -36   FROM DUAL

Выход:

V V_1
- ---
2 *
* 2

Предыдущая версия :

Предполагается строка ввода, как '123 = 3':

Та же функция PL / SQL и SQL (322 байта):

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15),y(x,y)AS(SELECT REGEXP_SUBSTR(t,'[^=]+'),REGEXP_SUBSTR(t,'-?\d+$')FROM T)SELECT r.v,s.v FROM y,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM T)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

После создания таблицы Tс тестовыми данными:

CREATE TABLE T(T) AS
  SELECT '123    = 3'   FROM DUAL UNION ALL
  SELECT '8423   = 252' FROM DUAL UNION ALL
  SELECT '4+4    = 8'   FROM DUAL UNION ALL
  SELECT '4*7-10 = 417' FROM DUAL UNION ALL
  SELECT '9/3    = 3'   FROM DUAL UNION ALL
  SELECT '42-9   = -36' FROM DUAL;

Выход:

V V_1
- ---
2 *
* 2

Обновление - Тестирование :

SQL Fiddle

Настройка схемы Oracle 11g R2 :

CREATE FUNCTION F(x CHAR,y CHAR)RETURN NUMBER IS o NUMBER;BEGIN EXECUTE IMMEDIATE 'BEGIN :1:='||REPLACE(x,'--','- -')||';END;'USING OUT o;RETURN CASE o WHEN y THEN 1 END;EXCEPTION WHEN OTHERS THEN RETURN 0;END;
/

CREATE TABLE A(X,Y) AS
  SELECT '123',    3     FROM DUAL UNION ALL
  SELECT '8423',   252   FROM DUAL UNION ALL
  SELECT '4+4',    8     FROM DUAL UNION ALL
  SELECT '4*7-10', 417   FROM DUAL UNION ALL
  SELECT '9/3',    3     FROM DUAL UNION ALL
  SELECT '42-9',   -36   FROM DUAL
/

CREATE TABLE B(X,Y) AS
  SELECT '4/2',    6     FROM DUAL UNION ALL
  SELECT '3/0',    3     FROM DUAL UNION ALL
  SELECT '0/8+2',  4     FROM DUAL UNION ALL
  SELECT '95-5',   90    FROM DUAL UNION ALL
  SELECT '4+2',    2     FROM DUAL
/

CREATE TABLE C(X,Y) AS
  SELECT '7+4',    11    FROM DUAL UNION ALL
  SELECT '5-15',   46    FROM DUAL UNION ALL
  SELECT '212-23', -2121 FROM DUAL
/

CREATE TABLE D(X,Y) AS
  SELECT '4+8/2-9*1', -5 FROM DUAL UNION ALL
  SELECT '99/3-13',   20 FROM DUAL UNION ALL
  SELECT '1+2+3+4',   10 FROM DUAL UNION ALL
  SELECT '4-3-2-1',   -6 FROM DUAL
/

CREATE TABLE E(X,Y) AS
  SELECT '18/18',  1     FROM DUAL UNION ALL
  SELECT '98-8',   90    FROM DUAL UNION ALL
  SELECT '55*88',  4840  FROM DUAL UNION ALL
  SELECT '-5--15', 10    FROM DUAL
/

CREATE TABLE G(X,Y) AS
  SELECT '9119',    18   FROM DUAL UNION ALL
  SELECT '5-3',     513  FROM DUAL UNION ALL
  SELECT '8*-9',    152  FROM DUAL UNION ALL
  SELECT '13116/3', -1   FROM DUAL
/

Запрос 1 :

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM A,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM A)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

Результаты :

| V | V |
|---|---|
| 2 | * |
| * | 2 |

Запрос 2 :

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM B,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM B)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

Результаты :

| V | V |
|---|---|
| + | / |
| / | + |

Запрос 3 :

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM C,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM C)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

Результаты :

| V | V |
|---|---|
| 1 | - |
| - | 1 |

Запрос 4 :

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM D,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM D)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

Результаты :

| V | V |
|---|---|
| 2 | 4 |
| 4 | 2 |

Запрос 5 :

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM E,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM E)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

Результаты :

| V | V |
|---|---|
| 5 | 8 |
| 8 | 5 |

Запрос 6 :

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM G,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM G)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

Результаты :

| V | V |
|---|---|
| 1 | - |
| - | 1 |
mt0
источник
Нет необходимости ||REPLACE(x,'--','- -')||, формат ввода / вывода является гибким, поэтому вы можете вводить, -5--15как -5- -15вы хотите. Кроме того, что было бы самым простым способом для меня, чтобы проверить все тестовые случаи работы, особенно последний? TIO-ссылка как-то возможна?
Кевин Круйссен,
Или ||REPLACE(x,'--','- -')||используется для ожидаемого правильного уравнения, как последний тестовый пример, который я добавил?
Кевин Круйссен,
1
@KevinCruijssen --начинает комментарий в SQL, поэтому либо необходимо сформулировать контрольные примеры, чтобы они --никогда не встречались в уравнении (заменив его на - -), либо для их защиты необходимо некоторое защитное кодирование.
MT0
Так что для последнего контрольного примера 13116/3 = -1нужно было бы написать так, 131 16/3 = -1чтобы удалить этот вызов REPLACE.
MT0
Ах, хорошо, так что замена действительно используется для ожидаемых правильных уравнений. Спасибо за добавление скрипты SQL, +1 от меня.
Кевин Круйссен
2

Powershell, 222 209 192 байта

param($x)1..13|%{0..(($i=$_)-1)|%{$a,$b='+-*/0123456789'[$i,$_]
$a+$b|?{!($x|%{$e,$r=$_-split'='
try{$r-(-join$(switch($e|% t*y){$a{$b}$b{$a}default{$_}})-replace'-',' -'|iex)}catch{1}}|gu)}}}

Тестовый сценарий и объяснение:

$f={

param($x)                               # array of strings with equations
1..13|%{                                #
    0..(($i=$_)-1)|%{                   # $i and $_ contains unique couples of different indecies
        $a,$b='+-*/0123456789'[$i,$_]  # $a and $b contains buttons to swap
        $g=$x|%{                        # for each equation from array
            $e,$r=$_-split'='           # split incorrect expression and correct result
            $e=-join$(switch($e|% t*y){ # swap buttons for each symbol in the expression
                $a{$b}
                $b{$a}
                default{$_}
            })
            $e=$e-replace'-',' -'       # insert a space before each '-'.
                                        # It need to work with negative numbers.
                                        # For example, '4--1' throws an exception, '4 - -1' returns '5'
            try{$r-($e|iex)}catch{1}    # Try to calc $e as powershell expression
                                        # return 0 if the expression result equal to the result of the calculation
                                        # return non zero integer otherwise
        }|gu                            # Get-unique of calculation for each equation
        if(!$g){                        # if $g is 0 or $null
                                        # then all calculations returns true
            $a+$b                       # Ok, return the couple of buttons
        }
    }
}

}

@(
    ,('2*','123=3','8423=252','4+4=8','4*7-10=417','9/3=3','42-9=-36')
    ,('/+','4/2=6','3/0=3','0/8+2=4','95-5=90','4+2=2')
    ,('1-','7+4=11','5-15=46','212-23=-2121')
    ,('42','4+8/2-9*1=-5','99/3-13=20','1+2+3+4=10','4-3-2-1=-6')
    ,('1-','9119=18','5-3=513','8*-9=152','13116/3=-1')
) | % {
    $e,$x=$_
    $r=&$f $x
    "$($e-eq$r): $r : $x"
}

Выход:

True: 2* : 123=3 8423=252 4+4=8 4*7-10=417 9/3=3 42-9=-36
True: /+ : 4/2=6 3/0=3 0/8+2=4 95-5=90 4+2=2
True: 1- : 7+4=11 5-15=46 212-23=-2121
True: 42 : 4+8/2-9*1=-5 99/3-13=20 1+2+3+4=10 4-3-2-1=-6
True: 1- : 9119=18 5-3=513 8*-9=152 13116/3=-1
Mazzy
источник
0

05AB1E , 21 байт

SÙãʒË_}ʒ¹s‡„--'+:.EQ

Введите в виде двух списков, во-первых, уравнения и результаты. Вывести в виде отфильтрованного списка пар с обоими поворотами (то есть [["2","*"],["*","2"]]).

Попробуйте онлайн или проверьте все контрольные примеры . (ПРИМЕЧАНИЕ. Использует устаревшую версию 05AB1E в TIO, поскольку .Eона отключена в более новой версии TIO. Из-за этого ïдобавляется дополнительная (приведение к целому числу), поскольку в устаревшей версии 05AB1E 1.0и 1внутри списков не были равны .)

Объяснение:

S              # Convert the (implicit) input-list of equations to a list of characters
               # (which implicitly flattens)
               #  i.e. ["18/18","98-8","55*88","-5--15"]
               #   → ["1","8","/","1","8","9","8","-","8","5","5","*","8","8","-","5","-","-","1","5"]
 Ù             # Only leave all unique characters
               #  → ["1","8","/","9","-","5","*"]
  ã            # Cartesian product with itself; creating each possible pair of characters
               #  → [["1","1"],["1","8"],["1","/"],["1","9"],["1","-"],["1","5"],["1","*"],["8","1"],["8","8"],["8","/"],["8","9"],["8","-"],["8","5"],["8","*"],["/","1"],["/","8"],["/","/"],["/","9"],["/","-"],["/","5"],["/","*"],["9","1"],["9","8"],["9","/"],["9","9"],["9","-"],["9","5"],["9","*"],["-","1"],["-","8"],["-","/"],["-","9"],["-","-"],["-","5"],["-","*"],["5","1"],["5","8"],["5","/"],["5","9"],["5","-"],["5","5"],["5","*"],["*","1"],["*","8"],["*","/"],["*","9"],["*","-"],["*","5"],["*","*"]]
    ʒ  }       # Filter it by:
     Ë_        #  Where both characters are unique
               #   i.e. → [["1","8"],["1","/"],["1","9"],["1","-"],["1","5"],["1","*"],["8","1"],["8","/"],["8","9"],["8","-"],["8","5"],["8","*"],["/","1"],["/","8"],["/","9"],["/","-"],["/","5"],["/","*"],["9","1"],["9","8"],["9","/"],["9","-"],["9","5"],["9","*"],["-","1"],["-","8"],["-","/"],["-","9"],["-","5"],["-","*"],["5","1"],["5","8"],["5","/"],["5","9"],["5","-"],["5","*"],["*","1"],["*","8"],["*","/"],["*","9"],["*","-"],["*","5"]]
    ʒ          # Then filter the pairs again by:
     ¹         #  Push the first input-list with equations
      s        #  Swap to take the pair we're filtering
       Â       #  Bifurcate it (short for Duplicate and Reverse)
              #  Transliterate; replacing the characters at the same indices in the input-list
               #   i.e. ["18/18","98-8","55*88","-5--15"] and ["8","5"]
               #    → ["15/15","95-5","88*55","-8--18"]
               #   i.e. ["9119","5-3","8*-9","13116/3"] and ["1","-"]
               #    → ["9--9","513","8*19","-3--6/3"]
      „--'+:  '#  Then replace all "--" with a "+"
               #   → ["15/15","95-5","88*55","-8+18"]
               #   → ["9+9","513","8*19","-3+6/3"]
      .E       #  And evaluate the strings with Python eval
               #   → [1.0,90,4840,10]
               #   → [18,513,152,-1.0]
        Q      #  And then check if this evaluated list is equal to the (implicit) second input
               #   i.e. [1.0,90,4840,10] and [1,90,4840,10] → 1 (truthy)
               #   i.e. [18,513,152,-1.0] and [18,513,152,-1] → 1 (truthy)
               # (and output the result implicitly)
               #   i.e. [["8","5"],["5","8"]
               #   i.e. [["1","-"],["-","1"]
Кевин Круйссен
источник