개인적으로 로또(lotto) 게임에 대한 관심이 많습니다. 로또는 무작위 게임의 대명사로 '분석'이라는 단어와는 연관성이 적을지도 모릅니다. 하지만, 게임을 재미있게 즐기기 위해서는 자신만의 도구 하나는 있어도 좋을 것 같다는 생각을 합니다. 파이썬과 qtdesigner를 이용한 프로그램 제작을 하나의 프로젝트로 진행해 보려고 합니다.
✔ 로또 프로그램에 대해 관심을 가지게 된 계기.
처음에는 엑셀을 이용해 특정 계산 및 알고리즘으로 등장하는 번호를 활용해 봤습니다. 물론, 상위 당첨이 되지는 않았지만 4,5등은 다수 당첨되는 결과를 얻었습니다.
다만, 버튼 한번만 클릭하면 추출되는 시스템은 아니었기에 불편함과 아쉬움이 컸습니다. 만약, '내가 원하는 결과를 자동화를 통해 높은 확률로 뽑아낼 수 있다면 얼마나 좋을까'라는 생각을 가슴 한편에 가지고 있었습니다. 그렇게 시작되었습니다.
아직까지 완성이라는 단어를 붙일 수도 없습니다. 단지, 조금씩 쌓아가고 있는 중인데, 정리겸 블로그에 남겨도 좋을 것 같아 남겨보려고 합니다. 완성까지 얼마나 걸릴지는 알 수 없고, 최종적으로 완성할 수 있을지도 의문이기는 하지만 만들 수 있다는 생각은 듭니다.
✔ 현재 진행상황
현재 몇몇가지 기능은 구현되어 있습니다. 아주 기본적인 해당 회차 정보와 당첨번호를 정리한 부분 그리고 특정 번호를 선택하면 역대 출현한 당첨번호에서 선택한 번호를 표시해줍니다.
다음으로 구현한 기능은 3궁, 5궁에 대한 흐름을 파악할 수 있는 기능입니다. 로또에 관심이 있는 사람이라면 들어봤을 내용으로 궁도가 있습니다.
- 3궁
- 1,2,3을 시작으로 +3한 그룹들을 선정합니다.
- 예를 들어, 다음과 같습니다.
- 1,4,7,...
- 2,5,8,...
- 3,6,9,...
- 위 그룹들을 이용해 출현여부를 판단하는 방법입니다.
- 5궁은 당연히 1,2,3,4,5를 기준으로 +5씩한 번호들이 하나의 묶음으로 활용됩니다.
- 활용방법의 예시는 다음과 같습니다.
- 첫번째 자리에 3궁의 1, 5궁의 1이 나올 확률이 높다는 판단을 하면 고정수를 찾을 수 있습니다.
- 1,4,7,10,... / 1,6,11,...
- 위에서 겹치는 번호는 1이 가장 작네요.
- 만약 단번대가 나온다면 1이 유력한 수가 될 수 있습니다.
- 위와 같은 활용방법을 얻기 위한 정보를 파악할 수 있는 방법, 그리고 알고리즘으로 만들 수 있다면 자동으로 컴퓨터가 추천번호를 찾아줄 수 있겠죠.
◼ 프로그램 모습.
아직은 상당히 미흡한 부분이 많으며, 코드상 빠르게 연산이 가능한 방법으로 최적화되어있지 않기 때문에 추출하는데 시간이 걸리기도 합니다.
▪ 메인화면
위 화면에서 볼 수 있듯이, 기본적인 정보와 역대 당첨번호를 표로 표시해 줍니다. 그리고, 특정 번호를 테이블에서 선택하면 역대 당첨번호 중 같은 번호들을 검은 배경으로 확연히 표시되게 됩니다.
크게 활용 가능한 부분일지는 모르지만, 만드는 김에 기능을 추가해 봤습니다. 특별한 연산이 필요한 부분은 아니기 때문에 그리 많은 시간이 걸리지는 않습니다.
▪ 해당 회차와 비슷한 당첨번호 찾기(2번째 화면)
원하는 회차와 동일하게 출현한 번호들이 특정 개수만큼 포함되어 있는 번호들을 찾아서 나열해 줍니다. 패턴이 존재한다면 확실히 도움이 될 수 있는 부분일 것입니다. 물론, 무조건적으로 고정수를 찾을 수 있다는 보장은 없습니다.
▪ 현재 구현 중인 부분(3번째 화면)
현재 고심하고 있는 부분으로 3궁과 5궁에 관련된 부분입니다. 생각보다 복잡하게 느껴지며, 연산 및 검토 과정에서 적지 않은 시간을 소요하고 있어 막히고 있네요.
3번째와 4번째 탭에서 구현되고 있는 기능으로 대략 50%가 완성된 모습입니다. 다만, 사진에 확인할 수 있듯이 결과를 도출하는데 제법 많은 시간이 소요되게 됩니다. 1~5초 정도의 시간이 소요되네요. 아마도 for문을 반복적으로 사용해서 그런 것 같습니다.
적당히 db를 나눠서 저장해둔 후 활용하면 시간이 단축될 수 있지 않을까 생각합니다. 위 결괏값 추출 방식은 인터넷을 통해 얻게 된 다양한 정보를 활용하여 만들어가고 있습니다. 갈길이 멀죠.
✔ 앞으로 구현할 계획
3궁과 5궁에 대한 정보를 보다 포괄적으로 표시할 수 있도록 만들까 합니다. 한 번에 많은 정보를 비교하여 최적의 결과를 도출할 수 있도록 말이죠.
더불어, 컴퓨터가 자체적으로 최적의 번호를 추천할 수 있는 알고리즘을 완성하려 합니다. 이 부분이 가장 어려울 수 있을 것 같은데, 아마도 완성하고 나면 활용도가 높아질 수 있지 않을까 생각해 봅니다.
✔ 만약, 방문하신 분들도 관심이 있다면 이렇게 해보세요.
처음 접근한 방법은 특정 계산식의 확률입니다. '에이~ 무슨 말도 안 되는 소리야'라고 생각할 수 있겠죠. 개인적인 실험을 통해서 20%의 확률 값을 얻을 수 있었습니다.
다시 말해, 5개의 라인을 모으면 90% 이상 1수를 포함하게 되는 경우입니다. 활용도가 높다고 생각할 수 있지만, 6개의 그룹을 선택하면 중복 출현하는 수들이 발생할 수 있기 때문에 25개 안에서 6개의 수를 모두 얻지는 못합니다.
어떻게 활용할 수 있을까.
이 부분이 가장 고심되는 부분이죠. 모두 나열한 후, 자체 제작한 조합기를 통해 조합해봤습니다. 대략 50게임에 50%의 확률로 4등이 포함되었습니다. 가능 여부에 대해서는 증명할 수 없네요. 자료가 소실되었습니다.
개인적인 경험과 생각이기 때문에 진위여부에 대해서 깊이 생각하신다면 넘어가 주시길 바랍니다. 어쨌든, 파이썬으로 도전하고 있는 부분이기 때문에 본 블로그, 해당 카테고리에 가끔 기록을 남기려 합니다. 재밌게 봐주시면 좋겠네요.
댓글