チェスの持ち時間表記を解析して最長対局時間を計算
90+30のような持ち時間は、各プレイヤーに最初に与えられる分数と、指すたびに追加される秒数を短く表したものです。この計算機は両方の値を分け、指定した完全な手数について、白黒双方が利用できる時計上の最長時間を求めます。大会のラウンド計画、方式の比較、要項の作成、またはペアリングソフトや公開日程へ入力する前の表記確認にご利用いただけます。
無料で実行
基本時間と加算時間の表記を正しく読み取ります
90+30は、各プレイヤーが90分で開始し、1手を指し終えるたびに30秒を受け取ることを意味します。本機能では、プラス記号の前を整数の分、後ろを整数の秒として扱います。空白、単語、小数、追加ステージを含めずに入力してください。曖昧な入力を推測せず、明確な1つの形式だけを受け付ける設計です。そのため、5+3、15+10、90+30は一意に解釈できますが、「rapid 15」のような名称や複数段階の時間設定には、文字列に含まれない別の規則が必要です。結果には元の表記に加えてbase_minutesとincrement_secondsが個別に示されるため、検証、保存、後続の確定的な計算に利用できます。形式が不正な場合は、もっともらしい誤った推測を返さず、入力エラーとして明確に通知します。
最長時間の計算方法を確認します
見積もりでは白と黒の両方の時計を考慮します。まず、両者が同じ基本時間を受け取るため、開始時の分数を2倍します。次に、完全な1手には白と黒の着手が1回ずつ含まれるため、加算秒を指定手数と2の両方に掛けます。40手の90+30なら、2人分の基本時間と最大80回分の加算が含まれます。結果は正確な後処理に使える秒数と、読みやすい分数で返されます。これは時計から割り当てられる理論上の上限であり、実際に盤の前で過ごす時間の予測ではありません。早く終局する場合、持ち時間を使い切らずに指す場合、運営上の中断でイベントが延びる場合があります。また、数えた各着手に所定の加算が付く前提であり、ディレイ方式、罰則、時間切れ、特定手数後から始まる加算は扱いません。
計画と入力検証に結果を活用します
大会運営者は、最長値をラウンド間隔の慎重な基準として利用できます。ただし、駒の並べ直し、次の組み合わせの公開、選手の移動、審判判断、休憩には別途余裕を加えてください。開発者は入力時に表記を解析して2つの数値を保存でき、アプリケーションの各所で同じ文字列を繰り返し分割せずに済みます。公表された手数と日程が整合するかの確認にも便利です。move_countは半手ではなく、各プレイヤーが指す完全な手数です。40なら白40手、黒40手までを想定します。値は公開された範囲内の整数で、プラス記号は1個だけ必要です。基本時間か加算時間の一方が正なら、他方は0でもよいため、0+1と10+0は有効です。0+0は対局可能な時間を与えないため無効です。
活用例
大会ラウンドの間隔を計画します
両者の時計で使える最長時間を求め、運営に必要な余裕を追加して現実的な日程を作成します。
ペアリングソフトの入力を検証します
不正な表記を保存したり大会ソフトへ渡したりする前に拒否し、解析済みの値だけを利用します。
異なる対局方式を比較します
同じ手数で複数の持ち時間を計算し、最大割当時間を共通の条件で比較します。
よくある質問
チェスの90+30は何を意味しますか?
各プレイヤーが90分で開始し、1手を指し終えるたびに30秒が追加されます。
move_countは半手と完全な手のどちらですか?
各プレイヤーの完全な手数です。40なら白40手と黒40手、最大80回の加算を想定します。
結果は実際のラウンド時間の予測ですか?
いいえ。両方の時計に割り当てられる上限です。運営上の余裕や時計外の中断は別に見積もります。
基本時間または加算時間を0にできますか?
もう一方が正なら可能です。0+1と10+0は有効ですが、0+0は無効です。
複数段階の時間設定に対応していますか?
いいえ。基本時間と加算時間からなる1段階だけを解析します。特定手数後の時間追加には別の形式が必要です。
APIリクエストの料金はいくらですか?
APIリクエスト1回の料金は$0.002です。提供されている場合は、同じ確定的計算をブラウザでも実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/misc2/chess-clock-time-control \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"time_control":"90+30","move_count":40}'const res = await fetch("https://api.kit.forhosting.com/misc2/chess-clock-time-control", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"time_control": "90+30",
"move_count": 40
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/misc2/chess-clock-time-control",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"time_control": "90+30",
"move_count": 40
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/misc2/chess-clock-time-control", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"time_control":"90+30","move_count":40}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"time_control":"90+30","move_count":40}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/misc2/chess-clock-time-control", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"time_control": "90+30",
"move_count": 40
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "misc2.chess_clock_time_control",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |