aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2021-07-03 14:11:09 +0100
committerdrbaggy <js5@sanger.ac.uk>2021-07-03 14:11:09 +0100
commit8f854c757768e981f3051720e433f0bef3e2fad6 (patch)
treeca8d5afc11afcad9b330a0bcfe78c6cc8aaec898
parent8db26d825f608ae01ccbc43507ec0e00310abb6b (diff)
downloadperlweeklychallenge-club-8f854c757768e981f3051720e433f0bef3e2fad6.tar.gz
perlweeklychallenge-club-8f854c757768e981f3051720e433f0bef3e2fad6.tar.bz2
perlweeklychallenge-club-8f854c757768e981f3051720e433f0bef3e2fad6.zip
updated readme with compact code
-rw-r--r--challenge-119/james-smith/README.md22
1 files changed, 10 insertions, 12 deletions
diff --git a/challenge-119/james-smith/README.md b/challenge-119/james-smith/README.md
index 8747a9bc7c..cb80d08ad0 100644
--- a/challenge-119/james-smith/README.md
+++ b/challenge-119/james-smith/README.md
@@ -136,32 +136,30 @@ End LINE
Didn't like the idea of relying on JAVA... so here is a bare bones
interpreter...
```perl
-use strict;
-
$| = 1;
my( $ptr, @in, %mem, @code, %ptrs, $reg ) = 0;
my %commands = (
-'LINE' ,sub{print "\n"; },
-'IN' ,sub{die 'OUT OF INPUT' unless @in;$reg=shift@in},
+'LINE' ,sub{print "\n"},
'OUT' ,sub{print $reg},
-'PRINT' ,sub{print $_[0] =~ s{^"}{}r =~ s{"$}{}r; },
-'STORE' ,sub{$mem{$_[0]} = $reg},
-'LOAD' ,sub{$reg = $mem{$_[0]}},
-'HALT' ,sub{exit},
-'JINEG' ,sub{$ptr=$ptrs{$_[0]}-1 if $reg<0},
-'JIZERO' ,sub{$ptr=$ptrs{$_[0]}-1 if $reg==0},
-'JUMP' ,sub{$ptr=$ptrs{$_[0]}-1},
+'PRINT' ,sub{print $_[0]=~s{^"}{}r=~s{"$}{}r;},
+'IN' ,sub{die 'OUT OF INPUT' unless @in;$reg=shift@in},
+'STORE' ,sub{$mem{$_[0]}=$reg},
+'LOAD' ,sub{$reg=$mem{$_[0]}},
'ADD' ,sub{$reg+=$_[0]=~m{^-?\d+$}?$_[0]:$mem{$_[0]}},
'SUBTRACT',sub{$reg-=$_[0]=~m{^-?\d+$}?$_[0]:$mem{$_[0]}},
'MULTIPLY',sub{$reg*=$_[0]=~m{^-?\d+$}?$_[0]:$mem{$_[0]}},
'DIVIDE' ,sub{$reg/=$_[0]=~m{^-?\d+$}?$_[0]:$mem{$_[0]};$reg=int$reg},
+'JINEG' ,sub{$ptr=$ptrs{$_[0]}-1 if $reg<0},
+'JIZERO' ,sub{$ptr=$ptrs{$_[0]}-1 if $reg==0},
+'JUMP' ,sub{$ptr=$ptrs{$_[0]}-1},
+'HALT' ,sub{exit},
);
while(<>) {
(@in = map { 0+$_ } <> ) && last if m{^ {8}%};
($ptrs{$1},$_)=(scalar @code,$2) if m{^(\S{1,7})\s+(.*)};
- push @code, [ split m{\s+}, s{^\s+}{}r =~ s{\s+$}{}r, 2 ];
+ push @code, [ split m{\s+}, s{^\s+}{}r=~s{\s+$}{}r, 2 ];
}
($commands{$code[$ptr][0]}($code[$ptr][1]),$ptr++) for 1..1e6;
```