숫자를 표현하다
60 년대에 프랑스 인은 TV 게임 쇼 "Des Chiffres et des Lettres"(Digits & Letters)를 발명했습니다. 쇼의 자릿수 부분의 목표는 반 무작위로 선택된 숫자를 사용하여 특정 3 자리 목표 번호에 최대한 가깝게하는 것입니다. 참가자는 다음 연산자를 사용할 수 있습니다.
- 연결 (1과 2는 12)
- 더하기 (1 + 2는 3)
- 빼기 (5-3 = 2)
- 나누기 (8/2 = 4); 결과가 자연수 인 경우에만 나눗셈이 허용됩니다.
- 곱셈 (2 * 3 = 6)
- 괄호는 규칙적인 우선 순위를 무시합니다. 2 * (3 + 4) = 14
주어진 숫자는 한 번만 사용하거나 전혀 사용하지 않을 수 있습니다.
예를 들어, 대상 번호 728은 다음 표현식을 사용하여 숫자 6, 10, 25, 75, 5 및 50과 정확하게 일치시킬 수 있습니다.
75 * 10 - ( ( 6 + 5 ) * ( 50 / 25 ) ) = 750 - ( 11 * 2 ) = 750 - 22 = 728
이 코드 챌린지에서는 가능한 한 특정 대상 번호에 가까운 표현식을 찾는 작업이 제공됩니다. 우리는 21 세기에 살고 있기 때문에 60 년대에 비해 더 큰 목표 수와 더 많은 수를 소개 할 것입니다.
규칙
- 허용되는 연산자 : 연결, +,-, /, *, (및)
- 연결 연산자에는 기호가 없습니다. 숫자를 연결하십시오.
- "역 연결"은 없습니다. 69는 69이며 6과 9로 나눌 수 없습니다.
- 대상 숫자는 양의 정수이며 최대 18 자리입니다.
- 작업 할 최소 두 개의 숫자와 최대 99 개의 숫자가 있습니다. 이 숫자는 최대 18 자리의 양의 정수입니다.
- 목표 숫자를 숫자와 연산자로 표현할 수는 없습니다 (실제로 아마). 목표는 가능한 한 가깝게하는 것입니다.
- 프로그램은 합리적인 시간 (현대 데스크탑 PC에서 몇 분) 내에 완료되어야합니다.
- 표준 허점이 적용됩니다.
- 이 퍼즐의 "점수"섹션에있는 테스트 세트에 맞게 프로그램이 최적화 되지 않았을 수 있습니다. 본인은이 규칙을 위반하는 사람이 의심되면 테스트 세트를 변경할 권리가 있습니다.
- 이것은 코드 골프 가 아닙니다 .
입력
입력은 편리한 방식으로 형식화 할 수있는 숫자 배열로 구성됩니다. 첫 번째 숫자는 대상 번호입니다. 나머지 숫자는 목표 숫자를 구성하기 위해 사용해야하는 숫자입니다.
산출
출력 요구 사항은 다음과 같습니다.
- 다음으로 구성된 문자열이어야합니다.
- 입력 번호의 서브 세트 (대상 번호 제외)
- 여러 운영자
- 공백이없는 한 줄로 출력하는 것을 선호하지만 필요한 경우 공백과 줄 바꿈을 추가 할 수 있습니다. 제어 프로그램에서는 무시됩니다.
- 출력은 유효한 수학 식이어야합니다.
예
가독성을 위해이 모든 예제에는 정확한 솔루션이 있으며 각 입력 번호는 정확히 한 번만 사용됩니다.
입력 : 1515483, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
출력 :111*111*(111+11+1)
입력 : 153135, 1, 2, 3, 4, 5, 6, 7, 8, 9
출력 :123*(456+789)
입력 : 8888888888, 9, 9, 9, 99, 99, 99, 999, 999, 999, 9999, 9999, 9999, 99999, 99999, 99999, 1
출력 :9*99*999*9999-9999999-999999-99999-99999-99999-9999-999-9-1
입력 : 207901, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
출력 :1+2*(3+4)*(5+6)*(7+8)*90
입력 : 34943, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
출력 : 1+2*(3+4*(5+6*(7+8*90)))
또한 유효한 출력은 다음과 같습니다.34957-6-8
채점
프로그램의 페널티 스코어는 아래 테스트 세트에 대한 표현식의 상대 오차의 합계입니다.
예를 들어 목표 값이 125이고식이 120이면 페널티 점수는 abs (1-120/125) = 0,04입니다.
가장 낮은 점수 (가장 낮은 총 상대 오차)를 가진 프로그램이 승리합니다. 두 프로그램이 동일하게 완료되면 첫 번째 제출물이 승리합니다.
마지막으로 테스트 세트 (8 건) :
14142, 10, 11, 12, 13, 14, 15
48077691, 6, 9, 66, 69, 666, 669, 696, 699, 966, 969, 996, 999
333723173, 3, 3, 3, 33, 333, 3333, 33333, 333333, 3333333, 33333333, 333333333
589637567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
8067171096, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199
78649377055, 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420, 462, 506, 552, 600, 650, 702, 756, 812, 870, 930, 992
792787123866, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169
2423473942768, 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 2000000, 5000000, 10000000, 20000000, 50000000
이전의 유사한 퍼즐
이 퍼즐을 만들어 샌드 박스에 게시 한 후 두 개의 이전 퍼즐 ( 여기서는 해결책 없음)과 여기 에서 비슷한 것을 발견 했습니다 . 이 퍼즐은 연결 연산자를 소개하기 때문에 다소 다릅니다. 검색하지 않고 정확하게 일치하며 무차별 적으로 솔루션에 접근하기위한 전략을보고 싶습니다. 도전적이라고 생각합니다.