diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2022-05-17 10:40:22 +0200 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2022-05-17 10:40:22 +0200 |
| commit | 13e6caba17e4f7cdbb903d98bbabc2502338bf4d (patch) | |
| tree | 0077d220c1d6f29592ef95b2e7573fd597f92da9 /challenge-165 | |
| parent | c47425cd8822b9a4eb0c63237bca3aa136987b9b (diff) | |
| download | perlweeklychallenge-club-13e6caba17e4f7cdbb903d98bbabc2502338bf4d.tar.gz perlweeklychallenge-club-13e6caba17e4f7cdbb903d98bbabc2502338bf4d.tar.bz2 perlweeklychallenge-club-13e6caba17e4f7cdbb903d98bbabc2502338bf4d.zip | |
Task 2 done.
Adjusted some parts of task1 to allow task 2 to be able to use it as a
drawing engine
Diffstat (limited to 'challenge-165')
| -rwxr-xr-x | challenge-165/luca-ferrari/raku/ch-1.p6 | 14 | ||||
| -rwxr-xr-x | challenge-165/luca-ferrari/raku/ch-2.p6 | 41 |
2 files changed, 48 insertions, 7 deletions
diff --git a/challenge-165/luca-ferrari/raku/ch-1.p6 b/challenge-165/luca-ferrari/raku/ch-1.p6 index 6ceb5bcc2b..c6d9146c83 100755 --- a/challenge-165/luca-ferrari/raku/ch-1.p6 +++ b/challenge-165/luca-ferrari/raku/ch-1.p6 @@ -12,18 +12,18 @@ sub MAIN( Str $filename = 'task1.svg' ) { if @elements.elems == 2 { # a point - my $point = circle => [ cx => @elements[ 0 ].Int, - cy => @elements[ 1 ].Int, + my $point = circle => [ cx => @elements[ 0 ].Num, + cy => @elements[ 1 ].Num, r => 5, fill => 'blue' ]; @points.push: $point; } else { # a line - my $line = line => [ x1 => @elements[ 0 ].Int, - y1 => @elements[ 1 ].Int, - x2 => @elements[ 3 ].Int, - y2 => @elements[ 3 ].Int, + my $line = line => [ x1 => @elements[ 0 ].Num, + y1 => @elements[ 1 ].Num, + x2 => @elements[ 3 ].Num, + y2 => @elements[ 3 ].Num, stroke => 'magenta' ]; @lines.push: $line; } @@ -31,5 +31,5 @@ sub MAIN( Str $filename = 'task1.svg' ) { } $filename.IO.spurt( SVG.serialize: - svg => [ width => 100, height => 100, |@points, |@lines ] ); + svg => [ width => 500, height => 500, |@points, |@lines ] ); } diff --git a/challenge-165/luca-ferrari/raku/ch-2.p6 b/challenge-165/luca-ferrari/raku/ch-2.p6 new file mode 100755 index 0000000000..babe880de4 --- /dev/null +++ b/challenge-165/luca-ferrari/raku/ch-2.p6 @@ -0,0 +1,41 @@ +#!raku + +# Perl Weekly Challenge 165 + +sub MAIN() { + + my @input-points = + <333,129 39,189 140,156 292,134 393,52 160,166 362,122 13,193 + 341,104 320,113 109,177 203,152 343,100 225,110 23,186 282,102 + 284,98 205,133 297,114 292,126 339,112 327,79 253,136 61,169 + 128,176 346,72 316,103 124,162 65,181 159,137 212,116 337,86 + 215,136 153,137 390,104 100,180 76,188 77,181 69,195 92,186 + 275,96 250,147 34,174 213,134 186,129 189,154 361,82 363,89 >; + + # "decompose" the input into two elements arrays + my @points = @input-points.split( / \s+ / ).split( ',' ).split( / \s+ / ).map( *.Int ).rotor: 2; + + + # compute all the parts + my ( $m, $x, $y, $xy, $xx ) = 0,0,0,0,0; + $x = [+] @points.map( { $_[0] } ); + $y = [+] @points.map( { $_[1] } ); + $xy = [+] @points.map( { $_[0] * $_[1] } ); + $xx = [+] @points.map( { $_[0] ** 2 } ); + $m = ( @points.elems * $xy - $x * $y ) / ( @points.elems * $xx - $x ** 2 ); + + my $b = 0; + $b = ( $y - $m * $x ) / @points.elems; + + # compute the line start and end point + my @line; + @line.push: $_, $m * $_ + $b for 0,100; + + + # now I need to graph + my $task1 = run "raku", <raku/ch-1.p6 task2.svg>, :in, :err; + $task1.in.say: $_.join( ',' ) for @points; + $task1.in.say: @line.join( ',' ); + $task1.in.close; + $task1.err.slurp.say; +} |
