I <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)のみが含まれます。各変数または数値の前+または-前に1つまたは前があります(最初または何もないまたは-前にあるものを除く)。
番号はになり[0-9]+、変数はになります[a-z]+。答えを使用する必要がある場合|x|(の絶対値x)、abs()関数を使用します。すべての変数が整数であり、入力内のすべての数値定数が<1000であると仮定できます。

出力は、最も単純な形式である必要ありませ。上記のような条件付きである必要があります。つまり、1つの条件付き記号で区切られた2つの式のみである必要がありますが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

入力トークン間に常に1つのスペースがありますか?
ドアノブ

@Doorknobいいえ。0個または1個のスペースがあります。
アーティア

回答:


3

網膜、95バイト

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

オンラインでお試しください!

かなり単純なソリューションですが、改善点を見つけることができませんでした。

これは単なる一連の置き換えです。

<=
<1+
>=
>-1+

、およびで置き換えることx <= yによりx < 1 + y、「または等しい」比較を取り除きます。x >= yx > -1 + y

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

元に戻しx == y==abs(x - y)、そしてx != y持ちます!=abs(x - y)

==
2+
!=
3-

==with 2+および!=withを置き換え3-て、全体の置き換えがx == y2 + abs(x - y)およびx != y→になるようにし3 - abs(x - y)ます。

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

に置き換えx > yて、残りの不等式の方向を正規化しy < xます。

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

交換してくださいx < yx - y + 3

$
<3

文字列の最後にハートを追加します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.