diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-11-17 18:05:08 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-11-17 18:05:08 -0600 |
commit | 349bad0b288ee30dd15170bca19be266b0b1df55 (patch) | |
tree | 04e559163b0e3e447dd5147ce5a983cebabd16ea /EDIT.pl | |
parent | 56e59b92a9170f87083f3a6f6c9ba02092cbfbc1 (diff) | |
download | rosalind-349bad0b288ee30dd15170bca19be266b0b1df55.tar.gz rosalind-349bad0b288ee30dd15170bca19be266b0b1df55.zip |
another solution
Diffstat (limited to 'EDIT.pl')
-rw-r--r-- | EDIT.pl | 27 |
1 files changed, 27 insertions, 0 deletions
@@ -0,0 +1,27 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.016; + +use List::Util 'min'; +use Memoize; + +chomp(my $str1 = <>); +chomp(my $str2 = <>); + +say distance($str1, $str2); + +sub distance { + my ($str1, $str2) = @_; + + return length($str2) if !length($str1); + return length($str1) if !length($str2); + + return min( + distance(substr($str1, 1), $str2) + 1, + distance($str1, substr($str2, 1)) + 1, + distance(substr($str1, 1), substr($str2, 1)) + + (substr($str1, 0, 1) eq substr($str2, 0, 1) ? 0 : 1) + ); +} +BEGIN { memoize('distance') }; |