알파벳을 통해 문법을 고려 { 0
, 1
, ?
, :
} 에 의해 정의 된 생산 규칙
S →
0
┃1
┃0
?
의:
의 ┃1
?
의:
의
s 에서 생성 된 문자열 ?:
이 있으면 오른쪽 연관 (예 : a?B?X:Y:c?d:e?f:g
means a?(B?X:Y):(c?d:(e?f:g))
) 인 표현식으로 구문 분석 하고 다음 시맨틱으로 평가하십시오.
eval(0) = 0
eval(1) = 1
eval(0?a:b) = eval(b)
eval(1?a:b) = eval(a)
결과가 0 이면 고정 값을 출력하십시오. 출력이 1 이면 다른 고정 값을 출력하십시오. 답에 선택한 출력 값 (예 : 0
/ 1
또는 False
/ True
)을 지정하십시오.
테스트 사례
0 -> 0
1 -> 1
0?0:1 -> 1
0?1:0 -> 0
1?0:1 -> 0
1?1:0 -> 1
0?1?0:1:1 -> 1
1?0?1:1:1 -> 1
1?0:1?0:1?1:1 -> 0
1?1?1:0?1?0:0:0:0 -> 1
1?0:1?0?1:1?1:0:1?1?1:1:1?0:1 -> 0
1?1?1:0?0?1:1:0?1:0:1?1?0?0:0:1?1:0:0?1?0:1:1?0:1 -> 1
0?0?1?0?0:1:0?0:0:0?0?1:1:1?0:1:0?0?0?1:0:0?1:1:1?1?0:1:1 -> 0
규칙
- 문자열을 일부 프로그래밍 언어 에서 코드로 해석 하여 실행 하는 언어 내장 기능을 사용하지 않을 수 있습니다 (예 : JavaScript / Perl / Ruby / Python 's
eval
). - 즉, 코드는 실제로 입력 문자열을 구문 분석 한 다음 평가할 필요 가 없습니다 . 동등한 결과를 달성하고 이전 규칙을 위반하지 않는 접근 방식을 취할 수 있습니다.
- 프로그램이에 대해 점검
perl -le 'print eval<>'
됩니다. - 가장 짧은 코드 (바이트)가 이깁니다.
S → T | T ? S : S
, T → 0 | 1
연관성에 대해 이야기 할 필요를 제거하는?