diff options
| author | Luis Mochan <mochan@fis.unam.mx> | 2021-12-28 18:29:12 -0600 |
|---|---|---|
| committer | Luis Mochan <mochan@fis.unam.mx> | 2021-12-28 18:29:12 -0600 |
| commit | 674bf026e245a455b8fc923b40a9f08a2ce1fbd0 (patch) | |
| tree | 63387dca6a678316bbbb6074d0435ed152ca1787 | |
| parent | 75fc94618c6390ef3afc87d2b5c8bcfe4584d59c (diff) | |
| download | perlweeklychallenge-club-674bf026e245a455b8fc923b40a9f08a2ce1fbd0.tar.gz perlweeklychallenge-club-674bf026e245a455b8fc923b40a9f08a2ce1fbd0.tar.bz2 perlweeklychallenge-club-674bf026e245a455b8fc923b40a9f08a2ce1fbd0.zip | |
Fix mistake in algorithm
| -rwxr-xr-x | challenge-145/wlmb/perl/ch-2.pl | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/challenge-145/wlmb/perl/ch-2.pl b/challenge-145/wlmb/perl/ch-2.pl index 52bca78943..4b0d431cb1 100755 --- a/challenge-145/wlmb/perl/ch-2.pl +++ b/challenge-145/wlmb/perl/ch-2.pl @@ -18,7 +18,7 @@ foreach(@ARGV){ $root={size=>0, edges=>{}}; $current=$root; $_->{suffix}=$imaginary_root foreach($root, $imaginary_root); - @letters=grep {!/[[:punct]|\s/} split '', lc $_; #ignore spaces and case + @letters=grep {!/\s/} split '', lc $_; #ignore spaces and case foreach(0..@letters-1){ add_letter($_); } @@ -26,7 +26,8 @@ foreach(@ARGV){ palindromes($imaginary_root->{edges}->{$_}, $_, $output) foreach keys $imaginary_root->{edges}->%*; palindromes($root, "", $output); - say "Input: $_\nOutput: ", wrap("", " ", join ", ", sort {$a cmp $b} $output->@*); + say "Input: $_\nOutput: ", wrap("", " ", + join ", ", sort {length $a <=> length $b or $a cmp $b} $output->@*); } sub add_letter { my $index=shift; @@ -34,13 +35,15 @@ sub add_letter { $current=$current->{suffix} while $index-$current->{size}-1<0 || $letters[$index-$current->{size}-1] ne $letter; - $current=$current->{edges}{$letter}, return if defined $current->{edges}{letter}; - my $suffix=$current; - $current=$current->{edges}->{$letter}={size=>$current->{size}+2, edges=>{}}; + $current=$current->{edges}{$letter}, return + if defined $current->{edges}{$letter}; + my $suffix=$current->{suffix}; + $current=$current->{edges}->{$letter} + ={size=>$current->{size}+2, edges=>{}}; $current->{suffix}=$root, return if $current->{size}==1; - $suffix=$suffix->{suffix} while $letters[$index-$suffix->{size}-1] ne $letter; - $suffix=$suffix->{edges}->{$letter} if $suffix->{size}==-1; - $current->{suffix}=$suffix; + $suffix=$suffix->{suffix} + while $letters[$index-$suffix->{size}-1] ne $letter; + $current->{suffix}=$suffix->{edges}->{$letter}; return; } |
