Einführung
Mein Rechner verhält sich komisch. Manchmal, wenn ich einen 8
eingebe, wird ein angezeigt 2
. Und manchmal, wenn ich a 6
eingebe, 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: 2
und *
.
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--15
als-5- -15
oder 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 Testfall9119
wie9119
oder eingegeben werden9 1 1 9
(Grund91 19
nicht 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.125
oder geben1/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-/2
oder geben9+-+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=8
und9/3=3
Gleichungen, mit den Tasten ausgelagert2
und*
). - 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 Code-Golf , 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 -
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
Kevin Cruijssen
quelle
quelle
--
. Zum Beispiel1991 = 2, -/3 = 3
. (In vielen Sprachen wird dies mit dem Dekrementierungsoperator verwechselt.)91 19
wenn die Lösung vorhanden ist,9--9
und kein Leerzeichen in,9119
wenn die Lösung vorhanden ist9229
, 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.*
und/
vor+
und binär-
?Antworten:
Perl 6 ,
132113 BytesVielen Dank an Jo King für -19 Bytes.
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.quelle
---
;++
;**
;//
; 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--15
mit 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.**
weil sie eine Bedeutung als Perl 6-Ausdrücke haben und möglicherweise falsche Positive verursachen.1992 = 1
könnte1**2 = 1
oder1//2 = 1
zum Beispiel sein. Diessubst
gilt für Fälle, in denen die richtige Gleichung enthält--
, z. B. den neuen Testfall, den Sie hinzugefügt haben.JavaScript (ES7),
159158 BytesBearbeiten: 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.Testfälle
Code-Snippet anzeigen
Formatiert und kommentiert
quelle
eval
Sie dastry / catch
: codepen.io/anon/pen/rzRrLp .1991 = 2
. Die Lösung sollte1--1 = 2
mit9
und-
ausgetauscht werden.Python 2 ,
204,199,193,173, 165 BytesProbieren Sie es online!
quelle
Oracle SQL & PL / SQL, 458 Bytes
Kompilieren Sie die PL / SQL-Funktion (210 Byte):
Führen Sie die SQL aus (248 Byte):
Nachdem Sie eine Tabelle
T
mit den Testdaten erstellt haben:Ausgabe:
Vorherige Version :
Angenommen, eine Zeichenfolge eingegeben wie
'123 = 3'
:Gleiche PL / SQL-Funktion und SQL (322 Byte):
Nachdem Sie eine Tabelle
T
mit den Testdaten erstellt haben:Ausgabe:
Update - Testen :
SQL-Geige
Oracle 11g R2 Schema-Setup :
Abfrage 1 :
Ergebnisse :
Abfrage 2 :
Ergebnisse :
Abfrage 3 :
Ergebnisse :
Abfrage 4 :
Ergebnisse :
Abfrage 5 :
Ergebnisse :
Abfrage 6 :
Ergebnisse :
quelle
||REPLACE(x,'--','- -')||
Eingabe- / Ausgabeformat ist nicht erforderlich und daher können Sie so eingeben,-5--15
als-5- -15
ob 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?||REPLACE(x,'--','- -')||
für eine erwartete korrekte Gleichung verwendet, wie der letzte Testfall, den ich hinzugefügt habe?--
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.13116/3 = -1
müsste also geschrieben werden131 16/3 = -1
, um diesen Aufruf zu entfernenREPLACE
.Powershell,
222209192 BytesTestskript und Erklärung:
Ausgabe:
quelle
05AB1E , 21 Bytes
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
.E
in 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 05AB1E1.0
und in1
Inside-Listen keine Entsprechung bestand .)Erläuterung:
quelle