アルゴ式の問題を解く Go 文字種判定
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 文字種判定 | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var n int var s string fmt.Scan(&n, &s) for _, c := range s { if 48 <= c && c <= 57 { fmt.Println("digit") } else if 65 <= c && c <= 90 { fmt.Println("uppercase") } else if 97 <= c && c <= 122 { fmt.Println("lowercase") } else { fmt.Println(string(c)) } } } 文字コードごとにifを作っただけの単純な実装になります。 ということで今回はこれで👍
アルゴ式の問題を解く Go 大文字小文字判定(1)
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 大文字小文字判定(1) | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var c string fmt.Scan(&c) if int(c[0]) - 96 > 0 { fmt.Println("lowercase") } else { fmt.Println("uppercase") } } ちなみに、 c[0]をintでキャストしているのは、デフォルトだとc[0]はbyte型(正体は uint8)だからです。 uint8 は「0〜255 の数しか入れられない箱」だと思ってください。マイナスの数はそもそも表現できません。 例えば文字としてAが渡されたとき、「A」の文字コードは 65 なのでc[0]は65になります。 ただuint8はマイナスを表現できなので、以下のようになります。 65 − 96 → 0を通り越して255側に回り込む → 225 なので、今回の実装ではマイナスを扱えるようにintに変換してあげる必要があるのです。面白いですね。 ということで今回はこれで👍
アルゴ式の問題を解く Go 何番目のアルファベット?
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 何番目のアルファベット? | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var c string fmt.Scan(&c) fmt.Println(c[0] - 96) } 文字をintの文字コードにして、aが1になるように調整してあげれば完成です。 ということで今回はこれで👍
アルゴ式の問題を解く Go 次のアルファベット
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 次のアルファベット | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var c string fmt.Scan(&c) fmt.Println(string(c[0] + 1)) } stringは結局スライスなので、インデックス指定して取得すれば文字コードとして取得できます。それに1足してあげれば次の文字が得られます。 ということで今回はこれで👍
アルゴ式の問題を解く Go 文字コード
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 文字コード | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { for i := 97; i <= 122; i++ { fmt.Println(i, string(i)) } } 文字コードの変換はstringでキャストすれば簡単にできます。 ということで今回はこれで👍
アルゴ式の問題を解く Go 4 と 6 の Fizz Buzz
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 4 と 6 の Fizz Buzz | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var n int fmt.Scan(&n) for i := 1; i <= n; i++ { if i % 4 == 0 && i % 6 == 0 { fmt.Println("FizzBuzz") } else if i % 4 == 0 { fmt.Println("Fizz") } else if i % 6 == 0 { fmt.Println("Buzz") } else { fmt.Println(i) } } } 前回実装したFizzBuzzの問題の条件式を買えただけですね。 ということで今回はこれで👍
アルゴ式の問題を解く Go Fizz の個数
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 Fizz の個数 | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var n int fmt.Scan(&n) c := 0 for i := 1; i <= n; i++ { if i % 3 == 0 && i % 5 != 0 { c++ } } fmt.Println(c) } ということで今回はこれで👍
アルゴ式の問題を解く Go Fizz Buzz
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 Fizz Buzz | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var n int fmt.Scan(&n) for i := 1; i <= n; i++ { if i % 3 == 0 && i % 5 == 0 { fmt.Println("FizzBuzz") } else if i % 3 == 0 { fmt.Println("Fizz") } else if i % 5 == 0 { fmt.Println("Buzz") } else { fmt.Println(i) } } } まぁ一般的なFizzBuzz実装じゃないでしょうか。 ということで今回はこれで👍
AI時代に使える差分確認ツールdifitを触ってみた
こんにちは、ナナオです。 最近はClaude Codeにコードを書かせることが増えてきました。 便利なんですが、そうなると今度は「エージェントが書いた差分をどう確認するか」が地味に悩みどころになってきます。 ターミナルでgit diffを眺めるのもいいんですが、量が多いと結構つらい。かといってわざわざコミットしてPRを立ててGitHub上で見るのも大げさです。 そんなときにちょうどよさそうなdifitというツールを見つけたので、触ってみました。 ※この記事はopus4.8の力を借りて作成しました。 difitとは GitHub - yoshiko-pg/difit: A lightweight command-line tool that spins up a local web server to display Git commit diffs in a GitHub-like Files changed view · GitHub The local code review tool for the AI era! 「AI時代のローカルコードレビューツール」を名乗っているツールです。 やってくれることはシンプルで、ローカルでコマンドを叩くと、Gitの差分をGitHubの「Files changed」そっくりの画面でブラウザに表示してくれます。 git diffをターミナルで読むのではなく、あの見慣れたレビュー画面でサッと確認できる、というわけですね。 そしてこのツールの本領は、その先の「コメントをAIエージェントへのプロンプトとしてコピーできる」というところにあります。このあたりは後で紹介します。 インストールと基本的な使い方 Node.js製なので、インストールなしでnpxからいきなり試せます。 # インストール不要、最新コミットの差分をそのまま表示 npx difit 気に入ったらグローバルに入れておくと楽です。 npm install -g difit 使い方はGitのコマンドを知っていれば直感的です。引数に見たい対象を渡すだけ。 difit # HEAD(最新コミット)の差分 difit 6f4a9b7 # 特定のコミット difit feature main # feature と main を比較 特に便利なのが、コミット前の変更を確認できるキーワードたちです。 ...
headroomでトークンを削減した話
こんにちは、ナナオです。 突然ですが、AIコーディングエージェントのトークン消費って本当に気になりますよね。 普段は Claude CodeとOpenCode Goを併用しているんですが、両方とも長時間セッションを回しているとあっという間にトークン消費が伸びていきます。 「これ、無駄な部分削れないかな」と思って調べたら headroom を見つけたので、試しに入れてみました。 ※この記事の作成にはMiniMax-M3を大いに活用しています。 headroomとは GitHub - headroomlabs-ai/headroom: Compress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server. · GitHub Introduction | Headroom headroom は、AIエージェントが読み取るコンテキスト(ツール出力、ログ、RAG 結果、ファイル、会話履歴)を LLM に渡す前に圧縮するレイヤーです。 公式の説明では「the context compression layer for AI agents」と書いてあって、Python実装のコアに Rust 製トランスフォーマーを組み合わせた構成になっています。 2026年7月時点で57k starがついており、わりと有名なんじゃないかと思います。 インストールとプロキシ起動 Docker イメージをそのまま使います。 docker pull ghcr.io/chopratejas/headroom:latest docker run -d --name headroom -p 8787:8787 \ ghcr.io/chopratejas/headroom:latest これで 8787 番ポートにプロキシが立ちます。コンテナ内で headroom proxy が立ち上がっている状態です。 ...