xref: /openbsd-src/regress/usr.bin/sed/sierpinski.sed (revision 1427438359e607ee25f7273fdf04b4a2b5ee918c)
1*14274383Smillert#! /bin/sed -nf
2*14274383Smillert
3*14274383Smillert# $OpenBSD: sierpinski.sed,v 1.1 2008/10/10 14:33:34 millert Exp $
4*14274383Smillert# From http://sed.sourceforge.net/grabbag/scripts
5*14274383Smillert# Public Domain
6*14274383Smillert
7*14274383Smillert# Sierpinski triangle in 10 commands + 2 labels.
8*14274383Smillert# Start with a line like this
9*14274383Smillert# _______________________________X_____________________________
10*14274383Smillert
11*14274383Smillert# Put an equal number of underscores on both sides.
12*14274383Smillerts/^\(_*\).*/\1X\1/p
13*14274383Smillert
14*14274383Smillert# Construct the last three lines of the triangle
15*14274383Smillert:start
16*14274383Smillert/^X/!s/_X_/X_X/gp
17*14274383Smillert/^X/!s/_X_X_/X___X/gp
18*14274383Smillert/^X/!s/_X___X_/X_X_X_X/gp
19*14274383Smillert/^X/ d
20*14274383Smillert
21*14274383Smillert# Now replace the consecutive X's with an X and many colons
22*14274383Smillert# X_X_X_X --->
23*14274383Smillert# X::::::
24*14274383Smillert:loop
25*14274383Smillerts/\(X:*\)_X/\1::/g
26*14274383Smillerttloop
27*14274383Smillert
28*14274383Smillert# And now create two new "seeds", one to the left and one to the right
29*14274383Smillert# _X::::::_ --->
30*14274383Smillert# X:::::::X --->
31*14274383Smillert# X_______X
32*14274383Smillert
33*14274383Smillerts/_X\(::*\)_/X:\1X/g
34*14274383Smillerts/:/_/gp
35*14274383Smillertbstart
36