aboutsummaryrefslogtreecommitdiff
path: root/challenge-027
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-027')
-rw-r--r--challenge-027/paulo-custodio/Makefile2
-rw-r--r--challenge-027/paulo-custodio/README1
-rw-r--r--challenge-027/paulo-custodio/perl/ch-1.pl23
-rw-r--r--challenge-027/paulo-custodio/perl/ch-2.pl38
-rw-r--r--challenge-027/paulo-custodio/python/ch-1.py23
-rw-r--r--challenge-027/paulo-custodio/python/ch-2.py26
-rw-r--r--challenge-027/paulo-custodio/t/test-1.yaml5
-rw-r--r--challenge-027/paulo-custodio/t/test-2.yaml5
8 files changed, 123 insertions, 0 deletions
diff --git a/challenge-027/paulo-custodio/Makefile b/challenge-027/paulo-custodio/Makefile
new file mode 100644
index 0000000000..c3c762d746
--- /dev/null
+++ b/challenge-027/paulo-custodio/Makefile
@@ -0,0 +1,2 @@
+all:
+ perl ../../challenge-001/paulo-custodio/test.pl
diff --git a/challenge-027/paulo-custodio/README b/challenge-027/paulo-custodio/README
new file mode 100644
index 0000000000..87dc0b2fbd
--- /dev/null
+++ b/challenge-027/paulo-custodio/README
@@ -0,0 +1 @@
+Solution by Paulo Custodio
diff --git a/challenge-027/paulo-custodio/perl/ch-1.pl b/challenge-027/paulo-custodio/perl/ch-1.pl
new file mode 100644
index 0000000000..e4b4feca3e
--- /dev/null
+++ b/challenge-027/paulo-custodio/perl/ch-1.pl
@@ -0,0 +1,23 @@
+#!/usr/bin/perl
+
+# Challenge 027
+#
+# Task #1
+# Write a script to find the intersection of two straight lines. The
+# co-ordinates of the two lines should be provided as command line parameter.
+# For example:
+#
+# The two ends of Line 1 are represented as co-ordinates (a,b) and (c,d).
+#
+# The two ends of Line 2 are represented as co-ordinates (p,q) and (r,s).
+#
+# The script should print the co-ordinates of point of intersection of the
+# above two lines.
+
+use Modern::Perl;
+
+my($x1,$y1,$x2,$y2,$x3,$y3,$x4,$y4) = @ARGV;
+my $D = ($x1-$x2)*($y3-$y4)-($y1-$y2)*($x3-$x4);
+my $x = (($x1*$y2-$y1*$x2)*($x3-$x4)-($x1-$x2)*($x3*$y4-$y3*$x4))/$D;
+my $y = (($x1*$y2-$y1*$x2)*($y3-$y4)-($y1-$y2)*($x3*$y4-$y3*$x4))/$D;
+say sprintf("%.1f %.1f", $x, $y);
diff --git a/challenge-027/paulo-custodio/perl/ch-2.pl b/challenge-027/paulo-custodio/perl/ch-2.pl
new file mode 100644
index 0000000000..8091076b58
--- /dev/null
+++ b/challenge-027/paulo-custodio/perl/ch-2.pl
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+
+# Challenge 027
+#
+# Task #2
+# Write a script that allows you to capture/display historical data. It could
+# be an object or a scalar. For example
+#
+# my $x = 10; $x = 20; $x -= 5;
+#
+# After the above operations, it should list $x historical value in order.
+
+use Modern::Perl;
+
+{
+ package LoggingScalar;
+ sub TIESCALAR {
+ my($class, $value) = @_;
+ return bless [$value], $class;
+ }
+ sub FETCH {
+ my($self) = @_;
+ return $self->[-1];
+ }
+ sub STORE {
+ my($self, $value) = @_;
+ push @$self, $value;
+ }
+ sub show_hist {
+ my($self) = @_;
+ say join(" ", @$self);
+ }
+}
+
+tie my $x, 'LoggingScalar', 10;
+$x = 20;
+$x -= 5;
+tied($x)->show_hist();
diff --git a/challenge-027/paulo-custodio/python/ch-1.py b/challenge-027/paulo-custodio/python/ch-1.py
new file mode 100644
index 0000000000..8f3e6c9731
--- /dev/null
+++ b/challenge-027/paulo-custodio/python/ch-1.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python3
+
+# Challenge 027
+#
+# Task #1
+# Write a script to find the intersection of two straight lines. The
+# co-ordinates of the two lines should be provided as command line parameter.
+# For example:
+#
+# The two ends of Line 1 are represented as co-ordinates (a,b) and (c,d).
+#
+# The two ends of Line 2 are represented as co-ordinates (p,q) and (r,s).
+#
+# The script should print the co-ordinates of point of intersection of the
+# above two lines.
+
+import sys
+
+x1,y1,x2,y2,x3,y3,x4,y4 = [int(x) for x in sys.argv[1:9]]
+D = (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4)
+x = ((x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4))/D
+y = ((x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4))/D
+print("{:.1f} {:.1f}".format(x, y))
diff --git a/challenge-027/paulo-custodio/python/ch-2.py b/challenge-027/paulo-custodio/python/ch-2.py
new file mode 100644
index 0000000000..99fd57554b
--- /dev/null
+++ b/challenge-027/paulo-custodio/python/ch-2.py
@@ -0,0 +1,26 @@
+#!/usr/bin/python3
+
+# Challenge 027
+#
+# Task #2
+# Write a script that allows you to capture/display historical data. It could
+# be an object or a scalar. For example
+#
+# my $x = 10; $x = 20; $x -= 5;
+#
+# After the above operations, it should list $x historical value in order.
+
+class LoggingScalar:
+ def __init__(self, value):
+ self.values = [value]
+ def set(self, value):
+ self.values.append(value)
+ def get(self):
+ return self.values[-1]
+ def show_hist(self):
+ print(" ".join([str(x) for x in self.values]))
+
+x = LoggingScalar(10)
+x.set(20)
+x.set(x.get()-5)
+x.show_hist()
diff --git a/challenge-027/paulo-custodio/t/test-1.yaml b/challenge-027/paulo-custodio/t/test-1.yaml
new file mode 100644
index 0000000000..31ebb25d9b
--- /dev/null
+++ b/challenge-027/paulo-custodio/t/test-1.yaml
@@ -0,0 +1,5 @@
+- setup:
+ cleanup:
+ args: 15 10 49 25 29 5 32 32
+ input:
+ output: 30.3 16.8
diff --git a/challenge-027/paulo-custodio/t/test-2.yaml b/challenge-027/paulo-custodio/t/test-2.yaml
new file mode 100644
index 0000000000..78447f751a
--- /dev/null
+++ b/challenge-027/paulo-custodio/t/test-2.yaml
@@ -0,0 +1,5 @@
+- setup:
+ cleanup:
+ args:
+ input:
+ output: 10 20 15