任意の数をn進数で表記したり、n進数表記の数を10進数の数に変換したりしたい。
具体的には0から9とaからzの36文字を36進数と考えると、
zz <=> 1295
ということです。
36bzz 1295 36b1000 46656 x: 36bthisisapen 2994670252589855
これを逆に変換する関数を作ってみました。
asc=:'0123456789abcdefghijklmnopqrstuvwxyz' norm=: ]`($:@( (0:,~<.@:%&36)+(0:,36&| ) ) )@.(36&( +./ @:<:)) (norm 1295) { asc zz (norm 46656) { asc 1000 (norm 2994670252589855) { asc thisisapf0
最後の数の最後の方がおかしいのは有効桁数をオーバーしているのかな?
いずれにせよ、どうやらできている風ですね。
36進数で素数リストを作ってみよう。
(,. ; (asc {~ norm)"0) p:i.20 +--+--+ | 2|2 | | 3|3 | | 5|5 | | 7|7 | |11|b | |13|d | |17|h | |19|j | |23|n | |29|t | |31|v | |37|11| |41|15| |43|17| |47|1b| |53|1h| |59|1n| |61|1p| |67|1v| |71|1z| +--+--+
あまり意味のある文字列になりませんでした。
以上