Sierpinski curve: Difference between revisions
Rename Perl 6 -> Raku, alphabetize, minor clean-up
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 curve]] of at least order 3.
=={{header|Go}}==
Line 243 ⟶ 242:
close $fh;</lang>
See: [https://github.com/SqrtNegInf/Rosettacode-Perl5-Smoke/blob/master/ref/sierpinski-curve.svg sierpinski-curve.svg] (offsite SVG image)
=={{header|Perl 6}}==▼
{{works with|Rakudo|2020.02}}▼
<lang perl6>use SVG;▼
role Lindenmayer {▼
has %.rules;▼
method succ {▼
self.comb.map( { %!rules{$^c} // $c } ).join but Lindenmayer(%!rules)▼
}▼
}▼
my $sierpinski = 'F--XF--F--XF' but Lindenmayer( { X => 'XF+G+XF--F--XF+G+X' } );▼
$sierpinski++ xx 5;▼
my $dim = 640;▼
my $scale = 8;▼
my $dir = pi/4;▼
my @points = (316, -108);▼
for $sierpinski.comb {▼
state ($x, $y) = @points[0,1];▼
state $d = 0;▼
when 'F'|'G' { @points.append: ($x += $scale * $d.cos).round(1), ($y += $scale * $d.sin).round(1) }▼
when '+' { $d -= $dir }▼
when '-' { $d += $dir }▼
default { }▼
}▼
my $out = './sierpinski-curve-perl6.svg'.IO;▼
$out.spurt: SVG.serialize(▼
svg => [▼
:width($dim), :height($dim),▼
:rect[:width<100%>, :height<100%>, :fill<black>],▼
:polyline[▼
:points(@points.join: ','), :fill<black>,▼
:transform("rotate(45, 320, 320)"), :style<stroke:#F7DF1E>,▼
],▼
],▼
);</lang>▼
See: [https://github.com/thundergnat/rc/blob/master/img/sierpinski-curve-perl6.svg Sierpinski-curve-perl6.svg] (offsite SVG image)▼
=={{header|Phix}}==
Line 442 ⟶ 397:
main()</lang>
(formerly Perl 6)
▲{{works with|Rakudo|2020.02}}
▲<lang perl6>use SVG;
▲role Lindenmayer {
▲ has %.rules;
▲ method succ {
▲ self.comb.map( { %!rules{$^c} // $c } ).join but Lindenmayer(%!rules)
▲ }
▲}
▲my $sierpinski = 'F--XF--F--XF' but Lindenmayer( { X => 'XF+G+XF--F--XF+G+X' } );
▲$sierpinski++ xx 5;
▲my $dim = 640;
▲my $scale = 8;
▲my $dir = pi/4;
▲my @points = (316, -108);
▲for $sierpinski.comb {
▲ state ($x, $y) = @points[0,1];
▲ state $d = 0;
▲ when 'F'|'G' { @points.append: ($x += $scale * $d.cos).round(1), ($y += $scale * $d.sin).round(1) }
▲ when '+' { $d -= $dir }
▲ when '-' { $d += $dir }
▲ default { }
▲}
▲my $out = './sierpinski-curve-perl6.svg'.IO;
▲$out.spurt: SVG.serialize(
▲ svg => [
▲ :width($dim), :height($dim),
▲ :rect[:width<100%>, :height<100%>, :fill<black>],
▲ :polyline[
▲ :points(@points.join: ','), :fill<black>,
▲ :transform("rotate(45, 320, 320)"), :style<stroke:#F7DF1E>,
▲ ],
▲ ],
▲);</lang>
▲See: [https://github.com/thundergnat/rc/blob/master/img/sierpinski-curve-perl6.svg Sierpinski-curve-perl6.svg] (offsite SVG image)
=={{header|Sidef}}==
|