衆議院のコードを参議院にそのまま持っていけなかった話

同じ選挙のはずなのに、定数が1人の区と6人の区が混ざっていた。
「競っている順」という当たり前の並び替えが、いきなり通用しなくなった。

衆議院を一通り作り終えて、参議院にも同じ選挙戦モードを足すことにした。
選挙区で戦って、比例代表があって、公示から投票日まで日数を数える。骨格はほとんど同じに見えたので、正直、コピーしてちょっと直せば終わると思っていた。

「競っている順」が意味をなさない

衆議院の小選挙区は、必ず1人しか当選しない。だから「自分の候補と、いちばん票の近い相手との差」を見れば、競っているかどうかがそのまま分かる。
参議院の選挙区は違う。定数1人の県もあれば、東京都のように6人当選する区もある。6人区で2位につけていれば余裕で当確、逆に定数1の区で2位なら当確までまだ遠い。

衆議院のコードをそのまま持ち込んで「対立候補との差」で競り具合を出したら、東京都のような大きな区で数字が意味をなさなくなった。
結局、見るべきは「対立候補との差」ではなく「当落ラインとの差」——その区の定数番目の得票との差に作り直した。定数が変わっても、これなら同じ物差しで測れる。

比例代表も、ブロックの数だけ勝手が違った

衆議院の比例代表は全国を11ブロックに分けている。参議院は全国で1ブロックだけ。
ブロックが複数あることを前提にしたループ処理を持ち込むと、境界値のところで妙な挙動をしないか身構えたが、幸い参議院側は最初から「ブロックは1つ」という前提で作り直したので、その手のバグは出ずに済んだ。骨格が同じに見えても、前提が違う部分は素直に書き直したほうが早い。

もう一つ、衆議院にあって参議院に無いものがある。小選挙区と比例代表への重複立候補と、それによる惜敗率での復活当選だ。参議院にはこの仕組みがない。
おかげで、参議院側の当落判定は衆議院より単純になった。無いものを無理に持ち込まなくていい、というのも移植の中でわかったことの一つだった。

スタンプラリーに挑戦する 行った場所・気になる場所は、現地チェックインでスタンプに残せます。 みんなのコースを見てみる 会員が作ったスポット巡りのコースを都道府県から探せます。自分だけのコースも作れます。 運営者の個人noteも書いています AI活用やサイト運営で気づいたことを、もう少し個人の視点で掘り下げています。

※運営者が個人で書いているnoteです。

技術ブログ一覧へ戻る