Membantu! Kerusakan kalkulator saya!


28

pengantar

Kalkulator saya bertingkah aneh. Kadang-kadang ketika saya mengetik 8itu menampilkan a 2. Dan terkadang ketika saya mengetik a 6itu menampilkan a +. Beberapa tombol tercampur aduk!
Adakah yang bisa membantu saya menentukan yang mana?

Tantangan:

Input: Daftar persamaan yang salah , dengan hasil yang benar .

Output: Dua tombol yang ditukar.

Misalnya:
Suatu input dapat berupa:

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

Untuk itu output yang diharapkan adalah: 2dan *.

Mengapa? Karena SEMUA persamaan akan benar jika kita menukar 2 dan *:

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

Aturan tantangan:

  • Input dapat dalam format apa pun yang masuk akal. Dapat berupa string tunggal dengan ruang terbatas; daftar string atau -array; daftar dengan persamaan dan daftar lain dengan hasil yang benar. Panggilanmu. Harap sebutkan format input mana yang telah Anda gunakan!
    CATATAN: Ini juga berarti Anda diizinkan memasukkan kasus uji -5--15sebagai -5- -15atau -5 - -15. Namun, angka yang dihasilkan --harus dimasukkan tanpa spasi atau dengan spasi di antara setiap digit. Jadi test case 9119dapat dimasukkan seperti 9119atau 9 1 1 9(alasan 91 19tidak diperbolehkan adalah karena Anda kemudian dapat dibimbing oleh ruang untuk menemukan - -). Jadi spasi (agak) opsional dan diizinkan.
  • Format output juga bisa dalam format yang masuk akal. Bisa dua karakter; string dua karakter tunggal; daftar string yang berisi dua karakter. Panggilanmu. Sekali lagi, sebutkan format output mana yang telah Anda gunakan!
  • Anda diizinkan untuk menggunakan 14 output berbeda yang dipetakan 0123456789+-*/. Jadi Anda bahkan diperbolehkan untuk mengeluarkan dua bilangan bulat yang berbeda jika Anda mau (sekali lagi, sebutkan pemetaan yang Anda gunakan, jika ada).
  • Anda hanya perlu mendukung bilangan bulat. Jadi tidak akan ada test case seperti 1/8=0.125atau 1/8=0.
  • Operan aritmatika yang harus Anda dukung: Selain ( +); pengurangan ( -); multiplikasi ( *atau ×atau ·); divisi ( /atau ÷). (CATATAN: Karakter antara kurung hanya ditambahkan sebagai klarifikasi.)
  • Anda harus mendukung angka negatif. Ini berarti -dapat diartikan dalam persamaan sebagai operan matematika atau indikator negatif.
  • Anda dapat mengasumsikan persamaan yang diberikan salah dan seharusnya persamaan yang benar selalu valid (sehingga tidak akan ada hal-hal seperti 4-/2atau 9+-+8misalnya).
  • Input-persamaan yang salah dapat berisi pembagian dengan 0, tetapi persamaan yang dikoreksi dan diharapkan tidak akan mengandung pembagian dengan 0.
  • Input-persamaan yang salah sudah bisa benar bahkan jika Anda menukar tombol yang diinginkan kembali.
  • Persamaan input yang diberikan dapat menjadi tidak relevan untuk tombol untuk bertukar (seperti 4+4=8dan 9/3=3persamaan, dengan tombol swapped 2dan *).
  • Anda dapat mengasumsikan akan selalu ada hanya satu kemungkinan swap yang dapat dilakukan dengan test case yang diberikan.
  • Kedua tombol untuk bertukar akan selalu ada setidaknya dalam salah satu persamaan yang salah.

Aturan umum:

  • Ini adalah , jadi jawaban tersingkat dalam byte menang.
    Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'.
  • Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
  • Celah default tidak diperbolehkan.
  • Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
  • Juga, silakan tambahkan penjelasan jika perlu.

Kasus uji:

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
"pembagian nyata" berarti kita harus mendukung kendaraan hias?
Erik the Outgolfer

@EriktheOutgolfer Ups .. Menyalin itu dari tantangan aritmatika saya sebelumnya. Dihapus, dan sebagai jawaban untuk pertanyaan Anda, Anda hanya perlu berurusan dengan bilangan bulat.
Kevin Cruijssen

1
Saya akan menyarankan test case di mana persamaan yang benar mengandung --. Sebagai contoh 1991 = 2, -/3 = 3. (Banyak bahasa mengacaukan hal ini dengan operator penurunan.)
nwellnhof

1
Masalahnya adalah menambahkan spasi 91 19jika solusinya 9--9dan tidak ada ruang 9119jika solusinya 9229membutuhkan pengetahuan tentang solusi saat membuat kasus uji. Jika ini dibolehkan, saya bisa menambahkan spasi hanya sebelum karakter yang ditukar dan solusinya dapat langsung berasal dari test case.
nwellnhof

1
Apakah evaluasi kiri ke kanan, atau *dan /sebelum +dan biner -?
aschepler

Jawaban:


5

Perl 6 , 132 113 byte

Terima kasih kepada Jo King untuk -19 byte.

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

Cobalah online!

Input adalah string persamaan yang dipisah koma dan string hasil yang dipisahkan koma (harap ini OK). Output adalah string yang berisi dua tombol yang ditukar.

Menangani dengan benar --. Produk kekuatan positif palsu untuk ---, ++, **, atau //, tapi aku tidak bisa datang dengan kasus uji.


