Hilfe! Mein Rechner funktioniert nicht!

28

Einführung

Mein Rechner verhält sich komisch. Manchmal, wenn ich einen 8eingebe, wird ein angezeigt 2. Und manchmal, wenn ich a 6eingebe, zeigt es a an +. Einige Tasten sind vertauscht!
Könnte mir jemand helfen, welche zu bestimmen?

Herausforderung:

Eingabe: Liste der falschen Gleichungen mit korrekten Ergebnissen.

Ausgabe: Die beiden Tasten, die getauscht werden.

Zum Beispiel:
Eine Eingabe könnte sein:

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

Für welche sind die erwarteten Ergebnisse: 2und *.

Warum? Weil ALLE Gleichungen korrekt wären, wenn wir die 2er und *er vertauschen würden:

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

Herausforderungsregeln:

  • Die Eingabe kann in jedem vernünftigen Format erfolgen. Kann eine einzelne Zeichenfolge mit Leerzeichen sein. eine String-Liste oder -Anordnung; eine Liste mit Gleichungen und eine andere Liste mit den richtigen Ergebnissen. Ihr Anruf. Bitte geben Sie an, welches Eingabeformat Sie verwendet haben!
    HINWEIS: Dies bedeutet auch, dass Sie den Testfall -5--15als -5- -15oder eingeben dürfen -5 - -15. Eine Zahl, die zu führt, --sollte jedoch entweder ohne Leerzeichen oder mit einem Leerzeichen zwischen jeder Ziffer eingegeben werden. So kann der Testfall 9119wie 9119oder eingegeben werden 9 1 1 9(Grund 91 19nicht erlaubt ist, weil Sie sich dann durch den Ort zum Finden leiten lassen können - -). Leerzeichen sind also (etwas) optional und erlaubt.
  • Das Ausgabeformat kann ebenfalls in jedem vernünftigen Format vorliegen. Kann aus zwei Zeichen bestehen. eine einzelne zweistellige Zeichenfolge; eine String-Liste mit den beiden Zeichen. Ihr Anruf. Bitte geben Sie noch einmal an, welches Ausgabeformat Sie verwendet haben!
  • Sie können 14 verschiedene Ausgänge verwenden, denen Sie zugeordnet sind 0123456789+-*/. Sie können also sogar zwei verschiedene Ganzzahlen ausgeben, wenn Sie dies möchten (geben Sie gegebenenfalls erneut das verwendete Mapping an).
  • Sie müssen nur ganze Zahlen unterstützen. Es wird also keine Testfälle wie 1/8=0.125oder geben 1/8=0.
  • Arithmetische Operanden, die Sie unterstützen müssen: addition ( +); Subtraktion ( -); Multiplikation ( *oder ×oder ·); Abteilung ( /oder ÷). (HINWEIS: Zeichen in Klammern werden nur zur Verdeutlichung hinzugefügt.)
  • Sie müssen negative Zahlen unterstützen. Dieses Mittel -kann in der Gleichung sowohl als mathematischer Operand als auch als negativer Indikator interpretiert werden.
  • Sie können annehmen, dass die angegebenen falschen Gleichungen und die angenommenen korrekten Gleichungen immer gültig sind (es wird also keine Dinge wie 4-/2oder geben 9+-+8).
  • Die falschen Eingangsgleichungen können eine Division durch 0 enthalten, aber die korrigierten und erwarteten Gleichungen enthalten niemals eine Division durch 0.
  • Die falschen Eingabe-Gleichungen können bereits richtig sein, auch wenn Sie die beabsichtigten Schaltflächen zurücktauschen.
  • Eine gegebene Eingang Gleichung kann für die Tasten zu tauschen (wie das irrelevant sein 4+4=8und 9/3=3Gleichungen, mit den Tasten ausgelagert 2und *).
  • Sie können davon ausgehen, dass für die angegebenen Testfälle immer nur ein Swap möglich ist.
  • Beide zu tauschenden Schaltflächen sind immer in mindestens einer der falschen Gleichungen vorhanden.

Allgemeine Regeln:

  • Das ist , also gewinnt die kürzeste Antwort in Bytes.
    Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden.
  • Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
  • Standardlücken sind verboten.
  • Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
  • Fügen Sie ggf. auch eine Erklärung hinzu.

