Yardım et! Hesap makinem arızalı!


28

Giriş

Hesap makinem tuhaf davranıyor. Bazen ben yazdığımda 8a görüntüler 2. Bazen yazdığımda, a 6görüntülenir +. Bazı düğmeler karışık!
Biri hangisini belirlememe yardımcı olabilir?

Meydan okuma:

Giriş: Doğru sonuçlarla hatalı denklemlerin listesi .

Çıktı: Değiştirilen iki düğme.

Örneğin:
Bir giriş olabilir:

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

Beklenen çıktılar için: 2ve *.

Niye ya? Zira TÜM denklemler 2 ve * 'lerin yerini değiştirirsek doğru olur:

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

Meydan okuma kuralları:

  • Giriş herhangi bir makul formatta olabilir. Boşluk içeren tek bir dize olabilir; bir dize listesi veya -array; denklemleri olan bir liste ve doğru sonuçları olan başka bir liste. Senin çağrı. Lütfen hangi giriş biçimini kullandığınızı belirtin!
    NOT: Bu aynı zamanda test senaryosunu veya -5--15olarak girmenize izin verildiği anlamına gelir . Ancak, sonuçta elde edilen bir sayı boşluksuz veya her basamak arasında boşluk bırakılarak girilmelidir. Bu nedenle test durumu ya da gibi girilebilir (nedene izin verilmemektedir, çünkü daha sonra bulmak için alan tarafından yönlendirilebilirsiniz ). Böylece boşluklar (biraz) isteğe bağlıdır ve izin verilir.-5- -15-5 - -15--911991199 1 1 991 19- -
  • Çıktı formatı da herhangi bir makul formatta olabilir. İki karakter olabilir; tek bir iki karakterli dize; iki karakteri içeren bir dize listesi. Senin çağrı. Yine, hangi çıktı biçimini kullandığınızı belirtin!
  • Bu harita için ayrı 14 çıktı kullanmanıza izin verilir 0123456789+-*/. Böylece, isterseniz iki farklı tamsayı çıkarmanıza bile izin verilir (yine, lütfen kullandığınız eşlemeyi belirtin).
  • Sadece tamsayıları desteklemeniz gerekir. Yani 1/8=0.125ya da gibi bir test vakası olmayacak 1/8=0.
  • Aritmetik işlenenleri desteklemeniz gerekir: adding ( +); çıkarma ( -); çarpma ( *veya ×veya ·); bölüm ( /veya ÷). (NOT: Parantez arasındaki karakterler sadece açıklama olarak eklenir.)
  • Negatif sayıları desteklemeniz gerekecek. Bu -, denklemde hem matematiksel bir işlemsel hem de negatif bir gösterge olarak yorumlanabilir.
  • Sen verilen yanlış denklemler varsayabiliriz ve sözde doğru denklemler (şimdiye şeyler gibi olmaz her zaman geçerlidir 4-/2veya 9+-+8örneğin).
  • Yanlış girdi denklemleri 0'a bölünme içerebilir, ancak düzeltilmiş ve beklenen denklemler asla 0'a bölünme içermez.
  • Yanlış giriş denklemleri, amaçlanan düğmeleri geri alsanız bile zaten doğru olabilir.
  • Belirli bir giriş denklemi, düğmelerin değişmesi için ( değiştirilen düğmelerle ve 4+4=8ve gibi 9/3=3denklemler gibi) alakasız olabilir .2*
  • Verilen test durumları ile yapılabilecek her zaman yalnızca bir takas mümkün olacağını varsayabilirsiniz.
  • Değiştirilecek her iki düğme de yanlış denklemlerden en az birinde her zaman bulunacaktır.

