月: 2022年7月

2022/0714 人間は性善説だが、善がひとつとは限らない

自分から進んで悪をなそうという人はいないので性善説だけど、その人の信じている善が、他の人の善とか、社会一般の善と同じであるということはないので、その差が悪となるということ。

すなわち、

$$自分にとっての悪 = 距離(他人の善 – 自分の善)$$

という式となる。

ここで、他人の善 > 自分の善 だからといって、自分(の善)が他人(の善)に劣っているというわけではなく、あくまで座標の位置関係にすぎない。すなわち、価値相対主義を前提にしている。

またこれは善悪二元論ではなく、互いの善の遠い状態こそが悪であるという一元論でもある。

2022/0713 再帰をwhile()とスタックで表現する──二分木走査例

自作二分木で四苦八苦しております。

とりあえずStackOverflowExceptionが怖いので、while()とスタックで表現できないかとやってたら、再帰関数の呼び出し位置も記憶しておくことが重要と認識。

とりまこんな方法でやってみた。

タプル便利やなー。

        //行きがけ順
        public void TraversePreOrder(Action<Node> action)
        {
            var stack = new Stack<(Node, bool, bool)>(100); //スタック
            var node = Root;    //まずはじめは根から
            bool left = false;  //左子ノードを通過したか
            bool right = false; //右子ノードを通過したか

            /*
            //もし再帰で書いたらこうなるはず
            public void func(Node n){
                /*ノードの中身を見る*/ n.Action();
                /*左子ノードへ行く*/  if(n.Left != null) { func(n.Left); }
                /*右子ノードへ行く*/  if(n.Right != null) { func(n.Right); }
            };
            */

            //ブンブン回していく
            while (node != null)
            {
                //左子ノードも右子ノードも通過してない
                if(left == false && right == false)
                {
                    //ノードの中身を見る
                    action(node);
                }

                //左子ノードへまいります
                if (left == false && node.Left != null)
                {
                    stack.Push((node, true, false)); //左子ノード通過フラグを立てておく
                    node = node.Left;
                    left = false;  //ここらへんの初期化をわすれずに
                    right = false;
                    continue;      //ここでいったん抜ける
                }

                //右子ノードへまいります
                if (right == false && node.Right != null)
                {
                    stack.Push((node, true, true)); //どっちも通過フラグ
                    node = node.Right;
                    left = false;
                    right = false;
                    continue;
                }

                if (stack.Count > 0)
                {
                    (node, left, right) = stack.Pop(); //まだあんじゃん
                }
                else
                {
                    node = null; //もうないです
                }
            }
        }

        //通りがけ順
        public void TraverseInOrder(Action action)
        {
            var stack = new Stack<(Node, bool, bool)>(100);
            var node = Root;
            bool left = false;
            bool right = false;

            /*
            public void func(Node n){
                if(n.Left != null) { func(n.Left); }
                n.Action();
                if(n.Right != null) { func(n.Right); }
            };
            */

            while (node != null)
            {

                if (left == false && node.Left != null)
                {
                    stack.Push((node, true, false));
                    node = node.Left;
                    left = false;
                    right = false;
                    continue;
                }

                //行きがけ順とちがって判定用フラグが減ってるのに注意
                if (right == false)
                {
                    action(node);
                }

                if (right == false && node.Right != null)
                {
                    count++;
                    stack.Push((node, true, true));
                    node = node.Right;
                    left = false;
                    right = false;
                    continue;
                }

                if (stack.Count > 0)
                {
                    (node, left, right) = stack.Pop();
                }
                else
                {
                    node = null;
                }
            }
        }

        //帰りがけ順
        public void TraversePostOrder(Action action)
        {
            var stack = new Stack<(Node, bool, bool)>(100);
            var node = Root;
            bool left = false;
            bool right = false;

            /*
            public void func(Node n){
                if(n.Left != null) { func(n.Left); }
                if(n.Right != null) { func(n.Right); }
                n.Action();
            };
            */

            while (node != null)
            {

                if (left == false && node.Left != null)
                {
                    stack.Push((node, true, false));
                    node = node.Left;
                    left = false;
                    right = false;
                    continue;
                }

                if (right == false && node.Right != null)
                {
                    count++;
                    stack.Push((node, true, true));
                    node = node.Right;
                    left = false;
                    right = false;
                    continue;
                }

                if (true)
                {
                    action(node);
                }

                if (stack.Count > 0)
                {
                    (node, left, right) = stack.Pop();
                }
                else
                {
                    node = null;
                }
            }
        }

2022/0711 政治の世界の情報のベクトル

バグダッシュ
https://dic.pixiv.net/a/%E3%83%90%E3%82%B0%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5

「世の中に飛び交っている情報ってものには、必ずベクトルがかかっているんだ。つまり誘導しようとしていたり、願望が含まれていたり、その情報の発信者の利益をはかる方向性が付加されている。それを差し引いてみれば、より本当の事実関係に近いものが見えてくる」

これだよなぁ。

ほんと、SNS見ててもいろんなベクトルかかった情報ばっかでした。

それが政治の世界ってやつよね。

やんなっちゃう。

2022/0702 呪物巡りて

男は著書に記す。

「献本 吾倶羅出版編集部 御中 芝村一刀」

これで余の積年の無念がやっと報われる……。

著書を出版したのは婆白耶書房。吾倶羅出版のライバルだ。

男を拾ってくれた出版社への恩義は、男を見捨てた出版社への復讐に転化する。

男はやがて業界の表舞台から去り、その本は、巡りに巡って、とある新古書店に入った一般人の手中におさまることとなる。

「献本……? これは一体……」

その本の写真をなにげなく撮り、SNSにあげてみる。

すると、謎の捨てアカウントから、奇怪なリプライが飛んできた。

「一刻も早く焼きなされ。できれば専門の寺社に持ち込むのがよろしい。呪物を持ち続けてはならぬ」

物語が、いまいましくもはかない物語が、動きだす──。

Copyright © 2024 アウグストロン

Theme by Anders NorenUp ↑