aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-074/bob-lied/README67
-rw-r--r--challenge-074/bob-lied/perl/ch-1.pl19
-rw-r--r--challenge-074/bob-lied/perl/ch-2.pl26
-rw-r--r--challenge-074/bob-lied/perl/lib/FNR.pm39
-rw-r--r--challenge-074/bob-lied/perl/lib/MajorityElement.pm39
-rw-r--r--challenge-074/bob-lied/perl/t/FNR.t14
-rw-r--r--challenge-074/bob-lied/perl/t/MajorityElement.t14
7 files changed, 171 insertions, 47 deletions
diff --git a/challenge-074/bob-lied/README b/challenge-074/bob-lied/README
index be171d638e..289b995df4 100644
--- a/challenge-074/bob-lied/README
+++ b/challenge-074/bob-lied/README
@@ -1,65 +1,38 @@
-Solutions to weekly challenge 72 by Bob Lied.
+Solutions to weekly challenge 74 by Bob Lied.
-https://perlweeklychallenge.org/blog/perl-weekly-challenge-072/
+https://perlweeklychallenge.org/blog/perl-weekly-challenge-074/
-This week, I would like to add two personal elements to the problem:
-(1) create a template for perl-vim that sets up these weekly challenges
-(includes Test::More, a skeleton for checking ARGV, and whatever else
-is quickly becoming a pattern; and (2) use a github issue in the submission
-process, just to learn more about using git and github.
-
-* TASK #1 > Trailing Zeroes
+* TASK #1 > Majority Element
** Initial thoughts
-Too easy, unless I'm missing something. The result gets a zero on the end every time
-it's multiplied by 10, and since we're doing factorials, that will happen every time N
-rolls past a multiple of 5. The answer is int(N/5), I think, but I'll need to convince
-myself completely.
-
-We could make it a little tougher by actually calculating N!, and maybe using Memoize
-as an optimization. And maybe finding out how high N can be until overflow or waiting time
-make it impractical.
-
** Post Solution Thoughts
-Yep, it was really that easy. I implemented the factorial using Memoize just
-for fun. The highest number that didn't roll over to floating point was 20!.
-
-
** Problem Statement
-You are given a positive integer $N (<= 10).
+You are given an array of integers of size $N.
+Write a script to find the majority element. If none found then print -1.
+Majority element in the list is the one that appears more than floor(size_of_list/2).
-Write a script to print number of trailing zeroes in $N!.
-* TASK #2 > Lines Range
-** Initial Thoughts
+* TASK #2 > FNR Character
-This has come up often enough that I know I've done it in sed and awk; and in
-a pipeline with head and tail. The flip-flop operator comes to mind, but
-there'll be some experimentation for boundary conditions. Also some test
-cases for A or B being outside the range of the file or having an empty file.
+** Initial Thoughts
** Post Solution Thoughts
-The hardest part of this turned out to be how to set up tests. I wanted the
-testing to be self-contained, so I put the test data into __DATA__. But then
-re-reading that repeatedly for different tests required seeking back to the
-start and also resetting $. A couple of trips to Google there.
-
-I also wanted to capture the output in a variable and not just print to the
-console. I knew that a string could be opened as a file handle using a
-reference to the string. It should have been easy; but I spent a long time
-debugging before I realized that I had typed \&TestResult instead of
-\$TestResult.
-
-
** Problem Statement
-You are given a text file name $file and range $A - $B where $A <= $B.
-
-Write a script to display lines range $A and $B in the given file.
-
-(That's A and B inclusive, from the examples.)
+You are given a string $S.
+
+Write a script to print the series of first non-repeating character
+(left -> right) for the given string. Print # if none found.
+Example 1
+Input: $S = ‘ababc’
+Output: ‘abb#c’
+Pass 1: “a”, the FNR character is ‘a’
+Pass 2: “ab”, the FNR character is ‘b’
+Pass 3: “aba”, the FNR character is ‘b’
+Pass 4: “abab”, no FNR found, hence ‘#’
+Pass 5: “ababc” the FNR character is ‘c’
diff --git a/challenge-074/bob-lied/perl/ch-1.pl b/challenge-074/bob-lied/perl/ch-1.pl
new file mode 100644
index 0000000000..57201dd4ff
--- /dev/null
+++ b/challenge-074/bob-lied/perl/ch-1.pl
@@ -0,0 +1,19 @@
+#!/usr/bin/env perl
+# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu:
+#=============================================================================
+# ch-1.pl
+#=============================================================================
+# Copyright (c) 2020, Bob Lied
+#=============================================================================
+# Perl Weekly Challenge 074 Task #1 > Majority Element
+#=============================================================================
+# You are given an array of integers of size $N.
+# Write a script to find the majority element. If none found, then print -1.
+# Majority element in the list is th one that appears more than floor($N/2).
+
+use strict;
+use warnings;
+
+use lib "lib";
+use MajorityElement;
+
diff --git a/challenge-074/bob-lied/perl/ch-2.pl b/challenge-074/bob-lied/perl/ch-2.pl
new file mode 100644
index 0000000000..64b3a88739
--- /dev/null
+++ b/challenge-074/bob-lied/perl/ch-2.pl
@@ -0,0 +1,26 @@
+#!/usr/bin/env perl
+# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu:
+#=============================================================================
+# ch-2.pl
+#=============================================================================
+# Copyright (c) 2020, Bob Lied
+#=============================================================================
+# Perl Weekly Challenge Task #2 > FNR Character
+#=============================================================================
+# You are given a string $S.
+# Write a script to print the series of first non-repeating character (left
+# to right) for the given string. Print # if none found
+# Example:
+# Input: $S = 'ababc'
+# Output: 'abb#c'
+# Pass 1: "a" the FNR character is 'a'
+# Pass 2: "ab" the FNR is 'b'
+# Pass 3: "aba" the FNR is 'b'
+# Pass 4: "abab" the FNR is '#' (all chars repeat)
+# Pass 5: "ababc" then FNR is 'c'
+
+use strict;
+use warnings;
+
+use lib "lib";
+
diff --git a/challenge-074/bob-lied/perl/lib/FNR.pm b/challenge-074/bob-lied/perl/lib/FNR.pm
new file mode 100644
index 0000000000..c0cbae378d
--- /dev/null
+++ b/challenge-074/bob-lied/perl/lib/FNR.pm
@@ -0,0 +1,39 @@
+# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu:
+#=============================================================================
+# FNR.pm
+#=============================================================================
+# Copyright (c) 2020, Bob Lied
+#=============================================================================
+# Description:
+#=============================================================================
+
+package FNR;
+
+use strict;
+use warnings;
+
+require Exporter;
+our @ISA = qw(Exporter);
+our @EXPORT = qw();
+our @EXPORT_OK = qw();
+
+sub new
+{
+ my $class = shift;
+ my $class = ref($class) || $class;
+ my $self = {
+ _name1 = $_[0],
+ };
+ bless $self, $class;
+ return $self;
+}
+
+sub FNR
+{
+ my ($s) = @_;
+ my $result = "";
+
+ return $result;
+}
+
+1;
diff --git a/challenge-074/bob-lied/perl/lib/MajorityElement.pm b/challenge-074/bob-lied/perl/lib/MajorityElement.pm
new file mode 100644
index 0000000000..8a7dcb0192
--- /dev/null
+++ b/challenge-074/bob-lied/perl/lib/MajorityElement.pm
@@ -0,0 +1,39 @@
+# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu:
+#=============================================================================
+# MajorityElement.pm
+#=============================================================================
+# Copyright (c) 2020, Bob Lied
+#=============================================================================
+# Description:
+#=============================================================================
+
+package MajorityElement;
+
+use strict;
+use warnings;
+
+require Exporter;
+our @ISA = qw(Exporter);
+our @EXPORT = qw(majorityElement);
+our @EXPORT_OK = qw();
+
+sub new
+{
+ my $class = shift;
+ my $class = ref($class) || $class;
+ my $self = {
+ _name1 = $_[0],
+ };
+ bless $self, $class;
+ return $self;
+}
+
+sub majorityElement
+{
+ my (@arr) = @_;
+ my $result = -1;
+
+ return $result;
+}
+
+1;
diff --git a/challenge-074/bob-lied/perl/t/FNR.t b/challenge-074/bob-lied/perl/t/FNR.t
new file mode 100644
index 0000000000..1d4fdd9472
--- /dev/null
+++ b/challenge-074/bob-lied/perl/t/FNR.t
@@ -0,0 +1,14 @@
+# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu:
+#===============================================================================
+# FILE: FNR.t
+#===============================================================================
+
+use strict;
+use warnings;
+
+use Test2::V0;
+
+use lib "../lib";
+use FNR;
+
+done_testing();
diff --git a/challenge-074/bob-lied/perl/t/MajorityElement.t b/challenge-074/bob-lied/perl/t/MajorityElement.t
new file mode 100644
index 0000000000..7d1b4a22d8
--- /dev/null
+++ b/challenge-074/bob-lied/perl/t/MajorityElement.t
@@ -0,0 +1,14 @@
+# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu:
+#===============================================================================
+# FILE: MajorityElement.t
+#===============================================================================
+
+use strict;
+use warnings;
+
+use Test2::V0;
+
+use lib "../lib";
+use MajorityElement;
+
+done_testing();