일련의 논리 문이 제공됩니다. 당신의 도전은 다른 것들과 모순되지만 최적의 방법으로 (즉, 최소한의 진술을 제거하는) 것을 제거하는 것입니다.
도전
명령문 목록을 입력으로 사용 하고 솔루션 이있는 나머지 명령문 을 출력하는 최소 개수 의 명령문을 제거하는 프로그램 또는 함수를 작성합니다 .
논리
문장은 변수 A-Z 와 그 사이의 연산자 로 구성됩니다 .
5 있습니다 운영자 : -(하지), v(나), ^(그리고), ->(경우) 및 <->(IFF)가.
진실 표 :
A | B | -A | AvB | A^B | A->B | A<->B
0 | 0 | 1 | 0 | 0 | 1 | 1
0 | 1 | 1 | 1 | 0 | 1 | 0
1 | 0 | 0 | 1 | 0 | 0 | 0
1 | 1 | 0 | 1 | 1 | 1 | 1
이 연산자 는 괄호와 함께 결합 될 수 있습니다 ().
A | B | -(AvB) | Av(-A) | A^(-A) | (AvB)->(-B)
0 | 0 | 1 | 1 | 0 | 1
0 | 1 | 0 | 1 | 0 | 0
1 | 0 | 0 | 1 | 0 | 1
1 | 1 | 0 | 1 | 0 | 0
논리 시스템 은 하나 이상의 문 으로 구성됩니다 .
솔루션 받는 로직 시스템 의 모든 상태 문이 동시에 해당.
논리 시스템의 예 :
AvB
-(A<->B)
(AvB)->(-B)
유일한 해결책 은 A = 1, B = 0입니다.
A^B
-(B<->A)
이것은 해결책 이 없습니다 . 아무의 조합 A과 B의 모두 진술 사실이다.
입력
입력 으로 일련의 명령문 을 수신합니다 . 이것은 STDIN 또는 함수 인수를 통해 취할 수 있으며, 배열 (편리한 형식으로) 또는 개행으로 구분되거나 공백으로 구분 된 문자열로 형식화됩니다.
진술은 다음과 같은 형식으로되어 있습니다 (거의 ABNF ).
statement = variable / operation
operation = not-operation / binary-operation
not-operation = "-" operand
binary-operation = operand binary-operator operand
operand = variable / "(" operation ")"
variable = "A"-"Z"
binary-operator = "v" / "^" / "->" / "<->"
예문 :
A
Av(-B)
(A<->(Q^C))v((-B)vH)
산출
수령 한 정확한 양식으로 축소 된 진술 문을 반환해야합니다. 다시, 목록은 문자열 배열 또는 줄 바꾸기로 구분되거나 공백으로 구분 된 문자열로 형식화 될 수 있습니다.
규칙
- 최소한의 명령문 만 제거해야합니다. 가능한 솔루션이 여러 개인 경우 그 중 하나를 출력하십시오.
- 입력에 항상 적어도 하나의 명령문이 있고 입력에 명령문이 반복되지 않는다고 가정 할 수 있습니다.
- 출력에 항상 명령문이 있다고 가정하지 않아도됩니다. (예시 참조)
- 표준 허점을 사용하면 답변이 유효하고 모순되며 그 중 하나를 제거해야합니다.
- 이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
예
입력:
A^(-A)
산출:
(nothing)
입력:
A^B A<->(-B) A<->B
산출:
A^B A<->B
입력:
["AvB","A^B"]
산출:
["AvB","A^B"]
3
이것이 관련이 있는지는 모르겠지만이 문제는 NP-complete 인 최대 세트 패킹에 해당합니다.
—
Leif Willerts
문법에 따르면, 예에서 세 번째 문은 (정확하지
—
자랑 haskeller
(AvB)->-B있어야한다 (AvB)->(-B))
@proudhaskeller 감사합니다.
—
PurkkaKoodari
또한 괄호 안에
—
자랑스런 Haskeller
A<->(Q^C))v((-B)vH엉망이 있습니다.
@proudhaskeller 다시 한번 감사드립니다.
—
PurkkaKoodari