Genel kurallar:

  • Bu , bayt cinsinden en kısa cevap kazanır.
    Code-golf dillerinin, codegolfing olmayan dillerle cevap göndermekten vazgeçmesine izin vermeyin. Herhangi bir programlama dili için mümkün olduğunca kısa bir cevap bulmaya çalışın.
  • Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT fonksiyonlarını, uygun parametrelerle fonksiyonlarını ve geri dönüş tipini, tam programları kullanmanıza izin verilir. Senin çağrı.
  • Varsayılan Loopholes yasaktır.
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
  • Ayrıca, lütfen gerekirse bir açıklama ekleyin.

Test durumları:

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
"gerçek bölünme", yüzenleri desteklememiz gerektiği anlamına mı geliyor?
Outgolfer Erik

@EriktheOutgolfer Oops .. Bunu önceki bir aritmetik mücadelemden kopyaladım. Kaldırıldı ve sorunuzun cevabı olarak, sadece tamsayılarla uğraşmanıza gerek yok.
Kevin Cruijssen

1
Doğru bir denklemin bulunduğu bir test durumu öneririm --. Örneğin 1991 = 2, -/3 = 3. (Birçok dil bunu decrement operatörüyle karıştırır.)
nwellnhof

1
Sorun bir boşluk ekleyerek olmasıdır 91 19çözüm ise 9--9ve hiçbir boşluk 9119çözüm ise9229 test durumları oluştururken çözümü hakkında bilgi gerektirir. Buna izin verilseydi, sadece değiştirilen karakterlerden önce bir boşluk ekleyebilirdim ve çözüm derhal test durumundan elde edilebilirdi.
nwellnhof

1
Değerlendirme sol-sağ veya midir *ve /öncesinde +ve ikili -?
aschepler

Yanıtlar:


5

Perl 6 , 132 113 bayt

-19 baytlık Jo King'e teşekkürler.

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

Çevrimiçi deneyin!

Girdi, virgülle ayrılmış bir denklem dizesi ve virgülle ayrılmış bir sonuç dizesidir (umarım bu iyidir). Çıktı, değiştirilen iki düğmeyi içeren bir dizedir.

Doğru şekilde işler --. Kudreti ürün yanlış pozitif için ---, ++, **veya// , fakat bir test durumda ile gelip olamazdı.


Başa çıkmak zorunda değilsin ---; ++; **; //; ya da benzeri diğer şeyleri *+desteklemeniz gerekecek tek rakam bitişik olmayan çift --. Ayrıca, kodunuzu doğru .subst('-','- 'anlarsam, test vakasını -5--15bir boşlukla girmenize izin verildiğinden buna ihtiyacınız olmaz . Bu alanı programlı olarak eklemek için kod ekleyen ilk kişi siz değilsiniz, bu yüzden bunu daha açıklayıcı bir şekilde tanımlayacağım.
Kevin Cruijssen

2
@KevinCruijssen Bunun gibi şeylerle uğraşmak zorunda kalabilirim **çünkü Perl 6 ifadeleri olarak bir anlamı var ve yanlış pozitiflere neden olabilirler. 1992 = 1olabilir 1**2 = 1veya 1//2 = 1, örneğin. substDoğru denklemi içeren durumlar için ise --örneğin eklediğiniz yeni test durumu için.
nwellnhof

Cevabınız şu anda en az bayt sayısına sahip olandır, bu yüzden şimdilik kabul ediyorum. Birisi daha kısa bir şey bulursa, kontrol tekrar kayabilir.
Kevin Cruijssen,


11

JavaScript (ES7), 159 158 bayt

Düzenleme: --@Shaggy sayesinde Kayıtlı 1 byte ile ilgili güncellenmiş kurallara uymak için yeni sürüm

Sözdizimini tımar olarak girişi alır (e)(r)burada E denklem dizisi ve r, beklenen sonuçların bir dizidir. Bir karakter dizisi döndürü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){}")))

Test durumları

Biçimlendi ve yorumlandı

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
Sana bir bayt kurtarabilir miyiz evaling try / catch: codepen.io/anon/pen/rzRrLp .
Shaggy

@Shaggy Ah evet, güzel olan. Teşekkürler!
Arnauld,

