sedで引き算 (超簡略版)

PsychoHazard
kuzu/NULL
Published in
2 min readJun 4, 2018

先にこんなものを書いていました:

今回は引き算です。コードは次のとおりで、名前は minus.sed とします。

# -*- coding:utf-8 -*-
p
s/1/I/g
s/2/II/g
s/3/III/g
s/4/IIII/g
s/5/IIIII/g
s/6/IIIIII/g
s/7/IIIIIII/g
s/8/IIIIIIII/g
s/9/IIIIIIIII/g
s/ +\- +/ /g
:loop
p
s/I I/ /
tloop
s/^ $/0/
s/^ /-/
s/^(.)/=\1/

食わせるデータはとりあえず次のような感じで。名前は minus.dat とします:

4 - 1
3 - 3
2 - 3

というわけで実行してみると、こういう結果になります:

$ sed -rf minus.sed minus.dat
4 - 1
IIII I
III
=III
3 - 3
III III
II II
I I

=0
2 - 3
II III
I II
I
=-I

ここで、 4 — 1 の結果は III となり、 3 — 3 の結果は 0 となり、 2 — 1 の結果は — I となっています。

3 — 3 の場合空行があるように見えますが、そこにはスペースがあります。上のコードの結果 3 — 3 のようなばあい、スペースの両側にはなにも残りません。そのことを利用して、その場合は o であると書き換えています。

2 — 3 の場合、 I の並びの前にスペースが残ります。それを利用して、そのスペースを に置き換えています。

追記 (重要) Apr 16, 2019:

このstoryはあくまでパズルです。

この辺りからチューリング・マシンに話を繋げていきたいとは考えていますが、構想の段階です。

--

--

PsychoHazard
kuzu/NULL

ショートショートのコレクションについて:ショートショートの作法を無視しています。あとシリーズものっぽいのは、すべて計画の上で書いています。ごめんなさい、「計画の上で」というのは嘘です。思いつきの順番です。