도움! 계산기가 오작동합니다!


28

소개

계산기가 이상하게 작동합니다. 때로는 내가 입력하면가 8표시됩니다 2. 때로는 입력하면 a 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

도전 규칙 :

  • 적절한 형식으로 입력 할 수 있습니다. 공백으로 구분 된 단일 문자열 일 수 있습니다. 문자열리스트 또는-배열; 방정식이있는 목록과 올바른 결과가있는 다른 목록. 당신의 전화. 사용한 입력 형식을 말씀해주십시오!
    참고 : 또한 테스트 케이스 -5--15-5- -15또는 로 입력 할 수 있음을 의미합니다 -5 - -15. 그러나 --공백없이 또는 모든 숫자 사이에 공백이 있는 숫자를 입력해야합니다. 따라서 테스트 사례 91199119또는 처럼 입력 할 수 있습니다 9 1 1 9(이유 91 19는 허용되지 않기 때문에 찾을 공간으로 안내 할 수 있기 때문입니다 - -). 따라서 공백은 (약간) 선택적이고 허용됩니다.
  • 출력 형식도 모든 합리적인 형식이 될 수 있습니다. 두 문자 일 수 있습니다. 단일 2 문자 스트링; 두 문자를 포함하는 문자열 목록 당신의 전화. 사용한 출력 형식을 다시 말씀해주십시오.
  • 에 매핑되는 고유 한 14 개의 출력을 사용할 수 있습니다 0123456789+-*/. 따라서 원하는 경우 두 개의 고유 한 정수를 출력 할 수도 있습니다 (다시 사용했던 매핑을 지정하십시오).
  • 정수만 지원하면됩니다. 따라서 1/8=0.125또는 같은 테스트 사례는 없습니다 1/8=0.
  • 지원해야하는 산술 피연산자 : 덧셈 ( +); 빼기 ( -); 곱셈 ( *또는 ×또는 ·); 나누기 ( /또는 ÷). (참고 : 괄호 안의 문자는 설명으로 만 추가됩니다.)
  • 음수를 지원해야합니다. 이는 -방정식에서 수학 피연산자 또는 음수 표시기 둘 다로 해석 될 수 있음을 의미 합니다.
  • 주어진 잘못된 방정식과 올바른 방정식이 항상 유효하다고 가정 할 수 있습니다 (따라서 유사 4-/2하거나 9+-+8예를 들어 있지 않음 ).
  • 잘못된 입력 방정식에는 0으로 나누기가 포함될 수 있지만 수정 및 예상 방정식에는 0으로 나누기가 포함되지 않습니다.
  • 의도 한 버튼을 다시 바꾸어도 잘못된 입력 방정식이 이미 정확할 수 있습니다.
  • 주어진 입력 식 (스왑 등의 버튼에 무관 할 수 4+4=89/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 -
code-golf  number  arithmetic  integer  code-golf  math  number  geometry  code-golf  grid  code-golf  math  number  sequence  primes  code-golf  sequence  kolmogorov-complexity  code-golf  string  ascii-art  alphabet  code-golf  math  sequence  integer  code-golf  number-theory  integer  natural-language  code-golf  date  code-golf  function  code-golf  ascii-art  code-golf  math  number-theory  primes  classification  code-golf  array-manipulation  decision-problem  matrix  code-golf  number  code-golf  code-golf  ascii-art  matrix  code-golf  string  code-golf  sequence  base-conversion  code-golf  code-golf  math  number-theory  combinatorics  integer-partitions  code-golf  integer  binary  base-conversion  code-golf  integer  base-conversion  palindrome  code-golf  code-golf  integer-partitions  code-golf  math  ascii-art  matrix  code-golf  number  sequence  number-theory  matrix  code-golf  interpreter  code-golf  graph-theory  code-golf  ascii-art  decision-problem  code-golf  division  code-golf  array-manipulation  primes  code-golf  string  ascii-art  code-golf  primes  counting  code-golf  matrix  unicode  code-golf  source-layout  code-golf  grammars  code-golf  string  cops-and-robbers  regular-expression  obfuscation  string  code-challenge  cops-and-robbers  regular-expression  code-golf  kolmogorov-complexity  game  card-games  code-golf  kolmogorov-complexity  code-golf  array-manipulation  matrix  code-challenge  cops-and-robbers  code-challenge  decision-problem  cops-and-robbers  code-golf  permutations 

2
"실제 나누기"는 우리가 수레를 지원해야한다는 것을 의미합니까?
Erik the Outgolfer

@EriktheOutgolfer 죄송합니다 .. 이전의 산술 도전 과제에서 복사했습니다. 제거되었으며 귀하의 질문에 대한 답변으로 정수만 처리하면됩니다.
Kevin Cruijssen

1
올바른 방정식에 포함 된 테스트 사례를 제안합니다 --. 예를 들면 1991 = 2, -/3 = 3. (많은 언어들이 이것을 감소 ​​연산자와 혼동합니다.)
nwellnhof

1
문제는 91 19솔루션이 있는 경우 공간을 추가 하고 솔루션에 9--9공간이없는 경우 테스트 케이스를 작성할 때 솔루션에 대한 지식 91199229필요하다는 것입니다. 이것이 허용되면 스왑 된 문자 앞에 공백을 추가하면 솔루션을 즉시 테스트 사례에서 파생 할 수 있습니다.
nwellnhof

1
평가 왼쪽 - 오른쪽, 또는인가 */이전 +및 바이너리 -?
aschepler

답변:


5

펄 6 , 132113 바이트

-19 바이트의 Jo King에게 감사합니다.

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

온라인으로 사용해보십시오!

입력 값은 쉼표로 구분 된 일련의 방정식과 쉼표로 분리 된 일련의 결과입니다 (괜찮아요). 출력은 두 개의 교체 된 버튼이 포함 된 문자열입니다.

올바르게 처리합니다 --. 마이트 제품 오탐 (false positive)을 위해 ---, ++, **, 또는 //,하지만 테스트 케이스와 함께 올 수 없었다.


당신은 처리 할 필요가 없습니다 ---; ++; **; //; 또는 다른 것들과 같은 것들 *+입니다 --. 지원해야 할 유일한 두 자리수가 아닌 숫자는 입니다. 또한 코드를 올바르게 이해 하면 공백이 .subst('-','- '있는 테스트 케이스 -5--15를 입력 할 수 있으므로 필요하지 않습니다. 이 공간을 프로그래밍 방식으로 추가하는 코드를 처음으로 추가 한 것은 아니므로, 챌린지 설명에서 더 명확하게 지정하겠습니다.
Kevin Cruijssen

2
@KevinCruijssen 나는 **Perl 6 표현과 같은 의미를 가지고 있고 오탐을 일으킬 수 있기 때문에 같은 것을 처리해야 할 수도 있습니다. 예를 들어 또는 일 1992 = 1수 있습니다 . 는 정확한 방정식에 포함 된 경우입니다 예를 추가 한 새로운 테스트 케이스에 대해. 1**2 = 11//2 = 1subst--
nwellnhof

귀하의 답변은 현재 바이트 수가 가장 적은 답변이므로 지금은 받아 드리겠습니다. 누군가 더 짧은 것을 발견하면 수표가 다시 바뀔 수 있습니다.
Kevin Cruijssen


11

자바 스크립트 (ES7) 159 158 바이트

편집 : --@Shaggy 덕분 저장된 1 바이트에 관한 업데이트 된 규칙을 준수하는 새 버전

구문 무두질에서 입력을 받고, (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()

1
난 당신에 의해 바이트를 저장할 수 있다고 생각 evalING를 try / catch: codepen.io/anon/pen/rzRrLp를 .
얽히고 설킨

@Shaggy Ah 네, 좋습니다. 감사!
Arnauld

그것은 모양 139 바이트 힘 작동합니다.
얽히고 설킨

네, 방금 전체 테스트 스위트를 실행하고 발견했습니다.
얽히고 설킨

작동하지 않습니다 1991 = 2. 이 솔루션은해야 1--1 = 2와 함께 9하고 -교환.
nwellnhof

4

파이썬 2 , 204 , 199 , 193 , 173 , 165 바이트

  • Mr. Xcode 덕분에 199 바이트에서 193 바이트로
  • Halvard Hummel 덕분에 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

온라인으로 사용해보십시오!



말을 위해 @ Mr.Xcoder 고맙습니다, 나는 그것을 고치고있다 ..
mdahmoune

1
@ Mr.Xcoder 여기 수정 된 버전입니다
mdahmoune



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 바이올린

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 |

에 대한 필요 ||REPLACE(x,'--','- -')||당신이 입력에 허용되도록 입력 / 출력 형식은 유연하지 -5--15으로 -5- -15당신이 원하는 경우. 또한 모든 테스트 사례, 특히 마지막 테스트 사례가 작동하는지 확인하는 가장 쉬운 방법은 무엇입니까? 어떻게 든 TIO 링크가 가능합니까?
Kevin Cruijssen

또는 ||REPLACE(x,'--','- -')||내가 추가 한 마지막 테스트 사례와 같이 예상되는 올바른 방정식에 사용됩니까?
Kevin Cruijssen

1
@KevinCruijssen --은 SQL에서 주석을 시작하므로 --수식에서 절대 발생하지 않는 테스트 사례를 공식화해야 - -하거나 (로 대체 ) 또는이를 위해 방어 적 코딩이 필요합니다.
MT0

따라서 마지막 테스트 사례의 경우 해당 호출을 제거하기 위해 13116/3 = -1작성해야 131 16/3 = -1합니다 REPLACE.
MT0

아 그래, 대체는 예상되는 올바른 방정식에 실제로 사용됩니다. +1의 SQL 바이올린을 추가해 주셔서 감사합니다.
Kevin Cruijssen

2

파워 쉘, 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

0

05AB1E , 21 바이트

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

첫 번째는 방정식이고 두 번째는 결과 인 두 개의 목록으로 입력하십시오. 두 회전 (즉 [["2","*"],["*","2"]])을 가진 필터링 된 쌍의 목록으로 출력 합니다.

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 . (참고 : TIO .E의 최신 버전에서는 비활성화되어 있기 때문에 TIO에서 기존 버전의 05AB1E를 사용합니다 . 그 때문에 ï05AB1E의 레거시 버전 1.01내부 목록이 같지 않기 때문에 추가로 변환 (정수로 변환)이 추가됩니다. .)

설명:

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"]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.