코드에 매우 길고 지루한 조건이 많이 있습니다.
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
답변
망막 , 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 == y
→ 2 + abs(x - y)
와 x != y
→ 3 - abs(x - y)
.
(.*)>(.*)
$2<$1
대체 나머지 부등식의 방향을 정규화 x > y
와 y < x
.
(.*)<(.*)
$1-($2)+3
교체 x < y
와 함께 x - y + 3
.
$
<3
줄 끝에 마음을 추가하십시오.