diff options
| author | drbaggy <js5@sanger.ac.uk> | 2021-07-03 14:11:09 +0100 |
|---|---|---|
| committer | drbaggy <js5@sanger.ac.uk> | 2021-07-03 14:11:09 +0100 |
| commit | 8f854c757768e981f3051720e433f0bef3e2fad6 (patch) | |
| tree | ca8d5afc11afcad9b330a0bcfe78c6cc8aaec898 | |
| parent | 8db26d825f608ae01ccbc43507ec0e00310abb6b (diff) | |
| download | perlweeklychallenge-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.md | 22 |
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; ``` |
