Cứu giúp! Máy tính của tôi trục trặc!


28

Giới thiệu

Máy tính của tôi đang cư xử kỳ lạ. Đôi khi khi tôi gõ vào 8nó sẽ hiển thị a 2. Và đôi khi khi tôi gõ vào 6nó sẽ hiển thị a +. Một số nút được trộn lẫn!
Bất cứ ai có thể giúp tôi xác định đó?

Thử thách:

Đầu vào: Danh sách các phương trình không chính xác , với kết quả chính xác .

Đầu ra: Hai nút được hoán đổi.

Ví dụ:
Một đầu vào có thể là:

123    = 3
8423   = 252
4+4    = 8
4*7-10 = 417
9/3    = 3
42-9   = -36

Mà đầu ra dự kiến ​​là: 2*.

Tại sao? Bởi vì TẤT CẢ các phương trình sẽ đúng nếu chúng ta trao đổi 2 và *:

1*3    = 3
84*3   = 252
4+4    = 8
427-10 = 417
9/3    = 3
4*-9   = -36

Quy tắc thử thách:

  • Đầu vào có thể ở bất kỳ định dạng hợp lý. Có thể là một chuỗi đơn với giới hạn không gian; một danh sách chuỗi hoặc -array; một danh sách với các phương trình và một danh sách khác với kết quả chính xác. Cuộc gọi của bạn. Vui lòng cho biết định dạng đầu vào bạn đã sử dụng!
    LƯU Ý: Điều này cũng có nghĩa là bạn được phép nhập trường hợp kiểm tra -5--15-5- -15hoặc -5 - -15. Tuy nhiên, một số dẫn đến --phải được nhập vào mà không có khoảng trắng hoặc có khoảng trắng giữa mỗi chữ số. Vì vậy, trường hợp thử nghiệm 9119có thể được nhập vào như 9119hoặc 9 1 1 9(lý do 91 19không được phép là vì sau đó bạn có thể được hướng dẫn bởi không gian để tìm - -). Vì vậy, không gian là (phần nào) tùy chọn và được phép.
  • Định dạng đầu ra có thể ở bất kỳ định dạng hợp lý là tốt. Có thể là hai nhân vật; một chuỗi hai ký tự; một danh sách chuỗi chứa hai ký tự. Cuộc gọi của bạn. Một lần nữa, vui lòng cho biết định dạng đầu ra bạn đã sử dụng!
  • Bạn được phép sử dụng bất kỳ 14 đầu ra riêng biệt nào ánh xạ tới 0123456789+-*/. Vì vậy, bạn thậm chí được phép xuất hai số nguyên riêng biệt nếu bạn muốn (một lần nữa, vui lòng chỉ định ánh xạ bạn đã sử dụng, nếu có).
  • Bạn chỉ phải hỗ trợ số nguyên. Vì vậy, sẽ không có bất kỳ trường hợp thử nghiệm như 1/8=0.125hoặc 1/8=0.
  • Các toán hạng số học bạn sẽ phải hỗ trợ: thêm ( +); phép trừ ( -); phép nhân ( *hoặc ×hoặc ·); phân chia ( /hoặc ÷). (LƯU Ý: Các ký tự giữa dấu ngoặc đơn chỉ được thêm vào để làm rõ.)
  • Bạn sẽ phải hỗ trợ số âm. Điều này có nghĩa -được hiểu trong phương trình là cả toán hạng toán học hoặc chỉ báo âm.
  • Bạn có thể giả sử các phương trình không chính xác đã cho và các phương trình đúng được cho là luôn hợp lệ (vì vậy sẽ không có những thứ như 4-/2hoặc 9+-+8ví dụ).
  • Các phương trình đầu vào không chính xác có thể chứa một phép chia bằng 0, nhưng các phương trình được sửa và dự kiến ​​sẽ không bao giờ chứa phép chia cho 0.
  • Các phương trình đầu vào không chính xác có thể đã chính xác ngay cả khi bạn trao đổi các nút dự định trở lại.
  • Một phương trình đầu vào nhất định có thể không liên quan để các nút hoán đổi (như phương trình 4+4=89/3=3phương trình, với các nút được hoán đổi 2*).
  • Bạn có thể cho rằng sẽ luôn chỉ có một trao đổi có thể được thực hiện với các trường hợp thử nghiệm đã cho.
  • Cả hai nút để hoán đổi sẽ luôn có mặt trong ít nhất một trong các phương trình không chính xác.

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, các chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm.
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn.
  • Ngoài ra, xin vui lòng thêm một lời giải thích nếu cần thiết.

Các trường hợp thử nghiệm:

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
"Phân chia thực sự" có nghĩa là chúng ta phải hỗ trợ phao?
Erik the Outgolfer

@EriktheOutgolfer Rất tiếc .. Đã sao chép từ một thử thách số học trước đây của tôi. Đã xóa và như là câu trả lời cho câu hỏi của bạn, không bạn chỉ phải đối phó với số nguyên.
Kevin Cruijssen

1
Tôi muốn đề xuất một trường hợp thử nghiệm trong đó một phương trình đúng chứa --. Ví dụ 1991 = 2, -/3 = 3. (Nhiều ngôn ngữ nhầm lẫn điều này với toán tử giảm dần.)
nwellnhof

1
Vấn đề là việc thêm một khoảng trắng trong 91 19nếu giải pháp là 9--9và không có không gian trong 9119nếu giải pháp đó 9229đòi hỏi kiến ​​thức về giải pháp khi tạo các trường hợp thử nghiệm. Nếu điều này được cho phép, tôi chỉ có thể thêm một khoảng trắng trước khi các ký tự được hoán đổi và giải pháp có thể được lấy ngay từ trường hợp thử nghiệm.
nwellnhof

1
Là đánh giá từ trái sang phải, hoặc */trước +và nhị phân -?
aschepler

Câu trả lời:


5

Perl 6 , 132 113 byte

Cảm ơn Jo King cho -19 byte.

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

Hãy thử trực tuyến!

Đầu vào là một chuỗi các phương trình được phân tách bằng dấu phẩy và chuỗi kết quả được phân tách bằng dấu phẩy (hy vọng điều này là ổn). Đầu ra là một chuỗi chứa hai nút hoán đổi.

Xử lý chính xác --. Sản phẩm sức dương tính giả cho ---, ++, **, hay //, nhưng tôi không thể đưa ra một trường hợp thử nghiệm.


Bạn không phải xử lý ---; ++; **; //; hoặc những thứ khác như *+vv Chỉ có hai chữ số liền kề duy nhất bạn sẽ phải hỗ trợ là --. Ngoài ra, nếu tôi hiểu chính xác mã của bạn, bạn sẽ không cần .subst('-','- ', vì việc nhập trường hợp thử nghiệm -5--15có khoảng trắng được cho phép. Bạn không phải là người đầu tiên thêm mã để thêm không gian này theo chương trình, vì vậy tôi sẽ chỉ định rõ hơn điều này trong phần mô tả thử thách.
Kevin Cruijssen

2
@KevinCruijssen Tôi có thể phải xử lý những việc như thế **bởi vì chúng có ý nghĩa như biểu thức Perl 6 và có thể gây ra dương tính giả. 1992 = 1có thể 1**2 = 1hoặc 1//2 = 1, ví dụ. Đây substlà trường hợp phương trình đúng chứa --, ví dụ trường hợp kiểm thử mới mà bạn đã thêm.
nwellnhof

Câu trả lời của bạn hiện là câu có ít byte nhất, vì vậy tôi sẽ chấp nhận nó ngay bây giờ. Nếu ai đó nghĩ ra một cái gì đó ngắn hơn, kiểm tra có thể thay đổi một lần nữa.
Kevin Cruijssen


11

JavaScript (ES7), 159 158 byte

Chỉnh sửa: phiên bản mới để tuân thủ các quy tắc được cập nhật liên quan đến --
Đã lưu 1 byte nhờ @Shaggy

Đưa đầu vào theo cú pháp currying trong (e)(r)đó e là mảng phương trình và r là mảng kết quả mong đợi. Trả về một mảng các ký tự.

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){}")))

Các trường hợp thử nghiệm

Định dạng và nhận xét

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
Tôi nghĩ bạn có thể lưu một byte bằng cách evalnhập try / catch: codepen.io/anon/pen/rzRrLp .
Xù xì

@Shaggy À đúng rồi, đẹp quá. Cảm ơn!
Arnauld

