aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariano Spadaccini <spadacciniweb@gmail.com>2023-01-17 13:56:29 +0100
committerMariano Spadaccini <spadacciniweb@gmail.com>2023-01-17 13:56:29 +0100
commit36fa71070f5de0b340d124b649264837dbe13439 (patch)
tree80aa3725b517b4beeb3e06d4a6d09fa7b296029e
parent952f98a3d4e479992cd18e544ebb441a952f7159 (diff)
downloadperlweeklychallenge-club-36fa71070f5de0b340d124b649264837dbe13439.tar.gz
perlweeklychallenge-club-36fa71070f5de0b340d124b649264837dbe13439.tar.bz2
perlweeklychallenge-club-36fa71070f5de0b340d124b649264837dbe13439.zip
add ch-1 and ch-2
-rw-r--r--challenge-200/spadacciniweb/perl/ch-1.pl47
-rw-r--r--challenge-200/spadacciniweb/perl/ch-2.pl76
2 files changed, 123 insertions, 0 deletions
diff --git a/challenge-200/spadacciniweb/perl/ch-1.pl b/challenge-200/spadacciniweb/perl/ch-1.pl
new file mode 100644
index 0000000000..d70110cbbb
--- /dev/null
+++ b/challenge-200/spadacciniweb/perl/ch-1.pl
@@ -0,0 +1,47 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+# You are given an array of integers.
+#
+# Write a script to find out all Arithmetic Slices for the given array of integers.
+# An integer array is called arithmetic if it has at least 3 elements and the differences between any three consecutive elements are the same.
+#
+#
+# Example 1
+# Input: @array = (1,2,3,4)
+# Output: (1,2,3), (2,3,4), (1,2,3,4)
+#
+# Example 2
+# Input: @array = (2)
+# Output: () as no slice found.
+
+
+my @list = @ARGV;
+my @slices;
+if (scalar @list >= 3) {
+ foreach my $i (0..$#list-2) {
+ my $bool_slice = 1;
+ foreach my $seq ($i+2..$#list) {
+ my @slice = map { $list[$_] }
+ $i..$seq;
+ foreach my $j (2..$#slice) {
+ if ($slice[1] - $slice[0] != $slice[$j]-$slice[$j-1]) {
+ $bool_slice = 0;
+ last;
+ }
+ }
+ push @slices,
+ sprintf '(%s)', join ',', @slice
+ if $bool_slice;
+ last
+ if $bool_slice == 0;
+ }
+ }
+}
+
+if (@slices) {
+ printf 'Output: %s', join ', ', @slices;
+} else {
+ print 'Output: () as no slice found.';
+}
diff --git a/challenge-200/spadacciniweb/perl/ch-2.pl b/challenge-200/spadacciniweb/perl/ch-2.pl
new file mode 100644
index 0000000000..99ce3da3a9
--- /dev/null
+++ b/challenge-200/spadacciniweb/perl/ch-2.pl
@@ -0,0 +1,76 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use experimental 'smartmatch';
+
+my $spaces = 3;
+my $segment_lenght = 7;
+
+print "Please enter a decimal number: ";
+my $input = <STDIN>;
+chomp $input;
+die 'input not valid'
+ unless $input =~ /^\d+$/;
+my @digits = split //, $input;
+
+my @truth = qw<abcdef bc abdeg abcdg bcfg acdfg acdefg abc abcdefg abcfg>;
+
+foreach my $step (0..6) {
+ foreach my $i (0..$#digits) {
+ my $segments = $truth[$digits[$i]];
+ if ($step ~~ [0]) {
+ horizontal_line(($segments =~ /a/) ? 1 : 0);
+ spaces_or_newline($i, $#digits);
+ }
+ if ($step ~~ [1..2]) {
+ vertical_line(($segments =~ /f/) ? 1 : 0);
+ spaces_between_segments();
+ vertical_line(($segments =~ /b/) ? 1 : 0);
+ spaces_or_newline($i, $#digits);
+ }
+ if ($step == 3) {
+ horizontal_line(($segments =~ /g/) ? 1 : 0);
+ spaces_or_newline($i, $#digits);
+ }
+ if ($step ~~ [4..5]) {
+ vertical_line(($segments =~ /e/) ? 1 : 0);
+ spaces_between_segments();
+ vertical_line(($segments =~ /c/) ? 1 : 0);
+ spaces_or_newline($i, $#digits);
+ }
+ if ($step == 6) {
+ horizontal_line(($segments =~ /d/) ? 1 : 0);
+ spaces_or_newline($i, $#digits);
+ }
+ }
+}
+
+sub spaces_or_newline {
+ my ($i, $digits) = @_;
+ if ($i < $digits) {
+ print ' 'x$spaces;
+ } else {
+ print "\n";
+ }
+}
+
+sub horizontal_line {
+ if ($_[0]) {
+ print '-'x$segment_lenght;
+ } else {
+ print ' 'x$segment_lenght;
+ }
+}
+
+sub vertical_line {
+ if ($_[0]) {
+ print '|';
+ } else {
+ print ' ';
+ }
+}
+
+sub spaces_between_segments {
+ print ' 'x($segment_lenght-2);
+}