숫자야구 규칙과 공략

서로 다른 네 자리 숫자를 스트라이크와 볼이라는 두 개의 수만 듣고 알아내는 게임입니다. 규칙은 세 줄이면 끝나지만 어떻게 좁히느냐에서 실력이 갈립니다. 처음 하는 분이 읽을 부분부터, 후보가 몇 개까지 줄어드는지 직접 세어 본 계산까지 순서대로 실었습니다.

숫자야구는 어떤 게임인가

한쪽이 숫자를 정해 숨기고 다른 쪽이 그 숫자를 알아맞히는 놀이입니다. 맞히는 쪽은 네 자리 숫자를 소리 내어 부르고, 숨긴 쪽은 그 부름에 대해 맞은 개수 두 가지만 알려 줍니다. 정답을 직접 말해 주는 일은 끝까지 없습니다. 그 두 개의 수를 여러 번 쌓아서 정답 하나를 짜맞추는 것이 이 게임의 전부입니다.

이름과 용어는 야구에서 빌려 왔고 영어권에서는 황소와 암소라는 이름으로 알려져 있습니다. 종이와 연필만 있으면 되는 놀이라 컴퓨터보다 훨씬 오래되었습니다. 겉보기에는 숫자를 다루지만 더하거나 빼는 일은 한 번도 없어서, 숫자 대신 열 가지 색을 써도 게임은 그대로 성립합니다.

운이 얼마나 섞여 있는지는 세어 보면 압니다. 서로 다른 네 자리 숫자는 첫 자리에 열 가지, 둘째 자리에 남은 아홉 가지, 셋째에 여덟 가지, 넷째에 일곱 가지라서 모두 5040가지입니다. 찍어서 한 번에 맞을 확률은 5040분의 1인데, 뒤에서 보겠지만 논리로 좁히면 대개 대여섯 번이면 끝납니다. 그 차이가 이 게임이 재미있는 이유입니다.

기본 규칙

비밀수가 어떻게 생겼나

비밀수는 0부터 9까지의 숫자 중 네 개를 골라 늘어놓은 것입니다. 네 숫자는 서로 달라야 해서 같은 숫자가 두 번 들어가는 일은 없습니다. 맨 앞자리에 0이 오는 것은 허용됩니다. 그래서 0473 같은 수도 정답이 될 수 있고, 이 점을 잊으면 후보의 10분의 1 가까이를 처음부터 놓치고 시작하게 됩니다.

스트라이크와 볼

네 자리를 부르면 두 개의 수가 돌아옵니다. 숫자도 맞고 자리도 맞은 개수가 스트라이크이고, 숫자는 비밀수 안에 있지만 다른 자리에 있는 개수가 볼입니다. 한 숫자가 스트라이크와 볼로 두 번 세어지는 일은 없습니다. 그래서 스트라이크와 볼을 더한 값은 언제나 내가 부른 네 숫자 중 비밀수에 실제로 들어 있는 개수와 같습니다. 이 한 줄이 나중에 아주 크게 쓰입니다.

아웃과 홈런

스트라이크도 볼도 0이면 아웃입니다. 부른 네 숫자가 비밀수에 하나도 없다는 뜻입니다. 네 개가 모두 스트라이크면 홈런이고 그 판은 이깁니다. 자리만 전부 어긋난 경우, 그러니까 0스트라이크 4볼도 나올 수 있는데 이건 사실상 거의 다 온 상태입니다.

이 앱의 세부 규칙

여기부터는 이 앱이 실제로 하는 일입니다. 숫자야구는 구현마다 다른 구석이 있어서 한 번 읽어 두면 헷갈릴 일이 줄어듭니다.

하루에 하나, 모두 같은 비밀수

비밀수는 그날 날짜에서 뽑은 값으로 만들어집니다. 날짜 문자열을 하나의 수로 접어서 그 수로 0부터 9까지를 섞고 앞의 네 개를 자릅니다. 같은 날 들어온 사람은 누구나 같은 비밀수를 받고, 자정이 지나면 새 문제가 열립니다. 기준은 기기의 날짜라서 시차가 다른 곳에 있으면 문제가 바뀌는 시각도 그만큼 다릅니다.

만드는 일도 판정하는 일도 전부 브라우저 안에서 일어납니다. 비밀수가 서버에서 내려오지 않고 부른 숫자도 서버로 가지 않습니다. 계정도 필요 없습니다.

기회는 열 번

한 판에 열 번까지 부를 수 있습니다. 홈런이 나오면 그 자리에서 끝나고, 열 번을 다 쓰면 판이 닫히면서 정답이 화면에 공개됩니다. 남은 횟수는 입력칸 위에 몇 번째인지로 계속 표시됩니다. 열 번은 넉넉한 편입니다. 5절에서 세어 본 바로는 논리적으로 고르기만 하면 최악의 경우에도 여덟 번이면 끝납니다.

