Você acaba tendo muitos condicionais longos e chatos no seu código:
if flag == 1:
while have != needed:
if type == 7:
Eles podem ser transformados em seus <3
equivalentes de condicionais muito mais amáveis :
if abs(flag - 1) + 2 <3:
while 3 - abs(have - needed) <3:
if 2 + abs(type - 7) <3:
Tarefa
Sua tarefa é levar um condicional e torná-lo em termos de <3
. O único espaçamento que importa é que não há entre <
e 3
.
Condicionais serão duas expressões separadas por um ou outro ==
, !=
, >
, <
, >=
ou <=
.
As expressões conterão apenas adição, subtração, negação unária ( -something
), onde houver uma +
ou -
antes de cada variável ou número (exceto a primeira que não tem nada ou -
antes dela).
Os números serão [0-9]+
e as variáveis serão [a-z]+
. Se a resposta precisar usar |x|
(O valor absoluto de x
), use a abs()
função Você pode assumir que todas as variáveis são números inteiros e todas as constantes numéricas na entrada são <1000.
A saída não precisa estar na sua forma mais simples. Ele precisa ser uma condicional como acima, o que significa que são apenas duas expressões, separadas por um sinal condicional, mas também pode usar a abs
função, incluindo uma expressão válida, e depois age como uma variável, em termos de validade.
Se a entrada não tiver uma saída para qualquer valor de uma variável, imprima uma condição que é sempre falsa, mas ainda em termos de <3
.
Parte do desafio é descobrir como fazê-lo, mas aqui estão as etapas para o have != needed
acima:
have != needed
have - needed != 0
abs(have - needed) > 0
-abs(have - needed) < 0
3 - abs(have - needed) <3
Pontuação
Isso é código-golfe, então o código válido mais curto, em bytes, vence.
Casos de teste
(Observe que essas saídas não são as únicas, mas tentei simplificá-las.)
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
Respostas:
Retina , 95 bytes
Experimente online!
Uma solução bastante ingênua, mas não consegui encontrar nenhuma melhoria.
Esta é apenas uma série de substituições:
Livre-se das comparações "ou iguais a" substituindo
x <= y
porx < 1 + y
ex >= y
porx > -1 + y
.Substitua
x == y
por==abs(x - y)
ex != y
com!=abs(x - y)
.Substitua
==
por2+
e!=
com3-
, para que as substituições gerais se tornemx == y
→2 + abs(x - y)
ex != y
→3 - abs(x - y)
.Normalize a direção das desigualdades restantes, substituindo
x > y
pory < x
.Substitua
x < y
porx - y + 3
.Coloque um coração no final da corda.
fonte