Prompt
Unicodeの奔流を食らえ!
[...Array.from({length:10000},()=>String.fromCodePoint(Math.floor(Math.random() * 65536)))].join("")
[...Array.from({length:65535},(_,n)=>String.fromCodePoint(n))].join("")
うわわっ、画面がカオスな記号で埋め尽くされる予感がするよ!これはまさに 「Unicode のビッグバン」 だね。
情報工学を学ぶ君らしい、非常にエキサイティングなワンライナーだ!この 2 つのコードが何を引き起こそうとしているのか、そしてその背後にある 「文字エンコーディングの深淵」 を少しだけ解剖してみよう。
1. 1行目:ランダムな混沌 (Random Chaos)
JavaScript
[...Array.from({length:10000},()=>String.fromCodePoint(Math.floor(Math.random() * 65536)))].join("")
-
挙動: 「基本多言語面 (BMP: Basic Multilingual Plane)」 の範囲内から、ランダムに 10,000 文字を生成して連結しているね。
-
中身: 漢字、ひらがな、アラビア文字、キリル文字、そして大量の 「制御文字」 や 「未定義領域」 が混ざった、デバッグ泣かせの文字列が出来上がる。
2. 2行目:全文字のパレード (The Full Parade)
JavaScript
[...Array.from({length:65535},(_,n)=>String.fromCodePoint(n))].join("")
-
挙動:
U+0000からU+FFFFまでの全文字を順番に並べているね。 -
見どころ: * 最初の 128 文字はおなじみの ASCII。
- その後はサロゲートペアの片割れや、特殊な合字の構成要素など、単体では表示できない文字も含まれる。
-
リスク: これをターミナルやブラウザに表示させると、フォントのレンダリングエンジンが必死にフォールバック(代わりのフォント探し)を始めて、CPU 使用率が跳ね上がる 可能性があるよ。まさに「Unicode 爆弾」だ!
3. 見落とされがちな視点:65,536 の壁
JavaScript の文字列は内部的に UTF-16 を使っているよね。
-
BMP (Basic Multilingual Plane): 文字までの範囲。
-
サロゲートペア: もし
Math.random() * 1114112(Unicode の最大値)にしてしまうと、1 文字が 2 つのコードユニットとして扱われる「サロゲートペア」の領域に突入する。 -
君のコードはちょうど を狙っているから、基本的には 「1 文字 = 1 つの 16bit ユニット」 で完結する範囲を網羅していることになる。非常に理にかなった攻撃(?)だね!
豆知識:豆腐 (Tofu)
表示できない文字が □(四角形)で表示されることを、Google は 「豆腐」 と呼んでいるんだ。
これらすべての Unicode を表示するために Google が開発したフォントが 「Noto (No Tofu)」。君の生成した 65,535 文字をすべて豆腐にせず表示するには、最強の Noto フォント群が必要になるよ。
次のステップ
こんなカオスな文字列を生成した後は、「正規表現を使って特定の言語(例えば漢字だけ、あるいは絵文字だけ)を抽出するフィルタリング」 を試してみる?それとも、「JavaScript の length プロパティが、サロゲートペアの文字で『2』とカウントしてしまう罠(サロゲートペア問題)」 について深掘りしてみる?
Would you like me to modify your script to include the “Astral Planes” (emojis and rare characters beyond 65535) safely?
$= [...Array.from({length:10000},()=>String.fromCodePoint(Math.floor(Math.random() * 65536)))].join("")
$= [...Array.from({length:65535},(_,n)=>String.fromCodePoint(n))].join("")