def canonical_codes(lengths):
if type(lengths) is not dict or len(lengths) > 256:
raise ValueError("codes.input")
if any(type(s) is not str or not s or type(n) is not int or
not 1 <= n <= 16 for s,n in lengths.items()):
raise ValueError("codes.length")
result, code, previous = {}, 0, 0
for symbol, length in sorted(lengths.items(), key=lambda p:(p[1],p[0])):
code <<= length-previous
if code >= 1 << length:
raise ValueError("codes.oversubscribed")
result[symbol] = format(code, f"0{length}b")
code += 1
previous = length
return result| 適用前に確認 | 実際の動作を期待する結果と比較します。検証に失敗した場合は、次の変更を加える前に原因を調べてください。 |
|---|---|
| モデル | OpenAI互換またはAnthropicのエンドポイントを、ベースURLと必要なAPIキーで設定し、接続をテストします。ローカルのモデルサーバーは起動が必要です。リモートツールは別途データを送信する場合があります。 |
| プロジェクト | 空や不完全な表を試し、同じ長さは元のUnicode文字列順に並べ、正規化せず過剰割り当てや不正な長さを拒否してください。 |
def canonical_codes(lengths):
if type(lengths) is not dict or len(lengths) > 256:
raise ValueError("codes.input")
if any(type(s) is not str or not s or type(n) is not int or
not 1 <= n <= 16 for s,n in lengths.items()):
raise ValueError("codes.length")
result, code, previous = {}, 0, 0
for symbol, length in sorted(lengths.items(), key=lambda p:(p[1],p[0])):
code <<= length-previous
if code >= 1 << length:
raise ValueError("codes.oversubscribed")
result[symbol] = format(code, f"0{length}b")
code += 1
previous = length
return result符号表の変更に再現性を持たせる
同じ記述から2つの実装が異なる符号表を作る場合、別の出力例だけではデバッグに足りません。Codelithはその調査のためのWindows向けAIコーディング環境です。プロジェクトを開き、競合する結果を会話に提示して、変更を提案する前に差の原因を調べるよう接続モデルに依頼します。
適した作業の一つが、記号ごとの符号長からの正準接頭符号の割り当てです。同じ長さの順序規則と、元のUnicode文字列を変更せず残す必要があるかを説明します。読み取るべき形式を提案に反映できるよう、表の利用側も含めてください。この割り当て例はコードレビューを具体化するためのもので、環境に付属する符号化ツールではありません。
選択した順序を明示する限定的な提案を依頼します。空の表と不完全な表を、符号空間を超過する符号長とは別にレビューし、プロジェクトの環境で形式のテストを実行してください。正確なビット列と記号の対応を比較します。整然とした表でも利用側と食い違うことがあります。期待するシリアライズ結果をレビュー中に見えるようにします。
CodelithはOpenAI互換またはAnthropicのエンドポイントによるモデル接続に対応します。プロバイダーが提供していれば制限なしAIモデルを選択でき、必要なら認証情報を指定します。コンテキスト、ツール、制限は選択したサーバーとモデルが決めます。符号化の変更案がアプリの契約を満たすかは、テストデータとレビューで確かめます。
符号表の変更に関する質問
- 2つの表の違いを説明するには何が役立ちますか?
同じ記号と符号長の入力、両方の結果、文書化した順序規則を提示します。アプリが表を書き込む場所と読み込む場所を特定してください。形式の期待出力を推測せず、具体的な不一致を検討できます。
- ソート前にUnicode記号を正規化しますか?
形式が明示的にその変換を要求する場合だけです。例の作業は元の文字列を保持して並べます。依頼に規則を示し、異なる記号をコード案が黙って統合したり変更したりしないか検証してください。
- 不完全な表と符号空間を超過する表は同じエラーですか?
異なる状態であり、どちらを受理するかは形式が決めます。個別のテストデータと期待結果を含めてください。未使用の符号空間があるだけで表を不正とせず、区別を保つよう依頼します。
- 既存の読み取り処理との互換性をどう確認しますか?
代表的な表をプロジェクトの書き込み処理と読み取り処理に通し、形式が要求する正確な対応を比較します。順序を変える提案なら両方の経路をレビューしてください。ソースの編集が成功しただけでは既存の保存データとの互換性は証明できません。
Codelith · 更新日 2026-10-25