2021 08 12 (수) - 철권7 대회 조추첨 프로그램
1. 학습 날짜 : 2021 08 12(수)
2. 학습 시간 :
3. 학습 주제 : 철권7 대회 조추첨 프로그램 제작
4. 동료 학습 방법 : 개인
5. 학습 목표 : 철권7 대회 조추첨 프로그램 설계, 제작
6. 학습 내용 :
요구사항
- 아래와 같은 엑셀 데이터가 존재하며, 데이터 내에서 스팀 닉네임과 계급은 선택적으로 들어가는 데이터이다.
순번 / 인덱스 | 플레이어 이름 | 스팀 닉 | 계급 |
---|---|---|---|
1 | a | aa | vindicator |
2 | b | bb | emperor |
3 | c | cc | tekken king |
4 | d | dd | 1st dan |
5 | e | ee | 2st dan |
6 | f | ff | 3st dan |
7 | g | gg | 4st dan |
8 | h | hh | 5st dan |
9 | i | ii | 8st dan |
- 참가자 n명이 존재한다.
- 아래 엑셀 행을 1.무작위 or 2.계급 에 따라 조를 p명씩 묶어 같은 조끼리 액셀 데이터를 재배치한다.
- 묶인 조는 엑셀에 높은 계급별로 순차적으로 배치된다.
- 계급에 대한 데이터가 존재하지 않는다면, 모든 계급을 0으로 처리한다.
- 계급에 대한 데이터가 숫자로 주어질 경우도 처리한다.
- 묶인 조는 엑셀에 높은 계급별로 순차적으로 배치된다.
- 무작위 조편성을 할 경우, 모든계급을 0으로 처리한다.
- 계급별로 조편성을 할 경우, 가장 낮은 계급부터 가장 높은 계급까지 오름차순으로 key를 부여한 뒤, key을 기반으로 해서 조를 나눈다.
- 사용할 알고리즘 : 참가자 n명. 1조당 p명, 총 k개의 조(k = n / p) 일 때, 각 조의 첫번째 entry는 가장 높은 계급부터 n-k+1번째로 높은 계급을 배치하며, 그 이후로의 배치는 조편성이 끝난 entry를 제외한 나머지를 역순으로 배치한 뒤, 각 조에 배치한다.
- n이 p로 떨어지는 수가 아닐때는, p명 미만의 조가 생길 수 있다.
- 동일한 데이터로, 행 순서만 바꾸어 엑셀파일을 새로 만든다.
설계
엑셀 데이터 내용 :
순번 / 인덱스 | 플레이어 이름 | 스팀 닉 | 계급 |
---|---|---|---|
1 | a | aa | vindicator |
2 | b | bb | emperor |
3 | c | cc | tekken king |
4 | d | dd | 1st dan |
5 | e | ee | 2st dan |
6 | f | ff | 3st dan |
7 | g | gg | 4st dan |
8 | h | hh | 5st dan |
9 | i | ii | 8st dan |
설치 프로그램
pip3 install pandas
pip3 install xlrd
pip3 install openpyxl
파이썬의 pandas, openxl 모듈을 사용해서 엑셀을 조작해가면서 짰다.
조 배치 알고리즘은 위와 같다.
배포
첫번째 배포 시도때는 x.py
파일을 exe파일로 만들어주는 pyinstaller
패키지를 활용해서 .exe
파일로 배포하려고 했으나, 데스크탑에서 만든 exe
파일을 노트북으로 옮긴 뒤 실행하려고 시도해봤으나, 파일이 다운이 되지 않을 뿐 아니라, 어찌저찌 압축파일로 풀어서 프로램을 다운한다고 해도 운영체제 내 방화벽에서 프로그램을 지운다.

상기 이유는 다음과 같아보인다.
https://blog.naver.com/PostView.nhn?blogId=dygksrhktngk&logNo=222109463440
exe 실행파일의 인증서가 없기 때문에 윈도우 방화벽은 프로그램을 "트로이 목마" 바이러스라고 인식하고 파일실행전에 "컷"해버린다고 한다.

virustotal 이라는 간편하게 바이러스를 검사할 수 있는 사이트에서 체킹을 했더니 실제로 8개의 백신프로그램에서 내 프로그램을 바이러스로 인식할 "가능성"이 있다고 알려줬다.
배포를 포기하려고 했으나
어찌저찌 이곳저곳 물어보고 다녀서 정보를 얻었다.
윈도우 스크립트 batch파일로
파이썬을 아예 모르는 사람도 컴퓨터에 파이썬을 설치할 수 있도록 아래와 같이 짰다.
@ECHO OFF
CLS
curl -L https://www.python.org/ftp/python/3.9.5/python-3.9.5-amd64.exe -O %~dp0\python-3.9.5-amd64.exe
%~dp0\python-3.9.5-amd64.exe /quiet SimpleInstall=1 InstallAllUsers=1 PrependPath=1 Include_test=0 Include_launcher=0 Include_tcltk=0
pause
python -m venv venv
%~dp0\venv\Scripts\pip.exe install xlrd openpyxl pandas
pause
결국 코딩을 잘 몰라도 되는 분들도 사용할 수 있도록 배포했다.

https://github.com/daumtto53/tekken7_contest_draw