Я <3 умовні


11

У вас в коді багато дуже довгих, нудних на вигляд умов:

if flag == 1:

while have != needed:

if type == 7:

Вони можуть бути перетворені на їх набагато приємніші <3аналоги умов:

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

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

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

Завдання

Ваше завдання - взяти умовне і зробити його з точки зору <3. Важливий лише інтервал - це те, що між <та між ними немає 3.

Conditionals буде два вирази розділеним або ==, !=, >, <, >=або <=.
Вирази містять лише додавання, віднімання, одинарне заперечення ( -something), де є одна +або -перед кожною змінною чи цифрою (крім першої, яка не має нічого або -перед цим).
Числа будуть [0-9]+, і змінні будуть [a-z]+. Якщо відповідь потрібно використовувати |x|(Абсолютне значення x), скористайтеся abs()функцією. Можна припустити, що всі змінні є цілими числами, а всі константи числа у вхідному значенні <1000.

Вихід не повинен бути у найпростішому вигляді. Це дійсно має бути умовно, як вище, це означає, що це лише два вирази, відокремлені одним умовним знаком, але він також може використовувати absфункцію, додаючи дійсне вираження, і тоді він діє як змінна, з точки зору дійсності.

Якщо вхід не має виводу для будь-якого значення змінної, виведіть умову, яка завжди помилкова, але все ж з точки зору <3.

Частина виклику полягає в тому, щоб з'ясувати, як це зробити, але ось кроки для have != neededвищезазначеного:

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

Оцінка балів

Це код-гольф, тому найкоротший дійсний код у байтах виграє.

Тестові справи

(Зауважте, ці результати не є єдиними виходами, але я намагався їх спростити.)

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

Чи завжди рівно один простір між вхідними маркерами?
Дверна ручка

@Doorknob Ні. Буде 0 або 1 пробіл.
Artyer

Відповіді:


3

Сітківка , 95 байт

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

Спробуйте в Інтернеті!

Досить наївне рішення, але я не зміг знайти жодних вдосконалень.

Це лише ряд замін:

<=
<1+
>=
>-1+

Позбавтеся порівнянь "або рівних", замінивши x <= yна x < 1 + yі x >= yна x > -1 + y.

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

Замінити x == yна ==abs(x - y)і x != yна !=abs(x - y).

==
2+
!=
3-

Замініть ==на 2+і !=з 3-, щоб загальні заміни стали x == y2 + abs(x - y)і x != y3 - abs(x - y).

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

Нормалізуйте напрям решти нерівностей, замінивши x > yна y < x.

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

Замініть x < yна x - y + 3.

$
<3

Прикладіть серце до кінця струни.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.