Testfälle:

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 -
Kevin Cruijssen
quelle
2
"echte Teilung" bedeutet, wir müssen Schwimmer unterstützen?
Erik der Outgolfer
@EriktheOutgolfer Ups .. Kopiert das von einer früheren Rechenaufgabe von mir. Entfernt und als Antwort auf Ihre Frage, nein, Sie müssen sich nur mit ganzen Zahlen befassen.
Kevin Cruijssen
1
Ich würde einen Testfall vorschlagen, in dem eine korrekte Gleichung enthalten ist --. Zum Beispiel 1991 = 2, -/3 = 3. (In vielen Sprachen wird dies mit dem Dekrementierungsoperator verwechselt.)
nwellnhof
1
Das Problem ist, dass das Hinzufügen eines Leerzeichens in, 91 19wenn die Lösung vorhanden ist, 9--9und kein Leerzeichen in, 9119wenn die Lösung vorhanden ist 9229, Kenntnisse über die Lösung beim Erstellen der Testfälle erfordert. Wenn dies erlaubt wäre, könnte ich einfach nur ein Leerzeichen vor den ausgetauschten Zeichen einfügen und die Lösung könnte sofort aus dem Testfall abgeleitet werden.
Nwellnhof
1
Ist die Auswertung von links nach rechts oder *und /vor +und binär -?
Aschepler

Antworten:

5

Perl 6 , 132 113 Bytes

Vielen Dank an Jo King für -19 Bytes.

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

Probieren Sie es online!

Die Eingabe ist eine durch Kommas getrennte Folge von Gleichungen und eine durch Kommas getrennte Folge von Ergebnissen (ich hoffe, das ist in Ordnung). Die Ausgabe ist eine Zeichenfolge, die die beiden vertauschten Schaltflächen enthält.

Richtig behandelt --. Might Produkt Fehlalarme für ---, ++, **, oder //, aber ich konnte nicht mit einem Testfall kommen.

nwellnhof
quelle
Du musst nicht damit umgehen ---; ++; **; //; oder andere Dinge wie *+etc. Die einzige doppelt benachbarte Nicht-Ziffer, die Sie unterstützen müssen, ist --. Wenn ich Ihren Code richtig verstehe, brauchen Sie ihn auch nicht .subst('-','- ', da die Eingabe des Testfalls -5--15mit einem Leerzeichen zulässig ist. Sie sind nicht der erste, der Code hinzufügt, um diesen Bereich programmgesteuert hinzuzufügen, daher werde ich dies in der Beschreibung der Herausforderung genauer angeben.
Kevin Cruijssen
2
@ KevinCruijssen Ich muss möglicherweise Dinge wie behandeln, **weil sie eine Bedeutung als Perl 6-Ausdrücke haben und möglicherweise falsche Positive verursachen. 1992 = 1könnte 1**2 = 1oder 1//2 = 1zum Beispiel sein. Dies substgilt für Fälle, in denen die richtige Gleichung enthält --, z. B. den neuen Testfall, den Sie hinzugefügt haben.
Nwellnhof
Ihre Antwort ist derzeit die mit der geringsten Anzahl von Bytes, daher werde ich sie vorerst akzeptieren. Wenn jemand etwas kürzeres findet, kann sich die Prüfung erneut verschieben.
Kevin Cruijssen
113 Bytes
Jo King
11

JavaScript (ES7), 159 158 Bytes

Bearbeiten: Neue Version, um den aktualisierten Regeln für --1 Byte gespeichert zu entsprechen,
dank @Shaggy

Nimmt Eingaben in der Currying-Syntax vor, (e)(r)wobei e das Array von Gleichungen und r das Array der erwarteten Ergebnisse ist. Gibt ein Array von Zeichen zurück.

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

Testfälle

