再びトーナメント表作成 ① 常用対数が使えることに気づいた

前回まで、賞状作成用のマクロについて紹介してきた。
infoment.hatenablog.com
実は先日の大会の後、「トーナメント作成ツール」についても相談を受けていた。
そういえば随分と前になるが、作ったことがあったっけ。

今回は、その焼き直しに挑戦するお話。

以下は、3年以上前に作成したトーナメント作成ツールだ。
infoment.hatenablog.com

今見返してみると、もっと簡単にできる部分もあることに気づく。
例えば、トーナメントのサイズを求める方法などだ。

シード選手が架空の相手に不戦勝すると考えた場合、選手数とトーナメントの
サイズは以下の関係となる。

  1. 1~2人のとき 2人
  2. 1~4人のとき 4人
  3. 1~8人のとき 8人
  4. 1~n人のとき ?人

例えば18人のとき、トーナメントのサイズを幾つにすればよいか?ぼんやりと
眺めていて、そういえば去年、長男と一緒にやった対数が使えることに気づいた。

まず、18の常用対数を求める。
\log _{10}18\simeq 1.255273
また、
\log _{10}2\simeq 0.3010
であるから、以下の不等式が成立する。
\log _{10}2^{4} <\log _{10}18<\log _{10}2^{5}
この182^5に切り上げる際は、ExcelなのでCEILING関数を使うことにした。
support.microsoft.com
この関数、一番近い基準値の倍数に切り上げてくれる。なんて便利なんだ。
実際に使用する数式は、このようになる。
=CEILING.MATH(LOG10(18),LOG10(2))=1.50515
従って最終的に、求めるトーナメントのサイズは以下の式で求まる。
=10^{1.50515}=32
という訳で、人数に関係なく同じ式で対応が可能だったわけだ。

こんなシンプルな方法があったとは。ぐぬぬ、もっと早く気づいていれば。

次回に続きます。

参考まで。