aboutsummaryrefslogtreecommitdiff
path: root/Perl
diff options
context:
space:
mode:
authorSyndamia <kamen.d.mladenov@protonmail.com>2020-10-24 15:22:44 +0300
committerSyndamia <kamen.d.mladenov@protonmail.com>2020-10-24 15:22:44 +0300
commit23bb8feea150a2177b5381e9280bfc4a69112217 (patch)
tree0e41ece10461b3c914a115a17b1ab3081a7976f1 /Perl
parentc6c8585834d1c43e536ca460b1c32e25b63a4ec4 (diff)
downloadalgorithms-23bb8feea150a2177b5381e9280bfc4a69112217.tar
algorithms-23bb8feea150a2177b5381e9280bfc4a69112217.tar.gz
algorithms-23bb8feea150a2177b5381e9280bfc4a69112217.zip
Moved the solution of the range of elements exercise from a gist to a C# file and added a Perl solution
Diffstat (limited to 'Perl')
-rw-r--r--Perl/range-of-elements.pl29
1 files changed, 29 insertions, 0 deletions
diff --git a/Perl/range-of-elements.pl b/Perl/range-of-elements.pl
new file mode 100644
index 0000000..59d82f5
--- /dev/null
+++ b/Perl/range-of-elements.pl
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+# Impliment a method that will determinate if exists a range of
+# non-negative elements in an array that sum up to a specific non-negative number
+#
+# Example 1 - targetSum 3, numbers = [1, 7, 1, 1 ,1, 5, 6, 1] - output true (the sum of the elemtns in range 2 to 4 is 3)
+# Example 2 = targetSum 7, numbers = [0, 4, 5, 1, 8, 9, 12, 3, 1] - output false (no range sums to 7)
+
+$target_sum = shift // 4;
+@numbers = (@ARGV > 0) ? @ARGV : (10, 9, 8, 6, 5, 4) ;
+$range_exists = False;
+
+$start = 0;
+$end = 1;
+$sum = $numbers[0] + $numbers[1];
+
+while ($end < int(@numbers)) {
+ if ($sum == $target_sum) {
+ $range_exists = True;
+ last;
+ }
+ elsif ($sum > $target_sum) {
+ $sum -= $numbers[$start++];
+ }
+ else {
+ $sum += $numbers[++$end];
+ }
+}
+print $range_exists . "\n";