BASIC言語では以下のように教わる
行番号を 1
, 2
, 3
と振り番すると、あとで 2
と 3
の間に1行はさみたいときに
挟めなくて困るから、行番号は 10
, 20
, 30
と 10 ずつ飛ばして振りなさい
なるほど
あとで 20
と 30
の間に行を書きたくなったときに 25
を挟める!
……と思ったが、じゃあ 25
と 26
の間に挟みたいときはどうするのか!
────という長年の疑問から
後からいくらでも挟めるような振り番が欲しかったので 仕様を発案した。
数値型ではなく 文字列型の辞書順 を利用する
一度に説明するのは難しいので、要点を分けて1つずつ説明する
O1o0 格納構造
O1o1o0 もととなる数
[1 2 3 4]
👆 もととなる数は、要素を整数とするベクトルを想定している
O1o2o0 電脳向量
[1 2 3 4 0]
👆 要素を整数とするベクトルで、右端の要素が 0 のものを 電脳向量 (Cyber Vector) と呼ぶことにする
O1o3o0 右端に 0 の要素を追加する操作
[1 2 3 4]
│
│ trail_zero
↓
[1 2 3 4 0]
👆 右端の要素が 0 でない場合、 1列増やして 0 を入れる。
これを trail_zeroルール と呼ぶことにする。 With trailing zero
の略
[1 2 3 4 0]
│
│ trail_zero
↓
[1 2 3 4 0 0]
👆 この操作をもう一度行うと、さらに 1列増やして 0 を入れる
O2o0 電脳向量の表記の手順
O2o1o0 Ignore case
- 大文字と小文字は区別しない
O2o2o0 零,または1桁の正の整数を要素にするベクトルの例
👇 以下のようなベクトルがあるとする
[1 2 3 4 0]
👇 角括弧を外す
1 2 3 4 0
👇 区切りとして o
を使う。間隔は空けずに詰める
1o2o3o4o0
👇 左端に O
を付ける。間隔は空けずに詰める
O1o2o3o4o0
これが 電脳向量表記 (Cyber Vector Notation)の代表的なケースだ
O2o3o0 2桁以上の正の整数を要素にするベクトルの例
👇 以下のようなベクトルがあるとする
[21 321 4321 0]
👇 角括弧を外す
21 321 4321 0
👇 区切りとして o
を使う。間隔は空けずに詰める
21o321o4321o0
👇 桁数×2-1
の横幅があると考える
21o 321o 4321o0
--- ----- -------
👇 前A
を詰める
A21oAA321oAAA4321o0
--- ----- -------
👇 左端に O
を付ける。間隔は空けずに詰める
OA21oAA321oAAA4321o0
これも 電脳向量表記 だ
O2o4o0 負の整数を要素にするベクトルの例
👇 以下のようなベクトルがあるとする
[-1 -21 -321 -4321 0]
👇 角括弧を外す
-1 -21 -321 -4321 0
👇 区切りとして o
を使う。間隔は空けずに詰める
-1o-21o-321o-4321o0
👇 負数の符号 -
を外すとともに、 残った桁数×2
の横幅があると考えて、 前_
を詰める
_1o__21o___321o____4321o0
👇 負数だったその残った数より1桁多い数の中で最小の数を 上に添える
10 100 1000 10000
_1o__21o___321o____4321o0
👇 引く
10 100 1000 10000
_1o__21o___321o____4321o0
-- --- ---- -----
_9o__79o___679o____5679o0
👇 その差の左端に O
を付ける。間隔は空けずに詰める
O_9o__79o___679o____5679o0
これも 電脳向量表記 だ
O2o5o0 電脳向量表記の結合
👇 以下の2つのベクトルを1つにまとめたいとき
[1 0] [2 0]
👇 まず それぞれを電脳向量表記にする
O1o0 O2o0
👇 g
でつなぐ。間隔は詰める。 g
の右隣の O
は除去する
O1o0g2o0
O3o0 テクニック
O3o1o0 兄弟の追加
「数と数の間隔がすぐ足りなり、ベクトルの要素を増やす」ことが頻発することがある。
このベクトルの要素数の増加速度を遅くするテクニックをパターン化しておく
👇 [2 0]
と [3 0]
の間に数を挿入するときのテクニック
[2 0]
[3 0]
👇 (例) [3 0]
の方に [0 -9]
増やす
[2 0]
👉 [3 -9 0]
[3 0]
👇 [3 -1 0]
と [3 0]
の間に数を挿入するときのテクニック
[3 -1 0]
[3 0]
👇 (例) [3 0]
の方に [0 0 -99]
増やす
[3 -1 0]
👉 [3 0 -99 0]
[3 0]
👇 [3 0 -99 0]
と [3 0]
の間に数を挿入するときのテクニック
[3 0 -99 0]
[3 0]
👇 (例) [3 0]
の方に [0 0 0 -999]
増やす
[3 0 -99 0]
👉 [3 0 0 -999 0]
[3 0]
以降、同様に1桁ずつ増えていく
O3o2o0 正規表現
([0-9AaGgOo_]+)
OAA100o0 関連する記事
OAA100o1o0 Pythonコード
Example: 📖 cyber-vector-notation
OAA100o2o0 辞書順記数法
📖 辞書順記数法 Crieit版 - ブログ
📖 辞書順記数法 Qiita版 - 固い記事
OAA100o3o0 数珠玉表記
📖 数珠玉表記 Crieit版 - ブログ
📖 数珠玉表記 - 固い記事
OAA100o4o0 電脳向量表記
👇 辞書順記数法と 数珠玉記数法を組み合わせたもの
📖 電脳向量表記 Crieit版 ブログ - ブログ
📖 電脳向量表記 Crieit版 固い記事 - この文章の元
📖 電脳向量表記 Qiita版
- この記事
おわり