LoginSignup
1
1

More than 1 year has passed since last update.

電脳向量表記

Last updated at Posted at 2022-08-02

BASIC言語では以下のように教わる

行番号を 1, 2, 3 と振り番すると、あとで 23 の間に1行はさみたいときに
挟めなくて困るから、行番号は 10, 20, 30 と 10 ずつ飛ばして振りなさい

なるほど

あとで 2030 の間に行を書きたくなったときに 25 を挟める! 

……と思ったが、じゃあ 2526 の間に挟みたいときはどうするのか!

────という長年の疑問から
後からいくらでも挟めるような振り番が欲しかったので 仕様を発案した。
数値型ではなく 文字列型の辞書順 を利用する

一度に説明するのは難しいので、要点を分けて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版 - この記事

おわり

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1