Anda tidak harus menangani ---; ++; **; //; atau hal-hal lain seperti *+dll Satu-satunya ganda yang berdekatan non-digit Anda harus dukungan --. Juga, jika saya memahami kode Anda dengan benar, Anda tidak akan perlu .subst('-','- ', karena memasukkan test case -5--15dengan spasi diperbolehkan. Anda bukan yang pertama menambahkan kode untuk menambahkan ruang ini secara terprogram, jadi saya akan menentukan ini lebih jelas dalam deskripsi tantangan.
Kevin Cruijssen

2
@KevinCruijssen Saya mungkin harus menangani hal-hal seperti **karena mereka memiliki arti sebagai ekspresi Perl 6 dan mungkin menyebabkan positif palsu. 1992 = 1bisa 1**2 = 1atau 1//2 = 1, misalnya. Ini substuntuk kasus di mana persamaan yang benar berisi --, misalnya kasus uji baru yang Anda tambahkan.
nwellnhof

Jawaban Anda saat ini adalah yang dengan jumlah byte paling sedikit, jadi saya akan menerimanya untuk saat ini. Jika seseorang menemukan sesuatu yang lebih pendek, pemeriksaan mungkin bergeser lagi.
Kevin Cruijssen


11

JavaScript (ES7), 159 158 byte

Sunting: versi baru untuk mematuhi aturan yang diperbarui tentang --
Tersimpan 1 byte berkat @Shaggy

Mengambil input dalam sintaks currying di (e)(r)mana e adalah array dari persamaan dan r adalah array dari hasil yang diharapkan. Mengembalikan array karakter.

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

Uji kasus

Diformat dan dikomentari

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
Saya pikir Anda dapat menyimpan byte dengan evalmemasukkan try / catch: codepen.io/anon/pen/rzRrLp .
Shaggy

@ Shaggy Ah ya, bagus. Terima kasih!
Arnauld

Sepertinya ini mungkin bekerja untuk 139 byte.
Shaggy

Ya, saya baru saja menjalankan test suite penuh dan melihatnya.
Shaggy

Tidak berhasil 1991 = 2. Solusinya harus 1--1 = 2dengan 9dan -ditukar.
nwellnhof

4

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

  • Dari 199 byte hingga 193 byte, terima kasih kepada Tn. Xcode
  • Dari 193 byte hingga 173 byte, terima kasih kepada 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

Cobalah online!



@ Mr.Xcoder thanx untuk pernyataan itu, saya memperbaikinya ..
mdahmoune

1
@ Mr.Xcoder di sini adalah versi yang diperbaiki
mdahmoune



4

Oracle SQL & PL / SQL, 458 Bytes

Input dapat dalam format apa pun yang masuk akal. [...] daftar dengan persamaan dan daftar lain dengan hasil yang benar.

Kompilasi fungsi 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;

Jalankan 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

Setelah membuat tabel Tdengan data tes:

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

Keluaran:

V V_1
- ---
2 *
* 2

Versi Sebelumnya :

Diasumsikan input string seperti '123 = 3':

Fungsi PL / SQL dan SQL (322 byte) yang sama:

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

Setelah membuat tabel Tdengan data tes:

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;

Keluaran:

V V_1
- ---
2 *
* 2

Pembaruan - Pengujian :

SQL Fiddle

Pengaturan Skema 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
/

Pertanyaan 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

Hasil :

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

Pertanyaan 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

Hasil :

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

Pertanyaan 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

Hasil :

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

Pertanyaan 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

Hasil :

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

Pertanyaan 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

Hasil :

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

Pertanyaan 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

Hasil :

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

Tidak perlu ||REPLACE(x,'--','- -')||, format input / output fleksibel, jadi Anda diizinkan untuk memasukkan -5--15seolah- -5- -15olah Anda mau. Juga, apa cara termudah bagi saya untuk memverifikasi semua kasus uji berfungsi, terutama yang terakhir? Apakah tautan TIO bisa dilakukan?
Kevin Cruijssen

Atau ||REPLACE(x,'--','- -')||digunakan untuk persamaan yang diharapkan yang benar, seperti kasus uji terakhir yang saya tambahkan?
Kevin Cruijssen

1
@KevinCruijssen --memulai komentar dalam SQL, sehingga kasus uji perlu dirumuskan sehingga --tidak pernah terjadi dalam persamaan (menggantinya dengan - -) atau memerlukan beberapa kode defensif untuk mencegahnya.
MT0

Jadi untuk kasus uji terakhir 13116/3 = -1perlu ditulis 131 16/3 = -1untuk menghapus panggilan itu REPLACE.
MT0

Ah ok, jadi ganti ini memang digunakan untuk persamaan yang diharapkan benar. Terima kasih telah menambahkan biola SQL, +1 dari saya.
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)}}}

Naskah uji dan penjelasan:

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

Keluaran:

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

Input sebagai dua daftar, yang pertama adalah persamaan dan yang kedua adalah hasilnya. Output sebagai daftar pasangan yang difilter dengan kedua rotasi (yaitu [["2","*"],["*","2"]]).

Cobalah secara online atau verifikasi semua kasus uji . (CATATAN: Menggunakan versi lawas 05AB1E di TIO, karena .Edinonaktifkan di versi yang lebih baru di TIO. Karena itu, ditambahkan ï(cast to integer) tambahan, karena dalam versi lawas 05AB1E 1.0dan 1daftar di dalam tidak sama. .)

Penjelasan:

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"]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.