levenshtein_distance_iter.sf 455 B

123456789101112131415161718192021
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Levenshtein_distance
  4. #
  5. func lev(s, t) {
  6. var d = [@(0 .. t.len), s.len.of {[_]}...]
  7. for i,j in (^s ~X ^t) {
  8. d[i+1][j+1] = (
  9. s[i] == t[j]
  10. ? d[i][j]
  11. : 1+Math.min(d[i][j+1], d[i+1][j], d[i][j])
  12. )
  13. }
  14. d[-1][-1]
  15. }
  16. say lev(%c'kitten', %c'sitting'); # prints: 3
  17. say lev(%c'rosettacode', %c'raisethysword'); # prints: 8