게임 – 숫자와 4칙을 한번씩만

이번에 어떤 행사에 스텝으로 참여하게 되었는데, 그 행사 중에 게임을 하는 시간이 있다. 어제(8일)는 각 게임의 진행자를 뽑고, 필요한 준비물 중에 협조가 필요한 물건에 대해 도움을 줄 사람을 찾았다.

그리고 다들 각자 소속되어 있는 팀원들과 회의를 하거나 준비하기 위해 각 처소로 흩어졌는데, 필자가 속해있는 팀은 별다른 준비사항이나 회의할 내용이 없기 때문에 메인팀에 합류하여 각 게임에 필요한 문제를 만드는 일을 거들었다. 여러 문제들 중 4개의 1자리 숫자로 10을 만드는 게임의 문제가 있어서 프로그래밍해서 해결하면 되겠다 싶어 본인이 하겠다고 하여 집으로 가지고 왔다.

이 게임의 진행방법은 1~9까지의 한 자리 숫자 4개를 진행자가 제시하면 그 사이에 4칙 연산자(더하기+, 빼기-, 곱하기*, 나누기/)를 넣어 숫자에 연산자를 대입한 결과값이 10이 나오도록 하면 되는것이다. 숫자와 연산자는 한문제 내에서 각각 한번씩만 사용이 가능하다.

7 2 1 5

라는 숫자가 주어졌다면, 답은

7 2 + 1 * 5

가 되는 것이다.

프로그래밍을 시작했고, 숫자와 연산자를 구하는 부분까지는 비교적 수월하게 진행되었다. 그런데 문제는 이 숫자와 연산자를 구한 뒤에 계산하는데서 발생되는데, 임의의 연산자를 구해서 숫자와 합쳐서 출력하는데는 별 무리가 없었지만, 이 연산의 결과가 10인가 아닌가에 따라 결과를 출력하느냐 아니면 연산자를 다시 임의로 배열하여 연산의 결과를 만드는가로 구분하는 것이다.

이거 꽤 복잡하다. 그래서 무식하게 4개의 겹치지 않은 숫자와 사이에 넣을 연산자를 겹치지 않게 5천개 생성하여 CSV형식으로 만들어저장하였다.

그리고 자동필터로 결과가 10인것만 골라내었다. 대략 100개 가까이 나오는군.

아~ 그 후로 몇 번인가 더 수정을 해보고 다른 자료들을 찾다보니 문자형식의 변수 내용이 계산식일 때 계산해 내는 함수를 만들어 놓은것을 찾아내서 적용해 봤더니 계산이 되는 것이다.

이것으로 10인것만 골라 출력하도록 바꾸어서 해결봤다는 말씀!

결과를 보고 싶으신 분은 이 링크를 누르시라, 주소창에 t=다음에 숫자를 넣으면 결과의 갯수, f=다음에 넣으면 계산한 숫자의 갯수를 정할 수 있다. r=은 결과로 나올 값을 정한다. 기본은 50개 결과를 나오도록 했고, 4개의 숫자로 계산하도록 만들었고 10이 결과가 되도록 만들었다.