I <3 warunki warunkowe

11

W twoim kodzie masz wiele bardzo długich, nudnych wyglądających warunków:

if flag == 1:

while have != needed:

if type == 7:

Można je przekształcić w ich znacznie bardziej urocze <3odpowiedniki warunkowe:

if abs(flag - 1) + 2 <3:

while 3 - abs(have - needed) <3:

if 2 + abs(type - 7) <3:

Zadanie

Twoim zadaniem jest przyjęcie warunku i uczynienie go pod względem <3. Jedyne, co się liczy, to to, że nie ma między nimi <i 3.

Warunkowe będą dwa wyrazy oddzielone albo ==, !=, >, <, >=lub <=.
Wyrażenia będą zawierały tylko dodawanie, odejmowanie, jednoargumentową negację ( -something), gdzie występuje jedna +lub -przed każdą zmienną lub liczbą (z wyjątkiem pierwszej, która nie ma nic lub -przed nią).
Liczby będą [0-9]+, a zmienne będą [a-z]+. Jeśli odpowiedź wymaga użycia |x|(wartość bezwzględna x), użyj abs()funkcji. Możesz założyć, że wszystkie zmienne są liczbami całkowitymi, a wszystkie stałe liczbowe na wejściu wynoszą <1000.

Dane wyjściowe nie muszą być w najprostszej formie. Musi to być warunek taki jak powyżej, co oznacza, że ​​są to tylko dwa wyrażenia, oddzielone jednym znakiem warunkowym, ale może również używać absfunkcji, zawierającej prawidłowe wyrażenie, a następnie zachowuje się jak zmienna pod względem ważności.

Jeśli dane wejściowe nie zawierają danych wyjściowych dla żadnej wartości zmiennej, wypisz warunek, który zawsze jest fałszywy, ale nadal pod względem <3.

Część wyzwania polega na zastanowieniu się, jak to zrobić, ale oto kroki, które należy wykonać w have != neededpowyższym:

have != needed
have - needed != 0
abs(have - needed) > 0
-abs(have - needed) < 0
3 - abs(have - needed) <3

Punktacja

To jest golf golfowy, więc wygrywa najkrótszy prawidłowy kod w bajtach.

Przypadki testowe

(Uwaga: te dane wyjściowe nie są jedynymi, ale starałem się je uprościć).

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
Artyer
źródło
Czy zawsze jest dokładnie jedna spacja między tokenami wejściowymi?
Klamka
@Doorknob Nie. Będzie 0 lub 1 spacja.
Artyer

Odpowiedzi:

3

Siatkówka , 95 bajtów

<=
<1+
>=
>-1+
(.*)(.=)(.*)
$2abs($1-($3))
==
2+
!=
3-
(.*)>(.*)
$2<$1
(.*)<(.*)
$1-($2)+3
$
<3

Wypróbuj online!

Raczej naiwne rozwiązanie, ale nie udało mi się znaleźć żadnych ulepszeń.

To tylko seria zamienników:

<=
<1+
>=
>-1+

Pozbyć się „lub równe” porównań zastępując x <= yz x < 1 + y, i x >= yz x > -1 + y.

(.*)(.=)(.*)
$2abs($1-($3))

Wymień x == ysię ==abs(x - y), a x != yz !=abs(x - y).

==
2+
!=
3-

Wymień ==się 2+i !=z 3-, tak że całkowite zamienniki stać x == y2 + abs(x - y)i x != y3 - abs(x - y).

(.*)>(.*)
$2<$1

Normalizuj kierunek pozostałych nierówności, zastępując x > yje y < x.

(.*)<(.*)
$1-($2)+3

Wymień x < ysię x - y + 3.

$
<3

Dołącz serce na końcu sznurka.

Klamka
źródło