aboutsummaryrefslogtreecommitdiff
path: root/challenge-165
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2022-05-17 10:40:22 +0200
committerLuca Ferrari <fluca1978@gmail.com>2022-05-17 10:40:22 +0200
commit13e6caba17e4f7cdbb903d98bbabc2502338bf4d (patch)
tree0077d220c1d6f29592ef95b2e7573fd597f92da9 /challenge-165
parentc47425cd8822b9a4eb0c63237bca3aa136987b9b (diff)
downloadperlweeklychallenge-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-xchallenge-165/luca-ferrari/raku/ch-1.p614
-rwxr-xr-xchallenge-165/luca-ferrari/raku/ch-2.p641
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;
+}