ダーツのチェックアウトを3投以内で計算
このダーツチェックアウト計算機は、残り点数を標準的な501ゲームで成立する上がり方に変換します。2から170までの整数を入力すると、最後の1投が必ずダブルまたはダブルブルになる、最大3投の決定的な組み合わせを返します。一般的なボード表記に加え、各投の狙いと得点も詳しく確認できます。3投で合法的に上がれない点数には、不可能な組み合わせを示さず、理由の分かるエラーを返します。
無料で実行
スロー前の残り点数を入力します
前回のスローを終え、次の3投を始める前にスコアボードへ表示されている残り点数を使用してください。入力できるのは2から170までの整数です。170は標準ルールで可能な最大の3ダーツチェックアウトです。計算機は、最後が有効なダブルになる1投、2投、または3投のルートを検索します。たとえば残り40ならD20の1投で終了できますが、より大きな点数では最後のダブルより前にトリプルが必要になる場合があります。結果は一般的な略記を使います。Sはシングル、Dはダブル、Tはトリプル、SBは25点のシングルブル、DBは50点のダブルブルです。各ダーツの詳細にはセグメント、倍率、得点も含まれるため、略記を知らない方が使う画面にも適しています。最初の501点やレッグですでに獲得した合計ではなく、現在の残り点数だけを入力してください。
有効なチェックアウトの条件を確認します
標準的な501ではダブルアウトルールを採用し、残り点数をちょうど0にする最後のダーツはダブルでなければなりません。ダブルブルはブルのダブルリングに相当し50点なので、最後の1投として有効です。それ以前にはシングル、トリプル、別のダブルを含められますが、表示される最後のダーツは必ずダブルです。検索対象は実際のボードにある1から20のシングル、ダブル、トリプルと、シングルブル、ダブルブルだけです。T21のような存在しないセグメントを作ったり、内側のシングルを最後のダブルとして扱ったりしません。アルゴリズムは短いルートから調べるため、1投で上がれる場合は1投を返し、3投より2投を優先します。同じ投数では、高いトリプル、ブル、ダブルを優先する固定順序によって毎回同じ結果を返します。提案は計算上有効ですが、得意なダブルや試合戦術に応じて別の有効なルートを選ぶこともできます。
上がれない数字を判別して結果を活用します
入力範囲内のすべての点数を3投で上がれるわけではありません。169、168、166、165、163、162、159などの有名なボギーナンバーは、合法的な3投で最後をダブルにして作れません。正のダブルに1点はないため、1もチェックアウトできない点数です。有効なルートがない場合、この機能は対象点数を示し、3投以内のダブルアウトという制約を説明する入力エラーを返します。レッグを終了しないセットアップショットを黙って提案すると別の質問への回答になるため、明確なエラーの方が適切です。成功した結果は、練習課題、スコア表示、コーチング用シート、自動実況などに利用できます。組み合わせの配列は簡潔な表示に、各ダーツの配列は詳しいレイアウトや検証に便利です。計算は純粋かつローカルで、選手プロフィール、ネットワーク、乱数、ライブデータを使いません。同じ入力からは常に同じチェックアウトが得られます。
活用例
リーグ戦の上がり方を確認
次の3投を始める前に、スコア表示の残り点数を有効なチェックアウトへ変換します。
チェックアウト練習を作成
ダブルアウトの反復練習に使える固定の目標とボード表記を生成します。
スコアラーにヒントを追加
採点アプリに短い組み合わせ、または各ダーツの詳しい内訳を表示します。
よくある質問
1回の料金はいくらですか?
APIは1回$0.002です。このページのブラウザーでは、同じ決定的な計算を無料で実行できます。
最後のダーツは必ずダブルですか?
はい。成功する結果はすべてD1からD20、またはダブルブルを表すDBで終わります。
170未満でもエラーになるのはなぜですか?
3投以内の合法的なダーツで最後をダブルにして作れないボギーナンバーがあるためです。
T20、D20、SB、DBは何を表しますか?
トリプル20、ダブル20、25点のシングルブル、50点のダブルブルを表します。
プロ選手が選ぶルートと常に同じですか?
必ずしも同じではありません。有効で短く安定したルートを返しますが、得意なダブルや戦術によって別のルートが適する場合があります。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/game/dart-score-checkout \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"score":170}'const res = await fetch("https://api.kit.forhosting.com/game/dart-score-checkout", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"score": 170
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/game/dart-score-checkout",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"score": 170
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/game/dart-score-checkout", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"score":170}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"score":170}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/game/dart-score-checkout", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"score": 170
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "game.dart_score_checkout",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |