diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-02-16 19:13:54 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-16 19:13:54 +0000 |
| commit | 11484ca2b26fd79019f37e2a9f53cd0eff2a9f0f (patch) | |
| tree | c6e0fcbed9cb1fcc46b0019f4c6732e0d2f66ee6 | |
| parent | 21e60474fc0c9a38f930a493a0d9ce0c17fd288f (diff) | |
| parent | f20e360a06c231aaf9a9730dc720c232c274f9ed (diff) | |
| download | perlweeklychallenge-club-11484ca2b26fd79019f37e2a9f53cd0eff2a9f0f.tar.gz perlweeklychallenge-club-11484ca2b26fd79019f37e2a9f53cd0eff2a9f0f.tar.bz2 perlweeklychallenge-club-11484ca2b26fd79019f37e2a9f53cd0eff2a9f0f.zip | |
Merge pull request #3546 from jaldhar/challenge-096
Challenge 96 by Jaldhar H. Vyas
| -rw-r--r-- | challenge-096/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-096/jaldhar-h-vyas/perl/ch-1.sh | 1 | ||||
| -rwxr-xr-x | challenge-096/jaldhar-h-vyas/perl/ch-2.pl | 52 | ||||
| -rwxr-xr-x | challenge-096/jaldhar-h-vyas/raku/ch-1.sh | 1 | ||||
| -rwxr-xr-x | challenge-096/jaldhar-h-vyas/raku/ch-2.raku | 34 |
5 files changed, 89 insertions, 0 deletions
diff --git a/challenge-096/jaldhar-h-vyas/blog.txt b/challenge-096/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..c87e41fff8 --- /dev/null +++ b/challenge-096/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2021/02/perl_weekly_challenge_week_96.html diff --git a/challenge-096/jaldhar-h-vyas/perl/ch-1.sh b/challenge-096/jaldhar-h-vyas/perl/ch-1.sh new file mode 100755 index 0000000000..5beec9b643 --- /dev/null +++ b/challenge-096/jaldhar-h-vyas/perl/ch-1.sh @@ -0,0 +1 @@ +perl -E 'say join q{ }, (reverse @ARGV);' $@
\ No newline at end of file diff --git a/challenge-096/jaldhar-h-vyas/perl/ch-2.pl b/challenge-096/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..3114d70648 --- /dev/null +++ b/challenge-096/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,52 @@ +#!/usr/bin/perl +use 5.020; +use warnings; +use English qw/ -no_match_vara /; + +sub usage { + print<<"-USAGE-"; +Usage: + $PROGRAM_NAME <from> <to> + + <from> string to convert from + <to> string to convert to +-USAGE- + exit 0; +} + +sub min { + return (sort { $a <=> $b } @_)[0]; +} + +sub levenshtein { + my ($from, $to) = @_; + my $fromLength = length $from; + my $toLength = length $to; + + if ($toLength == 0) { + return $fromLength; + } + + if ($fromLength == 0) { + return $toLength; + } + + my $fromTail = substr($from, 1, $fromLength - 1); + my $toTail = substr($to, 1, $toLength - 1); + + if (substr($from, 0, 1) eq substr($to, 0, 1)) { + return levenshtein($fromTail, $toTail); + } + + return 1 + min( + levenshtein($from, $toTail), # Insert + levenshtein($fromTail, $to), # Remove + levenshtein($fromTail, $toTail) # Replace + ); +} + +if (scalar @ARGV < 2) { + usage(); +} + +say levenshtein($ARGV[0], $ARGV[1]); diff --git a/challenge-096/jaldhar-h-vyas/raku/ch-1.sh b/challenge-096/jaldhar-h-vyas/raku/ch-1.sh new file mode 100755 index 0000000000..9c33ad4bd2 --- /dev/null +++ b/challenge-096/jaldhar-h-vyas/raku/ch-1.sh @@ -0,0 +1 @@ +raku -e '@*ARGS.reverse.join(q{ }).say;' $@
\ No newline at end of file diff --git a/challenge-096/jaldhar-h-vyas/raku/ch-2.raku b/challenge-096/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..33b152b7c6 --- /dev/null +++ b/challenge-096/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,34 @@ +#!/usr/bin/raku + +sub levenshtein(Str $from, Str $to) { + my $fromLength = $from.chars; + my $toLength = $to.chars; + + if $toLength == 0 { + return $fromLength; + } + + if $fromLength == 0 { + return $toLength; + } + + my $fromTail = $from.substr(1, $fromLength - 1); + my $toTail = $to.substr(1, $toLength - 1); + + if $from.substr(0, 1) eq $to.substr(0, 1) { + return levenshtein($fromTail, $toTail); + } + + return 1 + ( + levenshtein($from, $toTail), # Insert + levenshtein($fromTail, $to), # Remove + levenshtein($fromTail, $toTail) # Replace + ).min; +} + +sub MAIN( + Str $S1, #= string to convert from + Str $S2, #= string to convert to +) { + say levenshtein($S1, $S2); +}
\ No newline at end of file |
