追記(11/3)
たくさんの反響をいただいてびっくりしています。ありがとうございます。
コメント欄にて効率的な探索法や、多数の自治体のデータなどをご紹介いただいたので、そちらもぜひご一読ください。あとスパムっぽいコメントを通報していただけると助かります
トリビアの種
衆議院選挙の比例代表制で「民主党」と書くと、立憲民主党と国民民主党に票が按分されます。
この記事によれば、立憲と国民、それぞれの投票の割合を求めて、「民主党」と書いた人の数を掛け、小数点第四位を切り捨てたものを加算するとのことです。
ということは、得票比が保たれます。なら、得票数から「民主党」と書いた人の数が計算できるのではないでしょうか?
このトリビアの種、つまりこういうことになります。
弊自治体で立憲または国民に投票した1,811人のうち、「民主党」と書いたのは~~~っ、ンン!人!
実際にやってみた
弊自治体の比例代表の投票結果は以下でした。
- 立憲民主党 1494.538票
- 国民民主党 316.461票
足すと1810.999となるので、票数は全部で1811票で良さそうです。
Qiitaでわざわざ政治の話をしてることからも分かる通り、探索にはプログラムを利用しました。票数はかならず整数になることを利用すれば、もっと効率の良い探索方法があると思いますが、数が小さかったので、男は黙って全探索です。ムダが多いよ~。
double rikken_actual = 1494.538;
double kokumin_actual = 316.461;
double total = Math.Round(rikken_actual + kokumin_actual);
double rikken_per = rikken_actual / total;
double kokumin_per = kokumin_actual / total;
for(double kakutei = 1; kakutei <total; kakutei++)
{
double rikken = Math.Round(kakutei * rikken_per);
double kokumin = Math.Round(kakutei * kokumin_per);
double anbun = total - rikken - kokumin;
double rikken_total = rikken + (double)rikken / kakutei * anbun;
double kokumin_total = kokumin + (double)kokumin / kakutei * anbun;
if(Math.Floor(rikken_total* 1000) / 1000 == rikken_actual){
Console.WriteLine($"立憲:{rikken} 国民:{kokumin} 按分:{anbun} -> 立憲{rikken_total:0.0000} 国民{kokumin_total:0.0000}");
}
}
結果は以下の1行でした。数字によっては複数の候補が発生しうりますが、今回はこの内訳でしかこの結果にはなり得ないということです。
立憲:1209 国民:256 按分:346 -> 立憲1494.5386 国民316.4614
346/1811ですから、弊自治体では、立憲か国民に投票したかった人の、実に2割近くが「民主党」と書いていることになります。結構多いんですねえ。
いかがでしたか
弊自治体で立憲または国民に投票した1,811人のうち、「民主党」と書いたのは 346人(19.1%)
八分咲きといったところでしょうか。