이 도전에서 당신의 임무는 이와 같은 주어진 "매치 스틱 방정식"을 분석하는 것입니다 ...
... 그리고 일치를 다시 정렬하여 유효한 방정식으로 변환 할 수 있는지 확인하십시오. 그렇다면 최소 이동 횟수와 결과 방정식을 출력해야합니다.
입력
입력은 STDIN에서 읽거나 함수 인수로 사용하거나 파일에 저장할 수있는 문자열입니다. 이것은 성냥개비 배열을 나타내는 방정식이며 다음 EBNF를 사용하여 설명 할 수 있습니다.
input = term, "=", term ;
term = number | (term, ("+" | "-"), term) ;
number = "0" | (numeralExceptZero , {numeral}) ;
numeralExceptZero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
numeral = "0" | numeralExceptZero ;
유효한 입력의 예는입니다 3+6-201=0+0+8
.
직무
각 성냥개비에 숫자가 할당되어있는 다음 그림을 고려하십시오.
이제 각 입력 기호를 다음과 같이 해당하는 성냥개비 위치에 매핑합니다.
0 ↦ 1,2,3,4,5,6
1 ↦ 4,5
2 ↦ 2,3,5,6,8
3 ↦ 3,4,5,6,8
4 ↦ 1,4,5,8
5 ↦ 1,3,4,6,8
6 ↦ 1,2,3,4,6,8
7 ↦ 4,5,6
8 ↦ 1,2,3,4,5,6,8
9 ↦ 1,3,4,5,6,8
- ↦ 8
+ ↦ 8,10
= ↦ 7,9
각 입력 공식은 성냥개비 배열로 전환 할 수 있습니다. 예를 들어 방정식 "45 + 6 = 92"는
사용하지 않는 성냥개비가 회색으로 표시됩니다. 당신의 임무는 방정식을 유효하게하기 위해 재배치 해야하는 가장 적은 수의 성냥개비를 찾는 것입니다.
산출
가능한 세 가지 경우를 구별합니다.
- 입력이 유효하지 않은 경우 (즉, 위의 EBNF를 만족하지 않는 경우) 원하는 것을 출력하십시오.
- 그렇지 않으면, 성냥개비를 재배치하여 방정식을 유효한 것으로 바꾸는 방법이 있다면 , 최소 재 배열 횟수 와 해당 방정식을 모두 출력해야합니다 . 입력과 마찬가지로 출력 방정식도 주어진 EBNF를 만족해야합니다. 위의 예에서 올바른 출력은
and 입니다. 결과 방정식에 여러 가능성이있는 경우 그 중 하나를 출력하십시오.
1
46+6=52
- 그렇지 않으면 (입력이 유효하지만 방정식을 참으로 만들 수있는 방법이 없다면)을 출력해야합니다
-1
.
세부
- 일치 항목을 제거하거나 추가 할 수 없습니다. 즉, 입력이
n
성냥개비로 구성된 경우 출력도 정확히n
성냥개비 로 구성되어야합니다 . - "빈"matchstick-blocks는 중간이 아니라 방정식의 끝과 시작에서만 허용됩니다. 따라서, 예를 들어, 회전
7-1=6
로7 =6-1
간단하게 제거하여-1
왼쪽에서 단지 3 성냥 재 배열과 오른쪽에 추가는 허용되지 않습니다. 나는 숫자에서 성냥개비 위치로의 매핑을이 도전의 흥미로운 부분으로 보지 않기 때문에 20 바이트 를 더할 수 있습니다.
(number/operation ↦ matchstick positions)
적절한 방법으로 매핑 이 저장된 파일에 액세스 하거나- 프로그래밍 언어가
Map
데이터 유형을 지원하는 경우 -mapping으로 사전 초기화 된 맵에 액세스 할 수 있다고 가정하십시오(number/operation ↦ matchstick positions)
. 이지도는 예를 들면 다음과 같습니다.{(0,{1,2,3,4,5,6}),(1,{4,5}),(2,{2,3,5,6,8}),(3,{3,4,5,6,8}), ..., (-,{8}),(+,{8,10}),(=,{7,9})}
예
입력 : 1+1=3
↦ 출력 : 1
및1+1=2
입력 : 15+6=21
↦ 출력 : 0
및15+6=21
입력 : 1=7
↦ 출력 : -1
입력 : 950-250=750
↦ 출력 : 2
및990-240=750
입력 : 1-2=9
↦ 출력 : 1
및1+2=3
입력 : 20 + 3=04
↦ 출력 : 무엇이든
우승자
이것은 code-golf 이므로 가장 짧은 정답 (바이트)이 이깁니다. 당첨자는 첫 정답이 게시 된 지 1 주일 후에 선정됩니다.
=
(2 개의 성냥개비)와 -
(1 개의 성냥개비) 의 위치를 전환하고 모든 숫자를 원래 자리에 그대로 둘 수 있기 때문입니다. 그러나 2를 왼쪽으로 이동해야하는 경우 필요한 이동도 계산해야합니다.
1+1+2=3-6+10
있습니까? 그리고 출력에 대해서도 같은 질문입니다.
0: 1, 2, 3, 4, 5, 6
일관성을 위해