aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-11-13 14:44:20 +0000
committerGitHub <noreply@github.com>2019-11-13 14:44:20 +0000
commitfa1761aa3b3ac3602d744bdd9ac85f5fb89cae58 (patch)
treeb28509ab96d741a15b327d2385a1ba6c055446f1
parent1cb9654dd6e3a40a12c031c3d9b7f9e610f30d70 (diff)
parente79320e1a00a309c5fbeaf1035abaafc3b869905 (diff)
downloadperlweeklychallenge-club-fa1761aa3b3ac3602d744bdd9ac85f5fb89cae58.tar.gz
perlweeklychallenge-club-fa1761aa3b3ac3602d744bdd9ac85f5fb89cae58.tar.bz2
perlweeklychallenge-club-fa1761aa3b3ac3602d744bdd9ac85f5fb89cae58.zip
Merge pull request #930 from Firedrake/rogerbw-challenge-034
Answers to challenge #34
-rwxr-xr-xchallenge-034/roger-bell-west/perl5/ch-2.pl64
-rwxr-xr-xchallenge-034/roger-bell-west/perl6/ch-2.p661
2 files changed, 125 insertions, 0 deletions
diff --git a/challenge-034/roger-bell-west/perl5/ch-2.pl b/challenge-034/roger-bell-west/perl5/ch-2.pl
new file mode 100755
index 0000000000..133f0b7fc6
--- /dev/null
+++ b/challenge-034/roger-bell-west/perl5/ch-2.pl
@@ -0,0 +1,64 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+my @stack=();
+
+my %op=(
+ add => \&add,
+ '+' => \&add,
+ sub => \&sub,
+ '-' => \&sub,
+ mul => \&mul,
+ '*' => \&mul,
+ div => \&div,
+ '/' => \&div,
+ neg => \&neg,
+ dup => \&dup,
+ pop => \&pop,
+ exch => \&exch,
+ );
+
+foreach my $p (@ARGV) {
+ if (exists $op{$p}) {
+ $op{$p}->();
+ } elsif ($p =~ /^[.0-9]+$/) {
+ push @stack,$p;
+ } else {
+ die "Unknown input $p\n";
+ }
+ print join(' ',@stack),"\n";
+}
+
+sub add {
+ push @stack,(pop @stack) + (pop @stack);
+}
+
+sub sub {
+ push @stack,-((pop @stack) - (pop @stack));
+}
+
+sub mul {
+ push @stack,(pop @stack) * (pop @stack);
+}
+
+sub div {
+ push @stack,1/((pop @stack) / (pop @stack));
+}
+
+sub neg {
+ push @stack,-(pop @stack);
+}
+
+sub dup {
+ push @stack,$stack[-1];
+}
+
+sub pop {
+ pop @stack;
+}
+
+sub exch {
+ ($stack[-1],$stack[-2])=($stack[-2],$stack[-1]);
+}
diff --git a/challenge-034/roger-bell-west/perl6/ch-2.p6 b/challenge-034/roger-bell-west/perl6/ch-2.p6
new file mode 100755
index 0000000000..ab7252072d
--- /dev/null
+++ b/challenge-034/roger-bell-west/perl6/ch-2.p6
@@ -0,0 +1,61 @@
+#! /usr/bin/perl6
+
+my @stack=();
+
+my %op=(
+ add => &add,
+ '+' => &add,
+ sub => &sub,
+ '-' => &sub,
+ mul => &mul,
+ '*' => &mul,
+ div => &div,
+ '/' => &div,
+ neg => &neg,
+ dup => &dup,
+ pop => &pop,
+ exch => &exch,
+ );
+
+for @*ARGS -> $p {
+ if (%op{$p}:exists) {
+ %op{$p}.();
+ } elsif ($p ~~ /^<[.0..9]>+$/) {
+ push @stack,$p;
+ } else {
+ die "Unknown input $p\n";
+ }
+ say join(' ',@stack);
+}
+
+sub add {
+ push @stack,(@stack.pop) + (@stack.pop);
+}
+
+sub sub {
+ push @stack,-((@stack.pop) - (@stack.pop));
+}
+
+sub mul {
+ push @stack,(@stack.pop) * (@stack.pop);
+}
+
+sub div {
+ push @stack,1/((@stack.pop) / (@stack.pop));
+}
+
+sub neg {
+ push @stack,-(@stack.pop);
+}
+
+sub dup {
+ push @stack,@stack[* -1];
+}
+
+sub pop {
+ @stack.pop;
+}
+
+sub exch {
+ (@stack[* -1],@stack[* -2])=(@stack[* -2],@stack[* -1]);
+}