Vous finissez par avoir beaucoup de conditions très longues et ennuyeuses dans votre code:
if flag == 1:
while have != needed:
if type == 7:
Ceux-ci peuvent être transformés en leurs <3
homologues conditionnels beaucoup plus adorables :
if abs(flag - 1) + 2 <3:
while 3 - abs(have - needed) <3:
if 2 + abs(type - 7) <3:
Tâche
Votre tâche consiste à prendre un conditionnel et à le faire en termes de <3
. Le seul espacement qui compte est qu'il n'y en a pas entre <
et 3
.
Conditionals seront deux expressions séparées par une ou l' autre ==
, !=
, >
, <
, >=
ou <=
.
Les expressions ne contiendront que l'addition, la soustraction, la négation unaire ( -something
), où il y a une +
ou -
avant chaque variable ou nombre (sauf la première qui n'a rien ou -
avant).
Les nombres le seront [0-9]+
et les variables le seront [a-z]+
. Si la réponse doit utiliser |x|
(La valeur absolue de x
), utilisez la abs()
fonction. Vous pouvez supposer que toutes les variables sont des entiers et que toutes les constantes numériques de l'entrée sont <1000.
La sortie n'a pas besoin d'être sous sa forme la plus simple. Il doit s'agir d'un conditionnel comme ci-dessus, ce qui signifie qu'il ne s'agit que de deux expressions, séparées par un signe conditionnel, mais il peut également utiliser la abs
fonction, entourant une expression valide, puis il agit comme une variable, en termes de validité.
Si l'entrée n'a de sortie pour aucune valeur d'une variable, sortez une condition qui est toujours fausse, mais toujours en termes de <3
.
Une partie du défi consiste à trouver comment le faire, mais voici les étapes pour ce qui have != needed
précède:
have != needed
have - needed != 0
abs(have - needed) > 0
-abs(have - needed) < 0
3 - abs(have - needed) <3
Notation
Il s'agit de code-golf, donc le code valide le plus court, en octets, gagne.
Cas de test
(Remarque, ces sorties ne sont pas les seules sorties, mais j'ai essayé de les simplifier.)
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
Réponses:
Rétine , 95 octets
Essayez-le en ligne!
Une solution plutôt naïve, mais je n'ai pu trouver aucune amélioration.
Ce n'est qu'une série de remplacements:
Supprimez les comparaisons "ou égal à" en remplaçant
x <= y
parx < 1 + y
etx >= y
parx > -1 + y
.Remplacez
x == y
par==abs(x - y)
etx != y
par!=abs(x - y)
.Remplacez
==
par2+
et!=
par3-
, de sorte que les remplacements globaux deviennentx == y
→2 + abs(x - y)
etx != y
→3 - abs(x - y)
.Normaliser la direction des inégalités restantes, en remplaçant
x > y
pary < x
.Remplacez
x < y
parx - y + 3
.Ajoutez un cœur à la fin de la chaîne.
la source