#!/usr/bin/ruby # ## https://rosettacode.org/wiki/Longest_Common_Substring # func createSubstrings(String word) -> Array { gather { combinations(word.len+1, 2, {|i,j| take(word.substr(i, j-i)) }) } } func findLongestCommon(String first, String second) -> String { createSubstrings(first) & createSubstrings(second) -> max_by { .len } } var substr = findLongestCommon("thisisatest", "testing123testing") say substr assert_eq(substr, "test")