ランレングス符号化・復号ツール
「aaabbcccc」は「a3b2c4」に符号化され、「a3b2c4」を復号すると一文字も違わず「aaabbcccc」に戻ります。数字やバックスラッシュには前に印を付けて区別するので、結果を迷わず読み戻せます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- aaabbcccc
- 計算モード
- Encode
- 結果
- a3b2c4
ランレングス符号化は、同じ文字が連続する部分を、その文字と繰り返し回数の組み合わせに変換する方式です。このツールでは双方向の処理が可能です。通常の文章には符号化を、すでに符号化された値には復号をお選びください。Unicode文字の順序を正確に保ち、数字とバックスラッシュには簡潔なエスケープ規則を適用するため、曖昧さなく元の内容へ戻せます。通信、乱数、保存、言語モデルによる解釈は使用せず、同じ入力から常に同じ結果を生成します。
連続する並びを順序どおりに符号化します
符号化モードを選び、元の内容をテキスト欄へ入力してください。符号化処理はUnicode文字を左から右へ読み、隣り合う同一文字だけをまとめ、各グループを文字と10進数の回数で表します。たとえば同じ文字が3個続く部分は、その文字と数字の3になります。
同じ文字でも間に別の文字があれば別々の並びです。この方式が全体の出現頻度ではなく、局所的な連続を表すためです。空の入力からは空の結果が得られ、1回だけ現れる文字にも回数1が付きます。
回数自体にも数字を使うため、文字としての数字とバックスラッシュは特別に扱います。これらの文字にはバックスラッシュを前置してから回数を追加し、どこまでが文字でどこからが回数かを明確にします。
厳密な形式検証を行って復号します
テキストがすでにランレングス形式の場合は、復号モードをお選びください。各要素は、1文字の表現と、それに続く正の10進整数で構成されなければなりません。数字以外の通常文字に接頭辞は不要です。
文字としての数字またはバックスラッシュにはバックスラッシュを前置し、後続する回数との区別を明確にします。回数に0は使えず、0から始めることも、JavaScriptで安全に扱える整数精度を超えることもできません。要素の先頭にある未エスケープの数字、末尾だけのバックスラッシュ、未対応のエスケープ、回数がない文字も拒否されます。
復号後の出力はUnicode文字100万個、入力は10万個までに制限され、短い入力に極端に大きな回数を指定してメモリーを過剰消費することを防ぎます。
連続した繰り返しに適した場面で活用できます
ランレングス符号化は可逆的な表現であり、あらゆるデータを小さくする万能な圧縮方式ではありません。単純なマスク、繰り返す状態記号、グリッドの行、テストパターン、圧縮の入門課題など、長く途切れない並びを含むデータで特に有効です。文字が交互に現れる文章や、ほとんどの文字が一度しか現れない文章では、各並びに回数が付くため元より長くなることがあります。
このツールはその性質を隠さず、別の圧縮方式を自動選択することもありません。実運用で値を保存または送信する際は、このエスケープ規則も合わせて記録してください。他の実装では区切り記号、括弧、文字より前の回数を採用する場合があるためです。
テストデータを符号化し、その結果を復号して元の値と比較する検証にもご利用いただけます。Unicodeはコードポイント単位で処理され、一般的な絵文字も1文字として扱われます。
活用例
基本的な圧縮アルゴリズムを説明します
隣接する並びが文字と回数の要素へ変わる様子を示し、復号によって元へ戻せることをご確認いただけます。
繰り返しの多い小さなテストデータを作ります
マスク、グリッド行、状態記号、合成データに含まれる長い並びを、短く決定的な文字列で表現できます。
符号化された入力を検証します
不正な回数やエスケープを明示するエラーにより、形式の崩れたRLE文字列を処理工程へ入る前に拒否できます。
よくある質問
数字はどのように符号化されますか?
文字としての数字にはバックスラッシュを前置し、その後ろに回数を付けます。これにより数字を並びの長さと混同しません。
絵文字などのUnicode文字にも対応していますか?
はい。 Unicodeコードポイントを順に処理するため、絵文字などの一般的な補助文字も個別の1文字として数えます。
0から始まる回数が拒否されるのはなぜですか?
標準形式では先頭に0のない正の整数を使用します。別表記を拒否することで値を予測可能にし、入力ミスを検出できます。
RLEを使うと文章は必ず短くなりますか?
いいえ。 長い連続には効果的ですが、短い並びや交互の文字では各要素に回数が付くため、元より長くなる場合があります。
離れた場所にある同じ文字もまとめられますか?
まとめられません。連続して並んだ同じ文字だけが1つのまとまりになります。「abab」はすべて別のまとまりとなり、結果は「a1b1a1b1」で元より長くなります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/text/run-length-encode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"aaabbcccc"}'const res = await fetch("https://api.kit.forhosting.com/text/run-length-encode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "aaabbcccc"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/run-length-encode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "aaabbcccc"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/run-length-encode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"aaabbcccc"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"aaabbcccc"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/run-length-encode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "aaabbcccc"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.run_length_encode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_tokens | 20000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
連続する並びを順序どおりに符号化します
応答には選択したモードと結果が含まれ、同じ入力には常に同一のJSON値が返ります。
厳密な形式検証を行って復号します
この厳格な規則により、形式が不正な場合は、もっともらしい誤った値や途中結果ではなくinvalid_inputエラーを返します。
連続した繰り返しに適した場面で活用できます
APIの料金は1件あたり$0.002です。
技術的な質問
APIリクエストの料金はいくらですか?
APIで処理する1件あたりの料金は$0.002です。ブラウザーでは同じ決定的な変換をローカルで実行できます。