我<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

条件语句将是要么分隔两个表达式==!=><>=<=
表达式将仅包含加,减,一元否定(-something),其中每个变量或数字前面有一个+-一个(除了第一个没有变量或没有变量或数字-之前)。
数字将为[0-9]+,变量将为[a-z]+。如果需要使用答案|x|(的绝对值x),请使用该abs()函数。您可以假设所有变量都是整数,并且输入中的所有数字常量均小于1000。

输出并没有需要在它的简单形式。它确实需要像上面的条件表达式,这意味着它仅是两个表达式,以一个条件符号分隔,但是它也可以使用abs函数,将有效表达式括起来,然后就有效性而言就像变量一样。

如果输入没有任何变量值的输出,则输出始终为false但仍以表示的条件<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

输入令牌之间始终始终只有一个空格吗?
门把手

@门把手号。将有0或1个空格。
Artyer 2015年

Answers:


3

视网膜,95字节

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

在线尝试!

一个相当幼稚的解决方案,但是我还没有找到任何改进。

这只是一系列替换:

<=
<1+
>=
>-1+

摆脱“等于”替换比较x <= yx < 1 + yx >= 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 > yy < x

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

替换x < yx - y + 3

$
<3

在字符串末尾加一个心。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.