summaryrefslogtreecommitdiffstats
path: root/EDIT.pl
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-11-17 18:05:08 -0600
committerJesse Luehrs <doy@tozt.net>2012-11-17 18:05:08 -0600
commit349bad0b288ee30dd15170bca19be266b0b1df55 (patch)
tree04e559163b0e3e447dd5147ce5a983cebabd16ea /EDIT.pl
parent56e59b92a9170f87083f3a6f6c9ba02092cbfbc1 (diff)
downloadrosalind-349bad0b288ee30dd15170bca19be266b0b1df55.tar.gz
rosalind-349bad0b288ee30dd15170bca19be266b0b1df55.zip
another solution
Diffstat (limited to 'EDIT.pl')
-rw-r--r--EDIT.pl27
1 files changed, 27 insertions, 0 deletions
diff --git a/EDIT.pl b/EDIT.pl
new file mode 100644
index 0000000..5e84e00
--- /dev/null
+++ b/EDIT.pl
@@ -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') };