넣는 법과 걸러지는 입력

입력칸에 네 자리를 이어서 치면 됩니다. 숫자가 아닌 글자는 아예 들어가지 않고 다섯 번째 글자도 잘립니다. 네 자리를 채웠는데 같은 숫자가 섞여 있으면 서로 달라야 한다는 문구가 뜨고 던지기 단추가 눌리지 않습니다. 엔터를 쳐도 제출됩니다. 부르는 순서에 제한은 없어서 어떤 수를 언제 던지든 자유입니다.

저장되지 않는 것

이 부분은 분명히 적어 둡니다. 지금까지 부른 기록은 화면에만 있고 어디에도 저장되지 않습니다. 새로고침하거나 창을 닫았다 열면 기록이 사라지고 처음부터 다시 시작합니다. 비밀수는 날짜에서 나오므로 같은 날이면 그대로지만, 이미 알아낸 힌트는 머릿속에만 남습니다. 한 판을 붙들고 있는 동안에는 탭을 그대로 두는 편이 좋습니다.

없는 기능도 적어 둡니다. 답을 알려 주는 힌트 단추가 없고, 한 수를 무르는 되돌리기가 없으며, 남은 후보를 대신 세어 주는 기능도 없습니다. 시간을 재지도 않습니다.

공유 문구에 담기는 것

판이 끝나면 결과를 복사하는 단추가 나옵니다. 복사되는 글에는 날짜와 몇 번 만에 끝냈는지, 그리고 매 회 스트라이크가 몇 개 볼이 몇 개였는지가 표시로만 들어갑니다. 비밀수도, 부른 숫자도 들어가지 않습니다. 아직 오늘 판을 안 한 친구에게 보내도 답이 새지 않게 만들어 둔 것입니다.

기본 요령

첫 수는 무엇으로 시작해도 같습니다

처음 부를 네 자리를 고민하는 분이 많은데, 결론부터 말하면 고민할 필요가 없습니다. 5040가지 첫 수를 전부 대입해서 각각이 5040개의 후보를 어떻게 쪼개는지 세어 봤더니 결과가 완전히 같았습니다. 0123으로 시작하든 5907로 시작하든 판정별로 남는 후보 개수가 한 개도 다르지 않습니다. 아직 아무 정보도 없는 상태에서는 숫자에 이름표가 없기 때문입니다. 첫 수에 행운의 번호를 넣든 생일을 넣든 손해가 아닙니다.

첫 판정이 얼마나 줄여 주나

그 계산에서 나온 표를 그대로 싣습니다. 첫 수를 하나 던졌을 때 각 판정이 나올 경우와, 그때 남는 비밀수 후보의 개수입니다. 전부 더하면 5040이 됩니다.

첫 판정남는 후보
0스트라이크 0볼 (아웃)360가지
0스트라이크 1볼1,440가지
0스트라이크 2볼1,260가지
0스트라이크 3볼264가지
0스트라이크 4볼9가지
1스트라이크 0볼480가지
1스트라이크 1볼720가지
1스트라이크 2볼216가지
1스트라이크 3볼8가지
2스트라이크 0볼180가지
2스트라이크 1볼72가지
2스트라이크 2볼6가지
3스트라이크 0볼24가지
4스트라이크 (홈런)1가지

가장 흔한 판정은 0스트라이크 1볼이고 5040번 중 1440번 나옵니다. 판정을 하나 받은 뒤에 평균적으로 몇 개가 남는지도 세어 봤는데 931.41가지였습니다. 한 번에 5040가지가 약 5분의 1로 줄어드는 셈입니다. 아직 갈 길이 멀어 보이지만, 두 번째 수부터는 줄어드는 속도가 훨씬 빨라집니다.

합을 먼저 보세요

초보와 숙련자를 가르는 첫 번째 습관입니다. 스트라이크와 볼을 따로 보지 말고 먼저 더하세요. 그 합이 내가 부른 네 숫자 중 비밀수에 들어 있는 개수입니다. 1스트라이크 2볼이면 세 개가 들어 있다는 뜻이고 하나는 아니라는 뜻입니다. 어느 숫자가 들어 있는지는 아직 모르지만 몇 개인지는 확정입니다. 자리 문제는 그다음에 붙들어도 늦지 않습니다.

아웃은 손해가 아닙니다

한 개도 없다는 판정이 나오면 허탕처럼 느껴지지만 사실 가장 크게 줄여 주는 판정 중 하나입니다. 0123을 부르고 아웃이 나왔다면 비밀수는 4부터 9까지 여섯 숫자로만 이루어져 있어서 후보가 360가지밖에 남지 않습니다. 여섯 개 중 넷을 순서 있게 고르는 경우의 수 그대로입니다. 첫 판정 뒤 평균이 931.41가지인 것을 생각하면 아웃은 평균의 3분의 1 수준으로 줄여 주는 좋은 판정입니다. 아웃이 나오면 지운 네 숫자를 확실히 표시해 두고 나머지 여섯 개에서만 고르세요.

지운 숫자를 눈에 보이게 두세요

이 앱은 후보를 대신 세어 주지 않고 부른 기록도 새로고침하면 사라집니다. 0부터 9까지 열 개를 종이에 적어 두고 아니라고 밝혀진 숫자에 줄을 그으며 하시는 편이 훨씬 편합니다. 메모장 한 줄이면 충분합니다. 머릿속으로만 하면 열 번의 기회 중 두세 번을 이미 아는 사실을 다시 확인하는 데 쓰게 됩니다.

고급 요령

아래 숫자는 전부 5040가지를 실제로 전부 대입해 세어 본 값입니다. 어림잡은 것이 아니라 한 번에 하나씩 판정을 매겨 남는 개수를 더한 결과입니다.

두 번째 수는 한두 개만 겹치게

첫 수를 0123으로 두고 두 번째로 부를 수 5040가지를 전부 시험해서, 각각이 평균 몇 개의 후보를 남기는지 계산했습니다. 겹치는 숫자 개수로 묶으면 결과가 뚜렷하게 갈립니다.

흔히 권하는 방식은 0123 다음에 4567을 불러 여덟 숫자를 한꺼번에 훑는 것입니다. 나쁘지는 않지만 최선은 아닙니다. 겹치는 숫자를 하나도 두지 않으면 어떤 수를 고르든 평균 216.1가지가 남는데, 앞서 부른 숫자 두 개를 남기고 자리를 옮긴 수, 예를 들어 1045 같은 수를 부르면 167.0가지까지 내려갑니다. 이유는 간단합니다. 겹치는 숫자를 자리만 바꿔 다시 던지면 어떤 숫자가 들어 있는지와 그 숫자가 어느 자리인지를 한 번에 묻게 되기 때문입니다.

같은 네 숫자를 자리만 바꾸는 수는 아깝습니다

0123 다음에 1032처럼 같은 숫자를 그대로 두고 자리만 섞는 수가 가장 나빴습니다. 평균 495.8가지가 남아서 겹치지 않는 수보다 두 배 넘게 나쁩니다. 어떤 숫자가 들어 있는지에 대해 새로 얻는 정보가 하나도 없기 때문입니다. 이 수법은 들어 있는 숫자를 이미 다 알아낸 뒤 자리만 남았을 때 쓰는 것이지, 초반에 쓰는 수가 아닙니다.

판정 하나로 후보가 열 개 아래로 떨어질 때

앞의 표에서 눈여겨볼 줄이 몇 개 있습니다. 0스트라이크 4볼이 나오면 남는 후보가 단 아홉 가지입니다. 네 숫자는 다 맞았고 네 자리가 전부 어긋난 배열만 남기 때문입니다. 0123에 대해 그 아홉 가지는 1032, 1230, 1302, 2031, 2301, 2310, 3012, 3201, 3210입니다. 2스트라이크 2볼이면 여섯 가지만 남습니다. 어느 두 자리가 맞았는지 고르고 나머지 둘을 맞바꾼 배열뿐이기 때문입니다. 3스트라이크 0볼도 24가지로 좁아서 네 자리 중 어디가 틀렸는지 고르고 남은 여섯 숫자 중 하나를 넣는 경우가 전부입니다.

숫자를 다 찾았다면 세 자리 맞기는 없습니다

들어 있는 네 숫자를 확정했다면 남은 것은 순서뿐이고 24가지입니다. 그중 하나를 불렀을 때 나올 수 있는 판정은 네 가지밖에 없습니다. 0스트라이크가 9가지, 1스트라이크가 8가지, 2스트라이크가 6가지, 그리고 홈런 1가지입니다. 3스트라이크는 나올 수 없습니다. 세 자리가 제자리에 있으면 남은 한 자리도 저절로 제자리이기 때문입니다. 그래서 이 단계에서 2스트라이크가 뜨면 후보가 여섯 개로 줄고, 다음 한 수에서 두 자리를 골라 바꿔 보면 거의 끝납니다.

실제로 좁혀 본 예

