aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ch-1.pl54
-rw-r--r--ch-2.pl48
2 files changed, 102 insertions, 0 deletions
diff --git a/ch-1.pl b/ch-1.pl
new file mode 100644
index 0000000000..feb190e26c
--- /dev/null
+++ b/ch-1.pl
@@ -0,0 +1,54 @@
+#!/usr/bin/perl
+# ref:
+# https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_majority_vote_algorithm
+# Perl Weekly Challenge #074 Task 1 Majority Element
+# task statement:
+# Write a script to find the majority element.
+# If none found then print -1.
+# Usage: ch-1.pl [ARRAY]
+use strict;
+use warnings;
+#use Test::More tests => 3;
+
+
+sub verify {
+ my @array = @{$_[0]};
+ my $m = $_[1];
+ my $c = 0;
+ for (@array) {
+ if ($m==$_) {
+ $c++;
+ }
+ }
+ return ($c > (scalar @array)/2.0 ? 1 : undef);
+}
+
+sub bm_majority_vote_alg {
+ my @array = @{$_[0]};
+ my $i = 0;
+ my $m;
+ for (@array) {
+ if ($i == 0) {
+ $m = $_;
+ $i++
+ }
+ elsif ($m == $_) {
+ $i++;
+ }
+ else {
+ $i--;
+ }
+ }
+
+
+ return ( verify(\@array, $m) ? $m : -1 );
+}
+
+
+print bm_majority_vote_alg(\@ARGV);
+
+=pod
+is_deeply( bm_majority_vote_alg( [1, 2, 2, 3, 2, 4, 2] ) , "2", "example1 provided");
+is_deeply( bm_majority_vote_alg( [1, 3, 1, 2, 4, 5] ) , "-1", "example2 provided");
+is_deeply( bm_majority_vote_alg( [2, 2, 2, 3, 1, 3, 4] ) , "-1", "array: 2223134");
+=cut
diff --git a/ch-2.pl b/ch-2.pl
new file mode 100644
index 0000000000..bae04b73b3
--- /dev/null
+++ b/ch-2.pl
@@ -0,0 +1,48 @@
+#!/usr/bin/perl
+# Perl Weekly Challenge #074 Task 2 FNR character
+# task statement:
+# 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.
+# Usage: ch-2.pl [string]
+
+use strict;
+use warnings;
+#use Test::More tests => 5;
+
+sub fnr {
+ my @uniquestack;
+ my %charcount;
+ my $ans = "";
+ my @characters = split //, $_[0];
+ for my $char (@characters) {
+ if (!exists $charcount{$char} ) {
+ push @uniquestack , $char;
+ $charcount{$char} = 1;
+ $ans .= $char;
+ }
+ else {
+ $charcount{$char}++;
+ @uniquestack = grep { $charcount{$_} == 1 } @uniquestack;
+ $ans .= (scalar @uniquestack != 0) ? $uniquestack[-1] : "#";
+ }
+ }
+ return $ans;
+
+}
+
+print fnr("$ARGV[0]");
+
+=pod
+is_deeply( fnr("ababc") , "abb#c", "example1 provided");
+is_deeply( fnr("xyzzyx") , "xyzyx#", "example2 provided");
+is_deeply( fnr("abcdef") , "abcdef", "trival");
+is_deeply( fnr("aaabbb") , "a##b##", "repeats");
+is_deeply( fnr(
+ "thequickbrownfoxjumpsoverthelazydog") ,
+ "thequickbrownffxjjmpssvvvvvvlazyddg",
+ "long sentence"
+);
+=cut