Có vẻ như điều này có thể làm việc cho 139 byte.
Xù xì

Vâng, tôi vừa chạy một bộ thử nghiệm đầy đủ và phát hiện ra điều đó.
Xù xì

Không làm việc cho 1991 = 2. Các giải pháp nên được 1--1 = 2với 9-trao đổi.
nwellnhof

4

Python 2 , 204 , 199 , 193 , 173 , 165 byte

  • Từ 199 byte đến 193 byte nhờ Mr. Xcode
  • Từ 193 byte đến 173 byte nhờ Halvard Hummel
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

Hãy thử trực tuyến!



@ Mr.Xcoder thanx vì nhận xét, tôi đang sửa nó ..
mdahmoune

1
@ Mr.Xcoder ở đây là phiên bản đã sửa
mdahmoune



4

Oracle SQL & PL / SQL, 458 byte

Đầu vào có thể ở bất kỳ định dạng hợp lý. [...] một danh sách với các phương trình và một danh sách khác có kết quả chính xác.

Biên dịch hàm PL / SQL (210 byte):

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;

Chạy SQL (248 byte):

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

Sau khi tạo bảng Tvới dữ liệu thử nghiệm:

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

Đầu ra:

V V_1
- ---
2 *
* 2

Phiên bản trước :

Giả sử một đầu vào chuỗi như '123 = 3':

Cùng chức năng PL / SQL và SQL (322 byte):

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

Sau khi tạo bảng Tvới dữ liệu thử nghiệm:

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;

Đầu ra:

V V_1
- ---
2 *
* 2

Cập nhật - Kiểm tra :

Câu đố SQL

Thiết lập lược đồ 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
/

Truy vấn 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

Kết quả :

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

Truy vấn 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

Kết quả :

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

Truy vấn 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

Kết quả :

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

Truy vấn 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

Kết quả :

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

Truy vấn 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

Kết quả :

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

Truy vấn 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

Kết quả :

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

Không cần ||REPLACE(x,'--','- -')||, định dạng đầu vào / đầu ra là linh hoạt, vì vậy bạn được phép nhập -5--15như -5- -15thể bạn muốn. Ngoài ra, cách dễ nhất để tôi xác minh tất cả các trường hợp thử nghiệm hoạt động, đặc biệt là trường hợp cuối cùng là gì? Là một liên kết TIO bằng cách nào đó có thể?
Kevin Cruijssen

Hoặc là được ||REPLACE(x,'--','- -')||sử dụng cho một phương trình chính xác dự kiến, như trường hợp thử nghiệm cuối cùng tôi đã thêm?
Kevin Cruijssen

1
@KevinCruijssen --bắt đầu một nhận xét bằng SQL, do đó, các trường hợp thử nghiệm cần phải được xây dựng sao cho --không bao giờ xảy ra trong phương trình (thay thế nó bằng - -) hoặc nó cần một số mã hóa phòng thủ để thực hiện điều đó.
MT0

Vì vậy, đối với trường hợp thử nghiệm cuối cùng 13116/3 = -1sẽ cần phải được viết như 131 16/3 = -1để loại bỏ cuộc gọi đó REPLACE.
MT0

Ah ok, vì vậy thay thế thực sự được sử dụng cho các phương trình chính xác dự kiến. Cảm ơn bạn đã thêm SQL Fiddle, +1 từ tôi.
Kevin Cruijssen

2

Powershell, 222 209 192 byte

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)}}}

Kiểm tra kịch bản và giải thích:

$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"
}

Đầu ra:

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 byte

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

Nhập vào dưới dạng hai danh sách, đầu tiên là phương trình và thứ hai là kết quả. Đầu ra dưới dạng một danh sách các cặp được lọc với cả hai phép quay (nghĩa là [["2","*"],["*","2"]]).

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm . (LƯU Ý: Sử dụng phiên bản kế thừa của 05AB1E trong TIO, vì .Ebị vô hiệu hóa trong phiên bản mới hơn trên TIO. Do đó, một bổ sung ï(chuyển thành số nguyên) được thêm vào, bởi vì trong phiên bản kế thừa của 05AB1E 1.01các danh sách bên trong không bằng nhau .)

Giải trình:

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"]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.