Öyle görünüyor bu 139 bayt için kudreti çalışması.
Shaggy,

Evet, tam bir test odası koştum ve bunu tespit ettim.
Shaggy,

İçin çalışmıyor 1991 = 2 . Çözüm, 1--1 = 2birlikte olmalı 9ve -değiştirilmelidir.
nwellnhof

4

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

  • Mr. Xcode sayesinde 199 bayttan 193 bayta kadar
  • Halvard Hummel sayesinde 193 bayttan 173 bayta kadar
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

Çevrimiçi deneyin!



@ Mr.Xcoder açıklama için teşekkür ederim, ben tamir ediyorum ..
mdahmoune

1
Mr.Xcoder @ burada düzeltilmiş versiyonu
mdahmoune



4

Oracle SQL ve PL / SQL, 458 Bayt

Giriş herhangi bir makul formatta olabilir. [...] denklemleri olan bir liste ve doğru sonuçları olan başka bir liste.

PL / SQL işlevini derleyin (210 bytes):

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 bayt) çalıştırın:

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

TTest verileriyle bir tablo oluşturduktan sonra :

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

Çıktı:

V V_1
- ---
2 *
* 2

Önceki versiyon :

Gibi bir dize girişi kabul '123 = 3' :

Aynı PL / SQL işlevi ve SQL (322 bayt):

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

TTest verileriyle bir tablo oluşturduktan sonra :

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;

Çıktı:

V V_1
- ---
2 *
* 2

Güncelleme - Test :

SQL Fiddle

Oracle 11g R2 Şema Kurulumu :

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
/

Sorgu 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

Sonuçlar :

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

Sorgu 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

Sonuçlar :

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

Sorgu 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

Sonuçlar :

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

Sorgu 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

Sonuçlar :

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

Sorgu 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

Sonuçlar :

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

Sorgu 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

Sonuçlar :

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

Gerek yok ||REPLACE(x,'--','- -')||girmek için izin verilen giriş / çıkış biçimi, esnek -5--15olarak -5- -15eğer istersen. Ayrıca, tüm test vakalarının, özellikle de sonuncunun çalıştığını doğrulamamın en kolay yolu ne olurdu? Bir TIO-link bir şekilde mümkün mü?
Kevin Cruijssen

Yoksa ||REPLACE(x,'--','- -')||eklediğim son test davası gibi beklenen doğru bir denklem için mi kullanılıyor?
Kevin Cruijssen

1
@KevinCruijssen --, SQL'de bir yorum başlatır, bu nedenle ya test senaryolarının --, denklemde (bununla değiştirilerek - -) hiçbir zaman gerçekleşmeyecek şekilde formüle edilmesi gerekir ya da bunun için militan olmak için bazı savunma kodlamaları gerekir.
MT0

Bu yüzden son test davası için bu çağrıyı kaldıracak 13116/3 = -1şekilde yazılması gerekir . 131 16/3 = -1REPLACE
MT0

Ah tamam, bu yüzden yerine gerçekten beklenen doğru denklemler için kullanılır. Benden +1 olan SQL kemanını eklediğin için teşekkürler.
Kevin Cruijssen

2

Powershell, 222 209 192 bayt

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

Test komut dosyası ve açıklaması:

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

Çıktı:

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 bayt

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

İki liste halinde giriş yapın, önce denklemler, ikincisi sonuçlardır. Her iki dönüşlü (yani [["2","*"],["*","2"]]) filtrelenmiş çiftler listesi olarak çıktı .

Çevrimiçi deneyin veya tüm test durumlarını doğrulayın . (NOT: TIO'da 05AB1E'nin eski sürümünü kullanır, çünkü TIO'nun .Edaha yeni sürümünde devre dışı bırakılmıştır. Bu nedenle, bir ek ï(tamsayıya döküm) eklenmiştir, çünkü 05AB1E'nin eski sürümünde 1.0ve 1içindeki listeler eşit değildir .)

Açıklama:

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"]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.