500バイト以内で世界地図を描けるか?驚きのミニマリズムに挑戦しよう
Can you build a recognizable World Map in under 500 bytes?
Can you build a recognizable World Map in under 500 bytes?
500バイトという極限のコードサイズ制限の中で、誰が見てもそれと分かる「世界地図」をプログラムで描画することは可能でしょうか?この挑戦的なテーマについて、皆さんのクリエイティブなアプローチや実装のアイデアを募集します。
世界地図の描画とマイクロ最適化を試しているところ。
なぜウガンダ付近ではなく、コンゴやガボンに近いアフリカに湖があるの?あと、これってPNGでできるかな?連続する行のほとんどは非常によく似ているから、代数的なパスを通せばかなり有効だと思うんだけど。
特定のチューリング完全な命令セットをターゲットにした、汎用的な圧縮を行うための有名なアルゴリズムって何かあるかな?固定された汎用デコーダとそれに関連する圧縮データに頼るのではなく。LLMに聞かずにここで聞いているのは、昔は人間がそうやっていて、それが心地よかったからさ。
おそらく、世界地図をかなり正確に描画するパラメータ関数(フーリエ級数など)を事前に計算しておけば、数学に強いプログラミング環境(RやJuliaなど)を使って500バイトに収められるんじゃないかな?Fableを使ってどのくらいできるか試してみるつもり。
地図には「陸」と「水」の2つの状態しかないんだから、バイト単位ではなくビット単位で同じ情報をより効率的に表現する方法があるんじゃないかと思ってる。
fetch()とdata: URIでこんなことができるなんて知らなかった:
fetch('data:;base64,1ZpLsgIxCEXnrM...==').then(
r => r.body.pipeThrough(new DecompressionStream('deflate-raw'))
).then(
s => new Response(s).text()
).then(
t => b.innerHTML = '<pre style=font-size:.65vw>' + t
)
Claudeにやらせれば済むようなことを、わざわざ自分でやる意味って何なの?
「SVGやCanvasは無駄だ」という考えからタイルベースのアプローチに移行するのは大きな飛躍だね。AIなら、ポリライン座標のデルタエンコーディングや、デルタを2~4ビットの小さな整数に離散化することを提案してくるんじゃないかな?XとYのデルタベクトルを交互に配置せず別々に保存すれば、圧縮率をさらに高められるはず。Claudeに何を依頼したんだろう?記事にはその辺りの詳細があまり書かれていないね。
32x32の4bpp、16色アイコンなら512バイトだね。あの頃はアイコンに世界地図だと認識できるレベルの絵を使っているプログラムが確実にあったから、答えはイエスだよ。
君のが45行のアスタリスクでできているのが面白いね。
投影とラスタライズのパイプラインを作って、多様な投影パラメータ下で簡略化された世界地図の境界線をサンプリングすれば、いろんなビットマップが得られるはず。その過程で失われた詳細が、自分たちが知っている世界とは別物になってしまうかどうかは、受け手次第ってことだね。
以下のサイトは、詳細な地図ファイルを実用的な目的で簡略化してくれるものだよ: