#!/usr/bin/ruby

#
## https://rosettacode.org/wiki/Levenshtein_distance
#

func lev(s,t) {
 
    s == '' && return t.len;
    t == '' && return s.len;
 
    var s1 = s.slice(1);
    var t1 = t.slice(1);
 
    s.first == t.first ? __FUNC__(s1, t1)
                 : 1+[
                        __FUNC__(s1, t1),
                        __FUNC__(s,  t1),
                        __FUNC__(s1, t )
                     ].min;
};

var l = lev("abcz", "aecd");

say l
assert_eq(l, 2)