From: Bruno Michel Date: 2007-02-13T17:59:33+09:00 Subject: [QUIZ] #113 One-liners Hi, this is my solution. I found the first one-liner hard, and I'm not satisfied with my solution for it (it doesn't work for negative numbers for example). But, I think the others are not bad. #################### # Expected: "1,999,995.99" quiz = 1999995.99 a=quiz.to_s.split'.';r=a[0].reverse.gsub(/\d{3}\B/, '\0,').reverse+".#{a[1]}" puts r #################### # Expected: [1, 2, [3]] quiz = [1, [2, [3]]] r = []; quiz.each{|e| [*e].each {|x| r << x}}; r puts r.inspect #################### # Expected: a shuffled array quiz = [1, 2, 3, 4, 5] r = quiz.sort_by{rand} puts r.inspect #################### # Expected: the actual class object module GhostWheel; module Expression; class LookAhead; end; end; end quiz = "GhostWheel::Expression::LookAhead" r = quiz.split(/::/).inject(Kernel){|t,k| t.const_get(k)} puts r #################### # Expected: "aaaaaaaaaaaaaaaaaaaa" # "bbbbbbbbbbbbbbbbbbbb cccccccccccccccccc" # "dddddddddddddddddddd" quiz = "a" * 20 + " " + "b" * 20 + " " + "c" * 18 + " " + "d" * 20 r = quiz.gsub(/(.{1,40}) /, "\\1\n") puts r #################### # Expected: ["foo", "oof", "ofo"] quiz = %w[foo bar baz oof foobar ofo] $; = //; f = quiz[0].split.sort; r = quiz.select{|e| e.split.sort == f} puts r $; = nil #################### # Expected: "111100111011111110101" # "110000111100101100101" # "1100100111010111011011100010" quiz = "You are dumb" r = quiz.gsub(/./) {|c| (c == ' ') ? "\n" : ("%08b" % c[0])} puts r #################### # Expected: a random line from the this File File.open(__FILE__, "r") do |quiz| a = quiz.read.split("\n"); r = a[rand(a.size)] end puts r #################### # Expected: [15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1] quiz = 15 r = [quiz]; while ((e = r.last) != 1) do r<<((e%2==0)?e/2:3*e+1) end; r puts r.inspect #################### # Expected: {"one" => {"two" => {"three" => {"four" => "five"}}}} quiz = %w[one two three four five] r = quiz.reverse.inject{|h,v| {v=>h}} puts r.inspect -- Bruno Michel