IkumaScriptと37進数

ikuma, akuma, xkuma, ukuma…

JSやTSのサンプルコードで、よく自分の名前ikumaを一文字変えて使っているのだけれど、毎回入力するのも面倒なので、スニペット化しました。ikumaを複製するので、ECMAScriptを文字ってIkumaScriptです。

[...Array(26)].map((_, index) => `${(index + 10).toString(36)}kuma`)

// [ 'akuma', 'bkuma', 'ckuma', 'dkuma', 'ekuma', 'fkuma', 'gkuma', 'hkuma', 'ikuma', 'jkuma', 'kkuma', 'lkuma', 'mkuma', 'nkuma', 'okuma', 'pkuma', 'qkuma', 'rkuma', 'skuma', 'tkuma', 'ukuma', 'vkuma', 'wkuma', 'xkuma', 'ykuma', 'zkuma' ]

親の顔よりよくみた連番作成処理を行います。

[...Array(26)].map((_, index) => index)
// [ 0,  1,  2,  3,  4,  5,  6,  7, 8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ]

実際には+ 10しているので10 ~ 35までの値を含む配列が取得できます。

ここからN進数を利用してアルファベットに変換を行っていきます。文字としての数字は0から9までの10種類しかないので、36進数に変換すると、10 ~ 35がそれぞれa ~ zに相当することになります(36 - 10 = 26個のアルファベットが必要になる)

37進数にはどの記号が採用されるのか

ここでふと疑問に思うのが、37進数以降の場合、アルファベットで賄えない部分はどうなるのかということです。実際にやってみました。

 (36).toString(37)
// Uncaught RangeError: toString() radix argument must be between 2 and 36
    at Number.toString (<anonymous>)

Number.prototype.toString() - JavaScript | MDNにも記載がありましたが、37以上はエラーになるようですね。

Rubyでも試してみます。

36.to_s(37)
# => (irb):3:in `to_s': invalid radix 37 (ArgumentError)

Integer#inspect (Ruby 3.1 リファレンスマニュアル)

こちらもリファレンスに記載がありましたが、37以上を指定するとエラーになるようです。

おわりに

ikumaという名前が名付けられた経緯には色々な意味があるのですが、時代背景的に悪魔ちゃん命名騒動 - Wikipediaがあったこともあり、あえて一文字ずらして「ikuma」になったみたいな理由もあると以前母から聞きました。

1文字どころかたくさんずらして遊んでます。 — 息子より


Buy Me A Coffeeikuma-tにお恵みを!