ボウリングのレーン配当表作成が、面倒くさい。よし、PCにやらせよう。
情報系に疎いプログラミング未経験者がツール実装に初挑戦してみました。初心者でもできる業務効率化の一例として、参考になればと思います。
#はじめに
競技ボウリングの大会では、プレイヤーをレーンに配当するための表が必要となります。
この配当表には、「一人のプレイヤーが2度以上同じボックスに配当されない」ことと、「任意の2人が、同じタイミングで同一ボックスに2度以上配当されない(要するに『またお前と同じボックスかよ』が発生しない)」ことが要求されます。ボウリング界隈以外の人はよく分からないと思うので、読み飛ばしてもらって構いません。
とにかく、これを手作業で作成+眼力でチェックするのは結構しんどい(人間がやると1時間以上かかる)ので、ツールを用いて自動化してみましょう。
ページの最後に完成品を置いたので、良ければどうぞ(需要、あるのか?)。
※2020/11/10 追記
不具合が判明したので一時的に公開を取りやめています。解消次第、再公開します。申し訳ありません。
#0.配当表完成までの大まかな流れ
①プレイヤーに乱数でレーンを割り振る
②条件を満たさない箇所を見つけ出す
③問題箇所に限ってシャッフルをかける
④問題箇所が0になるまで②③を繰り返す
⑤必要な情報を出力する
#1. Excelでやってみよう!
ひとまずExcelで乱数を使って手作業でレーン配当表を作り、問題箇所の検出のみを自動化しました。Excelの関数さえよく分からない状況からの出発なので、いろいろとググりながらチェック機構を実装しました。Excel関連の情報はネットに山ほど転がっているのでありがたい。
問題点
・各大会ごとにプレイヤー数や使用ボックス数が異なるので、チェック機構を毎回手作業で組む必要がある(面倒くさい)。
・Excelと組み合わせ列挙の相性がめちゃめちゃ悪い。
#2. Python編
面倒なので、さらに自動化を進めたくなってきました。よし、プログラミングでやってみよう。でもプログラミング言語何も使えないじゃん。ということで__Python3__を学びます1。Pythonは視覚的にもめちゃくちゃわかりやすいので、初めての言語としてオススメです。ExcelVBA(いわゆる「マクロ」)も検討しましたが、扱いにくい&汎用性が低そうなのでやめました。
実装はひたすらやるだけなのですが、結構大変でした(AtCoderで言ったら、Diff800程度くらいの実装をひたすら繋げていく感じ)。最終的には400行くらいになりました。コーナーケース潰しの大変さも実感しました。
問題点
・Python上で文字列として入出力するので、Excelファイルとの間でコピペする必要があり、少々使いにくい
#3. openpyxl編
ここからは、入出力方式の改善を目指しました。
今回は、Python上でExcelファイルを扱えるopenpyxlモジュールを使いました。モジュールとは、道具箱みたいなもので、これをインポートすることによりPython上で出来ることが拡張されます。Pythonは特にモジュールが充実しているので、めちゃめちゃありがたい。このモジュールを用いることで、入出力をExcel上で行えるようになりました。openpyxlは特に有用なので、今後も積極的に使っていきたい。
問題点
・Pythonをインストールしていない人にはこのツールが共有できない
#4. tkinter編
さらに発展させて、枠に文字を入力することで動作し、レーン配当表をExcelファイルとして出力してくれるようなGUIアプリケーションにすることを目指しました。実際には、Pythonのtkinterモジュール(tinderじゃないよ)を使いました。前提知識0なのでひたすらググり続ける感じでしたが、学びも多かった。
書き上げたPythonのソースコードをpyinstallerを用いてexeファイル化することにより、GUIアプリケーションとして完成しました。これでPythonを使えない人でもツールを使えるようになりました。
↑こんな感じで入力すると…
↑こんな感じでExcelファイルとして出力される。
名前リストは2019年のPBA賞金ランキングから取ってきました。夢のような大会ですね。
#完成品
完成したアプリケーションはこちら(Dropbox)よりダウンロード可能です。
ぜひ遊んでみてください。
※Windows用とMac用で分かれているので、正しい方のフォルダをダウンロードしてください。
※2020/11/10 追記
不具合が見つかった為、一時的に公開を取りやめています。
最後に
最後まで読んでいただきありがとうございました。実はこのツールをWEBアプリケーション化することも考えたのですが、htmlの知識もゼロなのでひとまず断念しました。htmlに挑戦したらまた報告します。
#番外編
このツールの実装と並行して、プログラミングコンテストのAtcoderも始めました。競技プログラミングは役に立たん!みたいな話も聞きますが、リスト等の基本的な扱いに慣れるのには有用で、少なくとも緑色前半くらいまでの内容は非情報系の人々の実生活にも役立つような気がします。
-
やさしいPython(高橋麻奈,SBクリエイティブ社), この本は名前に反して分かりやすかった、オススメです。 ↩