Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

#!/usr/bin/ruby
#
#
func word_break (str, words) {
gather {
func (str) {
return true if str.is_empty
for word in (words) {
str.begins_with(word) || next
if (__FUNC__(str.substr(word.len))) {
take(word)
return true
}
}
return false
}(str)
}.reverse
}
var words = %w(a o is pi ion par per sip miss able)
var strs = %w(a amiss parable opera operable inoperable permission mississippi)
for str in (strs) {
printf("%11s: %s\n", str, word_break(str, words) || '(not possible)')
}
assert_eq(word_break("inoperable", words), [])
assert_eq(word_break("mississippi", words), ["miss", "is", "sip", "pi"])