Carl Sagan 의 저서 ( Contact by Carl Sagan)를 읽었다면 이 도전은 익숙 할 것입니다.
숫자, 알 수없는 연산자, 다른 숫자 및 결과로 구성된 일련의 수학 방정식을 입력하면 어떤 연산자가 더하기, 빼기, 곱하기 또는 나누기를 나타내는지를 추론 할 수 있습니다.
각 입력 방정식은 항상 다음으로 구성됩니다
- 음이 아닌 정수
- 글자 하나
A,B,C, 또는D - 다른 음이 아닌 정수
- 캐릭터
= - 음이 아닌 최종 정수
함께 연결됩니다. 예를 들어, 가능한 입력 값은을 더하여 1A2=3추론 할 수 있습니다 A. 각 정수는를 만족 0 ≤ x ≤ 1,000합니다.
그러나 항상 그렇게 간단하지는 않습니다. 다음 사이에 모호성이있을 수 있습니다.
5A0=5: 더하기 / 빼기1A1=1: 곱셈 / 나눗셈0A5=0: 곱셈 / 나눗셈2A2=4: 덧셈 / 곱셈4A2=2: 빼기 / 나눗셈0A0=0: 더하기 / 빼기 / 곱하기
등등. 문제는이 기능을 사용하여 각 문자가 나타내는 연산자를 파악하기 위해 제거 프로세스와 결합 된 선택 범위를 좁히는 것입니다. (항상 하나 이상의 입력 방정식이있을 것이므로 입력에 사용 된 각 문자를 단일 연산자로 명확하게 일치시킬 수 있습니다.)
예를 들어 입력이 다음 방정식이라고 가정 해 봅시다.
0A0=0: A를 더하기, 빼기 또는 곱하기로 좁 힙니다 (0으로 나눌 수 없음).10B0=10: B는 덧셈 또는 뺄셈이어야합니다.5C5=10: C는 분명히 덧셈이므로 B를 빼면 A가 곱해집니다.
따라서, 이러한 입력 식의 출력은 일치해야 A와 *, B
와 -,와 C함께 +.
입력은 단일 공백 / 쉼표로 구분 된 문자열 또는 각각 하나의 방정식을 나타내는 문자열 배열로 제공 될 수 있습니다. 출력은 단일 문자열 ( "A*B-C+"), 배열 ( ["A*", "B-", "C+"]) 또는 사전 / dict-like 2D 배열 ( {"A": "*", ...}또는 [["A", "*"], ...]) 일 수 있습니다.
숫자를 나눌 수없는 다른 숫자로 나누지 않는다고 가정 할 수 있습니다 (따라서 나누기가 부동 소수점인지 잘림인지에 대해 걱정할 필요가 없습니다).
이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.
테스트 사례 :
In Out
-------------------------------
0A0=0 10B0=10 5C5=10 A*B-C+
100D100=10000 D*
4A2=2 4B2=2 0A0=0 A-B/
15A0=15 4B2=2 2C2=0 A+B/C-
1A1=1 0A0=0 A*
0A0=0 2A2=4 5B0=5 2B2=4 A*B+
2A2=4 0C0=0 5B0=5 5A0=5 A+B-C*
0A1000=0 4A2=2 A/