Sie haben am Ende viele sehr lange, langweilig aussehende Bedingungen in Ihrem Code:
if flag == 1:
while have != needed:
if type == 7:
Diese können in ihre viel liebenswerteren <3
Gegenstücke umgewandelt werden:
if abs(flag - 1) + 2 <3:
while 3 - abs(have - needed) <3:
if 2 + abs(type - 7) <3:
Aufgabe
Ihre Aufgabe ist es, eine Bedingung zu nehmen und sie in Bezug auf zu machen <3
. Der einzige Abstand, der zählt, ist, dass es keinen zwischen <
und gibt 3
.
Conditionals werden zwei Ausdrücke , die durch entweder getrennt sein ==
, !=
, >
, <
, >=
oder <=
.
Ausdrücke enthalten nur Addition, Subtraktion und unäre Negation ( -something
), wenn es eine +
oder -
vor jeder Variablen oder Zahl gibt (außer der ersten, die nichts oder -
davor hat).
Zahlen werden sein [0-9]+
und Variablen werden sein [a-z]+
. Wenn die Antwort verwendet werden muss |x|
(Der absolute Wert von x
), verwenden Sie die abs()
Funktion. Sie können davon ausgehen, dass alle Variablen Ganzzahlen sind und alle Zahlenkonstanten in der Eingabe <1000 sind.
Die Ausgabe muss nicht in der einfachsten Form vorliegen. Es muss eine Bedingung wie oben sein, was bedeutet, dass es sich nur um zwei Ausdrücke handelt, die durch ein Bedingungszeichen getrennt sind. Es kann jedoch auch die abs
Funktion verwenden, die einen gültigen Ausdruck einschließt, und sich dann in Bezug auf die Gültigkeit wie eine Variable verhalten.
Wenn die Eingabe keine Ausgabe für einen Wert einer Variablen hat, geben Sie eine Bedingung aus, die immer falsch ist, aber immer noch in Bezug auf <3
.
Ein Teil der Herausforderung besteht darin, herauszufinden, wie es geht, aber hier sind die Schritte für die have != needed
oben genannten:
have != needed
have - needed != 0
abs(have - needed) > 0
-abs(have - needed) < 0
3 - abs(have - needed) <3
Wertung
Dies ist Code-Golf, also gewinnt der kürzeste gültige Code in Bytes.
Testfälle
(Beachten Sie, dass diese Ausgaben nicht die einzigen Ausgaben sind, aber ich habe versucht, sie zu vereinfachen.)
flag == 1
abs(flag - 1) + 2 <3
have != needed
3 - abs(have - needed) <3
type == 7
2 + abs(type - 7) <3
x > y
3 - x + y <3
x + 5 < -y
x + 8 + y <3
x + 6 <= y
x + 8 - y <3
-x >= y + 3
x + y + 5 <3
x < x
3 <3
# Unsimplified; both would be valid outputs.
x - x + 3 <3
Antworten:
Netzhaut , 95 Bytes
Probieren Sie es online aus!
Eine eher naive Lösung, aber ich konnte keine Verbesserungen finden.
Dies ist nur eine Reihe von Ersetzungen:
Befreien Sie sich von „oder gleich“ Vergleiche durch den Austausch
x <= y
mitx < 1 + y
undx >= y
mitx > -1 + y
.Ersetzen
x == y
durch==abs(x - y)
undx != y
mit!=abs(x - y)
.Ersetzen Sie
==
durch2+
und!=
mit3-
, so dass die gesamten Ersetzungenx == y
→2 + abs(x - y)
undx != y
→ werden3 - abs(x - y)
.Normalisieren Sie die Richtung der verbleibenden Ungleichungen und ersetzen Sie sie
x > y
durchy < x
.Ersetzen
x < y
durchx - y + 3
.Hängen Sie ein Herz an das Ende der Zeichenfolge an.
quelle