2+2*2=::::::

Осталась неделя до отпуска. Чтоб ничего не сломать занимаюсь всякой фигнёй.
Помните детсадовскую задачку «Сколько будет два плюс два умножить на два?»
Решил это выяснить на sed:
$ sed -f ./1.sed
2+2*2
;2+;2*;2
::+::*::
::+::*:
::+::;::*
::+::::
::::::
6
Сам исходник
s/[0-9]/;&/gp
s/0//g; s/1/:/g; s/2/::/g; s/3/:::/g; s/4/::::/g; s/5/:::::/g; s/6/::::::/g; s/7/:::::::/g; s/8/::::::::/g; s/9/:::::::::/g

: ;; s/:;/;::::::::::/gp; t ;

s/;//gp

s/*:/*/gp

: *;
    s/\(:*\)\*:/\1;\1*/gp;
t *
    
s/*//g
s/;//gp

s/+//gp

: -; s/:-:/-/gp; t -

s/-$//gp
    
: ?
    s/::::::::::/;/gp
    s/;\([0-9]*\)$/;0\1/p
    s/:::::::::/9/; s/::::::::/8/; s/:::::::/7/; s/::::::/6/; s/:::::/5/; s/::::/4/; s/:::/3/; s/::/2/; s/:/1/
    s/;/:/gp
t ?

s/^$/0/


Меня хватило на реализацию операций ±*, до деления ход не дошёл.
Практической пользы не ищите — здесь её нет.

Комментарии (4)

  • 25 июля 2016 в 16:09 (комментарий был изменён)

    +3

    Мсье знает толк в sed’е
  • 25 июля 2016 в 16:48

    0

    Алгорифмы Маркова.
  • 25 июля 2016 в 16:57

    –1

    Практической пользы нет, объяснения принципа работы тоже нет. Вы случаем не перепутали хабр и gist?
    • 25 июля 2016 в 17:00

      +2

      Мне казалось, что принцип понятен из
      Заголовок спойлера
      $ sed -f ./1.sed
      2+2*2
      ;2+;2*;2
      ::+::*::
      ::+::*:
      ::+::;::*
      ::+::::
      ::::::
      6
      


      и какие-то коментарии тут излишни.

© Habrahabr.ru