From: Devin Mullins Date: 2007-02-02T15:03:17+09:00 Subject: Re: halving a string Naive solution: class String def halve(max_len=nil) raise if max_len and size > max_len * 2 + 1 space_indices = (0...size).find_all {|i| self[i] == ' '[0] } splitter = space_indices.sort_by {|i| (i - size/2).abs }.first if splitter.nil? || (max_len && (splitter > max_len || size - splitter - 1 > max_len)) [self[0...size/2], self[size/2..-1]] else [self[0...splitter], self[splitter+1..-1]] end end end if __FILE__ == $0 require 'test/unit' class SplitterTest < Test::Unit::TestCase def test_stuff assert_equal ['the frog', 'is green'], 'the frog is green'.halve assert_equal ['ponchielli', 'wrote songs'], 'ponchielli wrote songs'.halve assert_raise(RuntimeError) { 'ab d'.halve 1 } assert_nothing_raised { 'a b'.halve 1 } assert_equal ['lizardman', 'lives'], 'lizardman lives'.halve assert_equal ['lizardm', 'an lives'], 'lizardman lives'.halve(8) assert_equal ['abcdef','ghijkl'], 'abcdefghijkl'.halve end end end