Formatiert und kommentiert

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
quelle
1
Ich denke, Sie können ein Byte speichern, indem evalSie das try / catch: codepen.io/anon/pen/rzRrLp .
Shaggy
@ Shaggy Ah ja, schön. Vielen Dank!
Arnauld
Es sieht so aus, als würde dies für 139 Bytes funktionieren.
Shaggy
Ja, ich habe gerade eine vollständige Testsuite ausgeführt und das bemerkt.
Shaggy
Funktioniert nicht für 1991 = 2. Die Lösung sollte 1--1 = 2mit 9und -ausgetauscht werden.
Nwellnhof
4

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

  • Von 199 Bytes auf 193 Bytes dank Mr. Xcode
  • Von 193 Bytes auf 173 Bytes dank 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

Probieren Sie es online!

mdahmoune
quelle
@ Mr.Xcoder Danke für die Bemerkung, ich repariere es ..
mdahmoune
1
@ Mr.Xcoder hier ist die korrigierte Version
mdahmoune
2
193 Bytes
Mr. Xcoder
2
173 Bytes
Halvard Hummel
4

Oracle SQL & PL / SQL, 458 Bytes

Die Eingabe kann in jedem vernünftigen Format erfolgen. [...] eine Liste mit Gleichungen und eine andere Liste mit den richtigen Ergebnissen.

Kompilieren Sie die PL / SQL-Funktion (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;

Führen Sie die SQL aus (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

Nachdem Sie eine Tabelle Tmit den Testdaten erstellt haben:

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

Ausgabe:

V V_1
- ---
2 *
* 2

Vorherige Version :

Angenommen, eine Zeichenfolge eingegeben wie '123 = 3':

Gleiche PL / SQL-Funktion und 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

Nachdem Sie eine Tabelle Tmit den Testdaten erstellt haben:

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;

Ausgabe:

V V_1
- ---
2 *
* 2

Update - Testen :

SQL-Geige

Oracle 11g R2 Schema-Setup :

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
/

Abfrage 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

Ergebnisse :

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

Abfrage 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

Ergebnisse :

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

Abfrage 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

Ergebnisse :

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

Abfrage 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

Ergebnisse :

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

Abfrage 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

Ergebnisse :

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

Abfrage 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

Ergebnisse :

| V | V |
|---|---|
| 1 | - |
| - | 1 |
MT0
quelle
Das ||REPLACE(x,'--','- -')||Eingabe- / Ausgabeformat ist nicht erforderlich und daher können Sie so eingeben, -5--15als -5- -15ob Sie möchten. Was wäre für mich auch die einfachste Möglichkeit, die Funktion aller Testfälle zu überprüfen, insbesondere der letzten? Ist ein TIO-Link irgendwie möglich?
Kevin Cruijssen
Oder wird die ||REPLACE(x,'--','- -')||für eine erwartete korrekte Gleichung verwendet, wie der letzte Testfall, den ich hinzugefügt habe?
Kevin Cruijssen
1
@KevinCruijssen --startet einen Kommentar in SQL, sodass entweder die Testfälle so formuliert werden müssen, dass sie --in der Gleichung niemals vorkommen (durch diese ersetzt werden - -), oder dass dafür eine defensive Codierung erforderlich ist.
MT0
Für den letzten Testfall 13116/3 = -1müsste also geschrieben werden 131 16/3 = -1, um diesen Aufruf zu entfernen REPLACE.
MT0
Ah ok, also wird das Ersetzen tatsächlich für die erwarteten korrekten Gleichungen verwendet. Vielen Dank für das Hinzufügen der SQL-Geige, +1 von mir.
Kevin Cruijssen
2

Powershell, 222 209 192 Bytes

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

Testskript und Erklärung:

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

Ausgabe:

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
quelle
0

05AB1E , 21 Bytes

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

Eingabe als zwei Listen, wobei die erste die Gleichungen und die zweite die Ergebnisse sind. Ausgabe als gefilterte Liste von Paaren mit beiden Umdrehungen (dh [["2","*"],["*","2"]]).

Probieren Sie es online aus oder überprüfen Sie alle Testfälle . (HINWEIS: Verwendet die Vorgängerversion von 05AB1E im TIO, da diese .Ein der neueren Version von TIO deaktiviert ist. Aus diesem Grund wird eine zusätzliche ï(in Ganzzahl umgesetzte) Version hinzugefügt, da in der Vorgängerversion von 05AB1E 1.0und in 1Inside-Listen keine Entsprechung bestand .)

Erläuterung:

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"]
Kevin Cruijssen
quelle