電脳向量表記 (Cyber Vector Notation)

👇 「電脳向量表記」を発案したので Qiita に書こうとしたら「投稿頻度が高すぎます」とかいう わたしの投稿頻度とウマの合わない注意が出てきて 新規記事を投稿できなくなったので Crieit に書く

202208__Others__01_0038_qiita.png

一度に説明するのは難しいので、要点を分けて1つずつ説明する

O_9o0 序文

BASICの行番号で 1, 2, 3 と振り番すると、あとで 23 の間に1行はさみたいときに
挟めなくて困るから、行番号は 10, 20, 30 と振りなさい、と教えられる。
あとで 2030 の間に 25 を挟めるから なるほど! と思ったが、
じゃあ 2526 の間に挟みたいときはどうするのか! という長年の疑問から
後からいくらでも挟めるような振り番が欲しかったので 仕様を発案した。
数値型ではなく 文字列型の辞書順 を利用する

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

これが 電脳向量表記 の代表的なケースだ

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桁ずつ増えていく

OAA100o0 関連する記事

OAA100o1o0 Pythonコード

Example: 📖 cyber-vector-notation

OAA100o2o0 辞書順記数法

📖 辞書順記数法 Crieit版 - ブログ
📖 辞書順記数法 Qiita版 - 固い記事

OAA100o3o0 数珠玉表記

📖 数珠玉表記 Crieit版 - ブログ
📖 数珠玉表記 - 固い記事

OAA100o4o0 電脳向量表記

👇 辞書順記数法と 数珠玉記数法を組み合わせたもの

📖 電脳向量表記 Crieit版 ブログ - ブログ
📖 電脳向量表記 Crieit版 固い記事 - この記事

おわり

ツイッターでシェア
みんなに共有、忘れないようにメモ

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント