📖 Git Hub
「 柿木さんか 瀧澤さんか 山田さんか カツ丼が ソースコードを持っているのでは?」
「 スイス・システム・トーナメント(Swiss-system-tournament;スイス式トーナメント)は、
リーグ(League;総当たり)できないときに 使われる。
リーグできない理由は、人数多いとか、時間無いとか、様々だぜ」
「 じゃあ まず リーグのマッチングのアルゴリズムを実装してくれだぜ」
「 👆 y が 1 ~4 の人たち、ここでは偶数の人数としよう、
全員が 次の人を選んだら……」
「 👆 ペアリングは成立しないので、
偶数番の人には 正負の符号を反転してもらう必要があるな」
「 奇数と偶数で 挙動が変わるアルゴリズムなのかしらねえ?」
「 👆 モジュロ(modulo;法)を使う時は 序数を使った方がいいかだぜ」
ラウンド番号を序数 r とする
参加人数を yy とする。yy は偶数とする
参加者番号は基数 y とする
リーグでの対戦相手番号は
(y+yy+r)%yy if 自分の参加者番号が偶数
(y+yy-r)%yy if 自分の参加者番号が奇数
「 👆 yy が 8 のとき、 r=2 で ぐちゃぐちゃだぜ」
「 画面端でループしてるけど、
蛇の頭が ただ伸びてるだけですもんね」
「 対角線を軸とした、線対称になる式にしないといけないのでは?」
「 0番目の+6と、 6番目の-6 は線対称になるのは 分かるし、
プラス方向に進むか、マイナス方向に進むかは 対角線の位置で分かる」
「 じゃあ 奇数、偶数じゃなくて 対角線を使って 分けりゃいいんじゃないの?」
「 👆 対角線で分かれているのは確かだが、
xについても、yについても、排他的でないといけないぜ」
「 👆 上のグループと、下のグループは 法則が別かな? 左右反転」
「 認識しづらいな…… もっと良い補助線があるんじゃないか?」
「 分岐があるような計算 困難なんで
分岐が無くせないか まず考えてみよう」
「 👆 対角線に +4 した 5 を使って リスタートしたらどうだぜ?」
「 関数作れないの? 行番号と 列番号で ステップ数が出てくる Excel の関数みたいなやつ」
Source Target
------ -----------
0, 1, 0, 1, 0, 1,
1, 0, 0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
「 👆 テーブルサイズを大きくすると レイアウトが崩れるから、
4倍のテーブルは 新しく作るようにしないといけないな。
コピー中に 元の表の5倍 メモリサイズ食う」
Source Target
------ ------------
0, 1, 0, 1, 2, 3,
2, 3, 4, 5, 6, 7,
8, 9,10,11,
12,13,14,15,
Source Target
------------- -----------------------------------
(0,0), (0,1), ( 0, 0), ( 0, 1), ( 0, 2), ( 0, 3),
(1,0), (1,1), ( 1, 0), ( 1, 1), ( 1, 2), ( 1, 3),
( 2, 0), ( 2, 1), ( 2, 2), ( 2, 3),
( 3, 0), ( 3, 1), ( 3, 2), ( 3, 3),
「 👆 (x, y)
の座標形式に変換してから、同じとこへコピーする感じだな」
x = index % edge_size
y = math.floor(index / edge_size)
index = y * edge_size + x
.
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント