diff options
| author | Roger Bell_West <roger@firedrake.org> | 2019-11-13 14:10:14 +0000 |
|---|---|---|
| committer | Roger Bell_West <roger@firedrake.org> | 2019-11-13 14:10:14 +0000 |
| commit | e79320e1a00a309c5fbeaf1035abaafc3b869905 (patch) | |
| tree | b28509ab96d741a15b327d2385a1ba6c055446f1 | |
| parent | 1cb9654dd6e3a40a12c031c3d9b7f9e610f30d70 (diff) | |
| download | perlweeklychallenge-club-e79320e1a00a309c5fbeaf1035abaafc3b869905.tar.gz perlweeklychallenge-club-e79320e1a00a309c5fbeaf1035abaafc3b869905.tar.bz2 perlweeklychallenge-club-e79320e1a00a309c5fbeaf1035abaafc3b869905.zip | |
Answers to challenge #34
| -rwxr-xr-x | challenge-034/roger-bell-west/perl5/ch-2.pl | 64 | ||||
| -rwxr-xr-x | challenge-034/roger-bell-west/perl6/ch-2.p6 | 61 |
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]); +} |