말로만 하면 감이 안 오니 한 판을 끝까지 세어 봤습니다. 0123으로 시작해서 1스트라이크 1볼이 나오면 후보는 5040에서 720으로 줄어듭니다. 이어서 2345를 불러 다시 1스트라이크 1볼이 나오면 92가지가 됩니다. 세 번째로 4567을 불러 0스트라이크 2볼이 나오면 28가지만 남습니다. 세 번 불렀을 뿐인데 5040가지가 28가지가 된 것입니다. 여기서 한두 번만 더 잘 고르면 답이 하나로 잡힙니다.

최악을 줄이는 쪽으로 고르세요

남은 후보 중에서 다음 수를 고를 때 기준이 하나 있습니다. 그 수를 불렀을 때 판정별로 후보가 어떻게 갈리는지 보고, 가장 큰 덩어리가 제일 작아지는 수를 고르는 것입니다. 평균이 아니라 최악을 기준으로 삼는 방식입니다. 이 기준을 5040개 비밀수 전부에 대해 끝까지 돌려 봤더니 평균 5.32번에 끝났고 가장 오래 걸린 경우가 여덟 번이었습니다. 세 번 만에 끝나는 비밀수가 109개, 다섯 번이 2071개로 가장 많고, 여덟 번까지 가는 비밀수는 5040개 중 세 개뿐이었습니다. 열 번이라는 기회가 왜 넉넉한지 여기서 나옵니다. 사람이 이 계산을 그대로 할 수는 없지만, 후보를 반씩 가르는 쪽으로 고른다는 감각만 가져가도 충분합니다.

자주 막히는 부분

볼만 계속 나올 때

볼이 많다는 것은 숫자는 잘 골랐는데 자리가 어긋났다는 뜻이라 오히려 좋은 신호입니다. 이때 새 숫자를 더 넣으면 애써 모은 정보가 흐려집니다. 들어 있는 것이 확실한 숫자들을 유지한 채 자리를 옮겨서 부르세요. 스트라이크가 하나 늘고 볼이 하나 주는 식으로 움직이면 방금 옮긴 자리가 정답이라는 뜻입니다.

숫자는 알았는데 자리가 안 잡힐 때

24가지가 남은 상태입니다. 한 번에 다 뒤집지 말고 두 자리씩만 맞바꿔 보세요. 스트라이크가 어떻게 움직이는지가 곧 답입니다. 2 늘었다면 새로 놓은 두 자리가 둘 다 정답이고, 1 늘었다면 그중 한 자리만 정답입니다. 그대로라면 원래 두 자리도 아니었고 바꾼 두 자리도 아니라는 뜻이라 그 두 숫자는 나머지 두 칸으로 갑니다. 1 줄었다면 원래 둘 중 하나가 맞았던 자리였고, 2 줄었다면 둘 다 맞았던 자리를 괜히 건드린 것입니다. 이 다섯 가지가 전부라서 해석이 갈릴 일이 없습니다. 대신 세 자리 이상을 한꺼번에 흔들면 무엇 때문에 숫자가 움직였는지 알 수 없게 됩니다.

0을 빠뜨릴 때

가장 흔한 실수입니다. 맨 앞이 0인 수도 정답이 될 수 있는데 부를 때 무의식적으로 1부터 9까지만 쓰는 분이 많습니다. 0을 후보에서 빼면 5040가지 중 2016가지를 처음부터 버리고 시작하는 셈입니다. 첫 수에 0을 넣어 두면 이 문제는 저절로 해결됩니다.

이미 아는 것을 다시 물을 때

던지기 전에 한 번만 확인해 보세요. 지금 부르려는 수가 지금까지 받은 판정과 모순되지 않는 수인가요. 이미 아웃으로 지운 숫자가 섞여 있거나 앞서 밝혀진 자리를 어기고 있다면 그 수는 어떤 판정이 나오든 새로 알려 주는 것이 거의 없습니다. 남은 후보 중에서 실제로 답이 될 수 있는 수를 고르는 것만으로도 회수가 두세 번 줄어듭니다.

기록이 사라졌을 때

새로고침하면 부른 기록이 지워지고 처음부터 다시 시작됩니다. 다만 오늘의 비밀수는 그대로라 지금까지 알아낸 사실은 여전히 유효합니다. 종이에 적어 두었다면 그 정보를 그대로 쓰면서 이어 가면 됩니다. 반대로 아무 데도 안 적어 두었다면 사실상 처음부터입니다. 한 판이 길어질 것 같으면 부른 수와 판정을 어딘가에 옮겨 두세요.

오늘 판을 놓쳤을 때

홈의 「지난 판」에서 최근 14일 안의 문제를 다시 풀 수 있습니다. 비밀수가 그날 날짜에서 나오기 때문에 같은 날짜는 언제 열어도 같은 문제입니다. 14일이 지난 문제는 열리지 않고, 내일 자정이면 아무도 안 풀어 본 새 문제가 열립니다.