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/


Мене вистачило на реалізацію операцій +-*, до поділу хід не дійшов.
Практичної користі не шукайте — тут її немає.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.