From: Phrogz Date: 2007-02-10T06:55:15+09:00 Subject: Re: One-Liners (#113) On Feb 9, 10:00 am, Ruby Quiz wrote: > * Given a wondrous number Integer, produce the sequence (in an Array). A > wondrous number is a number that eventually reaches one, if you apply the > following rules to build a sequence from it. If the current number in the > sequence is even, the next number is that number divided by two. When the > current number is odd, multiply that number by three and add one to get the next > number in the sequence. Therefore, if we start with the wondrous number 15, the > sequence is [15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, > 1]. Here are a few more test cases, both to help others and to be sure that mine is right: def test_wondrous( str ) maps = [ [1, [1]], [3,[3,10,5,16,8,4,2,1]], [5,[5,16,8,4,2,1]], [8,[8,4,2,1]], [15,[15,46,23,70,35,106,53,160,80,40,20,10,5,16,8,4,2,1]], [31, [31,94,47,142,71,214,107,322,161,484,242,121,364,182,91,274,137,412,206,103,310,155,466,233,700,350,175,526,263,790,395,1186,593,1780,890,445,1336,668,334,167,502,251,754,377,1132,566,283,850,425,1276,638,319,958,479,1438,719,2158,1079,3238,1619,4858,2429,7288,3644,1822,911,2734,1367,4102,2051,6154,3077,9232,4616,2308,1154,577,1732,866,433,1300,650,325,976,488,244,122,61,184,92,46,23,70,35,106,53,160,80,40,20,10,5,16,8,4,2,1]] ] raise "Solution too long (#{str.length} characters)" unless str.length <= 80 maps.each{ |pair| quiz = pair[0] expected = pair[1] output = eval( str ) unless expected==output raise "quiz=#{quiz}; expected #{expected.inspect}, got #{output.inspect}" end } end