2021/일일 기록

2021 08 12 (수) - 철권7 대회 조추첨 프로그램

ililillllllliilli 2021. 8. 13. 16:43

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/chemicat53/blogging_image/blob/main/img/화면 캡처 2021-08-13 163938.jpg?raw=true)

https://github.com/daumtto53/tekken7_contest_draw