最大剰余方式による議席配分 無料
得票数を最大剰余方式で整数の議席に換えます。416,000票、338,000票、246,000票で10議席をヘア式の基数で配ると、4、3、3議席になります。基数はヘア式とドループ式から選べ、各党の剰余も表示されます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 政党ごとの得票数
- 416,000, 338,000, 246,000
- 配分する議席数
- 10
- 政党名(任意)
- A, B, C
- 基数の方式
- ヘア基数(総得票数 ÷ 議席数)
- 基数の方式
- ヘア
- 選挙基数
- 100,000
最大剰余方式(Hamilton)で、Hare または Droop の quota を用いて議席を配分します。無料で決定的、ブラウザー内でプライベートに動作します。アカウントは不要です。 アカウントは不要です。
最大剰余方式で議席が決まる仕組み
比例代表制では議席を整数で配る必要がありますが、得票数がちょうど割り切れることはほとんどありません。最大剰余方式(ハミルトン方式)は、これを2段階で解決します。まず1議席に相当する票数である基数を決め、各党に基数をいくつ満たしたかに応じて議席を配ります。端数は必ず切り捨てます。次に、まだ空いている議席を剰余の大きい党から順に1つずつ配ります。例では、416,000票、338,000票、246,000票で10議席を分けます。ヘア式の基数100,000票で最初に4、3、2議席が決まり、1議席が残ります。剰余は0.16、0.38、0.46なので、最後の議席は3番目の党に行き、最終的な配分は4、3、3になります。
配分を確かめるときによくある間違い
間違いの多くは最初の段階で起こります。切り捨てではなく四捨五入をすると方式が崩れます。この段階で配れるのは、満たした基数の分だけだからです。また、残りの議席を剰余の大きい党ではなく得票の多い党に配ると、例の3番目の党のように結果が変わってしまいます。基数の種類も重要で、比べる前に、決まりがヘア式とドループ式のどちらを求めているか確認してください。選挙制度の宿題や試験問題で、自分の答えと比べる安定した解答が欲しいときに役立ちます。
活用例
宿題と試験
定番の数量問題を、安定した再現可能な答えで手早く確認できます。
自動化
表計算ソフトや CAS をインストールせずに、同じ純粋関数をスクリプトから呼び出せます。
よくある質問
無料ですか?
はい。 tier A はアカウントなしで、すべてブラウザー内で動作します。
ネットワークにアクセスしますか?
いいえ。 parse エンジンはすべてをデバイス上に保持します。
この機能は誰が作成していますか?
ForHosting KIT ワークショップの samurai です。
最大剰余方式ではどのように議席を配りますか?
まず各党に、得票数に含まれる基数の数だけ議席を配り、端数は切り捨てます。残った議席は、剰余の大きい党から順に1つずつ配り、すべての議席が埋まるまで続けます。
基数の数が少ない党が最後の議席を取るのはなぜですか?
残りの議席は得票の多さではなく剰余の大きさで決まるためです。例では3番目の党の基数は2つだけですが、剰余0.46が最も大きいので10番目の議席を得て、合計3議席になります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/largest-remainder \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"votes":[416000,338000,246000],"seats":10}'const res = await fetch("https://api.kit.forhosting.com/math/largest-remainder", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"votes": [
416000,
338000,
246000
],
"seats": 10
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/largest-remainder",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"votes": [
416000,
338000,
246000
],
"seats": 10
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/largest-remainder", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"votes":[416000,338000,246000],"seats":10}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"votes":[416000,338000,246000],"seats":10}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/largest-remainder", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"votes": [
416000,
338000,
246000
],
"seats": 10
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.largest_remainder",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
仕組み
各政党は floor(votes/quota) 議席を得て、残りの議席は端数の余りが大きい順に配分されます。実装は完全に決定的で、API 経路と同じ純粋関数を用いてブラウザー上で無料に動作します。あらゆる算術処理の前に入力を検証するため、誤った型や範囲外の値は、静かな NaN の結果ではなく明確な invalid_input エラーになります。実装は完全に決定的で、API 経路と同じ純粋関数を用いてブラウザー上で無料に動作します。あらゆる算術処理の前に入力を検証するため、誤った型や範囲外の値は、静かな NaN の結果ではなく明確な invalid_input エラーになります。実装は完全に決定的で、API 経路と同じ純粋関数を用いてブラウザー上で無料に動作します。あらゆる算術処理の前に入力を検証するため、誤った型や範囲外の値は、静かな NaN の結果ではなく明確な invalid_input エラーになります。
入力と出力
エラーメッセージは、harness 向けに安定した英語の一致部分文字列を使用します。最大剰余方式(Hamilton)で、Hare または Droop の quota を用いて議席を配分します。入力スキーマに記載されたフィールドを指定します。必須フィールドは存在し、型が正しくなければなりません。任意フィールドは文書化された既定値を使用します。成功時のペイロードには、出力スキーマで名前が付けられた主要な結果フィールドが常に含まれるため、クライアントは推測せずに UI メトリクスをバインドできます。実装は完全に決定的で、API 経路と同じ純粋関数を用いてブラウザー上で無料に動作します。あらゆる算術処理の前に入力を検証するため、誤った型や範囲外の値は、静かな NaN の結果ではなく明確な invalid_input エラーになります。実装は完全に決定的で、API 経路と同じ純粋関数を用いてブラウザー上で無料に動作します。あらゆる算術処理の前に入力を検証するため、誤った型や範囲外の値は、静かな NaN の結果ではなく明確な invalid_input エラーになります。
エッジケースと制限
総得票数がゼロの場合や、無効な quota 名を拒否します。空または矛盾する範囲は早期に拒否されます。IEEE-754 をオーバーフローする極端に大きな中間値は、null フィールドではなく out-of-range エラーになります。実装は完全に決定的で、API 経路と同じ純粋関数を用いてブラウザー上で無料に動作します。あらゆる算術処理の前に入力を検証するため、誤った型や範囲外の値は、静かな NaN の結果ではなく明確な invalid_input エラーになります。実装は完全に決定的で、API 経路と同じ純粋関数を用いてブラウザー上で無料に動作します。あらゆる算術処理の前に入力を検証するため、誤った型や範囲外の値は、静かな NaN の結果ではなく明確な invalid_input エラーになります。
連携の活用例
授業のデモ
無料の widget と API に一致する golden フィクスチャで、解法例を示せます。
技術的な質問
入力が無効な場合はどうなりますか?
明確な英語のメッセージとともに invalid_input が返されます。
結果は安定していますか?
はい。決定的な計算と golden の例が契約を固定します。