diff options
| author | Ruben Westerberg <drclaw@mac.com> | 2019-08-24 21:29:19 +1000 |
|---|---|---|
| committer | Ruben Westerberg <drclaw@mac.com> | 2019-08-24 21:29:19 +1000 |
| commit | 84014b58431f94d05607621f5be85454799a6f7d (patch) | |
| tree | eea2fe0154931f6b99adfe07cad2a955a39e4bb3 | |
| parent | 92c9dc707443f1d46ec3a84860c280cf190be249 (diff) | |
| download | perlweeklychallenge-club-84014b58431f94d05607621f5be85454799a6f7d.tar.gz perlweeklychallenge-club-84014b58431f94d05607621f5be85454799a6f7d.tar.bz2 perlweeklychallenge-club-84014b58431f94d05607621f5be85454799a6f7d.zip | |
Basic working version for ch-2.p5
| -rwxr-xr-x | challenge-022/ruben-westerberg/perl5/ch-2.pl | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/challenge-022/ruben-westerberg/perl5/ch-2.pl b/challenge-022/ruben-westerberg/perl5/ch-2.pl new file mode 100755 index 0000000000..aa504468d6 --- /dev/null +++ b/challenge-022/ruben-westerberg/perl5/ch-2.pl @@ -0,0 +1,58 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use v5.26; + +# implement LZW +my @symbols= 'A'..'Z'; +my @indexes; +for (split "","TOBEORNOTTOBEORTOBEORNOT") { + my $res=encode(\@symbols, $_); + if ($res) { + push @indexes, $res + } +} +my $res=encode(\@symbols, $_); +if ($res) { + push @indexes, $res +} +print join ",",@indexes; + +for (@indexes) { + print decode(\@symbols,$_),"\n"; +} +sub encode { + state $symbol=""; + my $dict=shift; + state $count= @$dict; + my $next=shift; + $symbol.=$next if defined $next; + print "Symbol: ",$symbol,"\n"; + state $prev=""; + print "Prev: ",$prev,"\n"; + my $s=(grep {$symbol eq $_} @$dict)[0]; + print "$s\n"; + print "$symbol\n"; + my $res; + if (defined $s and $next) { + #found existing keep adding + $res=undef; + } + else { + #add new symbol + print "New symbol $symbol\n"; + #$$dict{$symbol}=$count++; + push @$dict, $symbol; + $res=(grep {$prev eq $$dict[$_]} 0..@$dict-1)[0]; + $symbol=substr $symbol, -1; + } + $prev=$symbol; + $res; +} + + +sub decode { + my $dict=shift; + my $code=shift; + @$dict[$code]; +} |
