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) 만 포함되며, 각 변수 나 숫자 앞에 +또는 -앞에 하나 (있는 것이 없거나 -앞에 없는 것 제외 )가 있습니다.
숫자는 [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

입력 토큰 사이에 항상 정확히 하나의 공백이 있습니까?
Doorknob

@Doorknob 아니요. 공백은 0 개 또는 1 개입니다.
Artyer

답변:


3

망막 , 95 바이트

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

온라인으로 사용해보십시오!

다소 순진한 솔루션이지만 개선 사항을 찾지 못했습니다.

이것은 일련의 대체품입니다.

<=
<1+
>=
>-1+

, 및 로 대체 x <= y하여 "또는 동등한"비교를 제거하십시오 .x < 1 + yx >= yx > -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 < y와 함께 x - y + 3.

$
<3

줄 끝에 마음을 추가하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.