Sierpinski square curve: Difference between revisions
Rename Perl 6 -> Raku, alphabetize, minor clean-up
mNo edit summary |
Thundergnat (talk | contribs) (Rename Perl 6 -> Raku, alphabetize, minor clean-up) |
||
Line 3:
;Task
Produce a graphical or ASCII-art representation of a [[wp:Sierpiński_curve|Sierpinski square curve]] of at least order 3.
=={{header|Go}}==
Line 125:
See: [https://github.com/SqrtNegInf/Rosettacode-Perl5-Smoke/blob/master/ref/sierpinski-square-curve.svg sierpinski-square-curve.svg] (offsite SVG image)
=={{header|
<lang Phix>constant rule = "XF-F+F-XF+F+XF-F+F-X"▼
string s = "F+F+XF+F+XF"▼
for n=1 to 4 do▼
string next = ""▼
for i=1 to length(s) do▼
integer ch = s[i]▼
next &= iff(ch='X'?rule:ch)▼
end for▼
s = next▼
end for▼
sequence X = {}, Y= {}▼
atom x=0, y=0, theta=PI/4, r = 6▼
string svg = ""▼
for i=1 to length(s) do▼
integer ch = s[i]▼
switch ch do▼
case 'F': X &= x; x += r*cos(theta)▼
Y &= y; y += r*sin(theta)▼
case '+': theta += PI/2▼
case '-': theta -= PI/2▼
end switch▼
end for▼
constant svgfmt = """▼
<svg xmlns="http://www.w3.org/2000/svg" height="%d" width="%d">▼
<rect height="100%%" width="100%%" style="fill:black" />▼
<polyline points="%s" style="stroke: orange; stroke-width: 1" transform="translate(%d,%d)" />▼
</svg>"""▼
string points = ""▼
for i=1 to length(X) do▼
points &= sprintf("%.2f,%.2f ",{X[i],Y[i]})▼
end for▼
integer fn = open("sierpinski_square_curve.svg","w")▼
atom xt = -min(X)+10,▼
yt = -min(Y)+10▼
printf(fn,svgfmt,{max(X)+xt+10,max(Y)+yt+10,points,xt,yt})▼
close(fn)</lang>▼
(formerly Perl 6)
{{works with|Rakudo|2020.02}}
Line 173 ⟶ 213:
);</lang>
See: [https://github.com/thundergnat/rc/blob/master/img/sierpinski-square-curve-perl6.svg Sierpinski-square-curve-perl6.svg] (offsite SVG image)
▲=={{header|Phix}}==
▲<lang Phix>constant rule = "XF-F+F-XF+F+XF-F+F-X"
▲string s = "F+F+XF+F+XF"
▲for n=1 to 4 do
▲ string next = ""
▲ for i=1 to length(s) do
▲ integer ch = s[i]
▲ next &= iff(ch='X'?rule:ch)
▲ end for
▲ s = next
▲end for
▲sequence X = {}, Y= {}
▲atom x=0, y=0, theta=PI/4, r = 6
▲string svg = ""
▲for i=1 to length(s) do
▲ integer ch = s[i]
▲ switch ch do
▲ case 'F': X &= x; x += r*cos(theta)
▲ Y &= y; y += r*sin(theta)
▲ case '+': theta += PI/2
▲ case '-': theta -= PI/2
▲ end switch
▲end for
▲constant svgfmt = """
▲<svg xmlns="http://www.w3.org/2000/svg" height="%d" width="%d">
▲ <rect height="100%%" width="100%%" style="fill:black" />
▲ <polyline points="%s" style="stroke: orange; stroke-width: 1" transform="translate(%d,%d)" />
▲</svg>"""
▲string points = ""
▲for i=1 to length(X) do
▲ points &= sprintf("%.2f,%.2f ",{X[i],Y[i]})
▲end for
▲integer fn = open("sierpinski_square_curve.svg","w")
▲atom xt = -min(X)+10,
▲ yt = -min(Y)+10
▲printf(fn,svgfmt,{max(X)+xt+10,max(Y)+yt+10,points,xt,yt})
▲close(fn)</lang>
=={{header|Sidef}}==
|