Второ предизвикателство

  1. Аз искам само да попитам дали има ограничение в дължината на реда? В решенията от предното предизвикателство видях, че имаше решения с редове по-дълги от 80 символа.Примерно:

    require 'matrix'

    def zig_zag(n) matrix = Matrix.build(n) { |row, col| row.even? ? col + n * row + 1 : n * (row + 1) - col }.to_a end

  2. @Ники - супер, че качваш тестове. Според мен е много добра идея да споделяме тестове, защото примерно на задачите въобще не се сетих да тествам за prime? когато масива съдържа nil някъде по средата и съответно съм fail-нал този тест. Може би заедно ще може повече ситуации да обхванем.

  3. Верни са, 3ти, 5ти и 6ти са с разместени елементи, но това едва ли е проблем. :) При мен:

    p homogenize([1, :a, 2, :b, 3, :c])# => [[1, 2, 3], [:a, :b, :c]]
    p homogenize([:a, "Jimi", "Kurt", :b])# => [[:a, :b], ["Jimi", "Kurt"]]
    p homogenize([:a, "Kurt", :b])# => [[:a, :b], ["Kurt"]]
    p homogenize([:a,32,:b,3,"gosho"])# => [[:a, :b], [32, 3], ["gosho"]]
    p homogenize([[],{},Hash.new(0),3,'gosho'])# => [[[]], [{}, {}], [3], ["gosho"]]
    p homogenize([1.3,1/3r,:b,3,Array.new])# => [[1.3], [(1/3)], [:b], [3], [[]]]
    p homogenize([])# => []
    p homogenize([nil,[nil]])# => [[nil], [[nil]]]
    p homogenize([NilClass,Array]) # => [[NilClass, Array]]
    

  4. Не разбирам, къде е проблема при мен. Решението ми е подобно, като на мнозинството, само съм добавил flatten, за да ми изглади масива, ако подам многомерен масив.

    Ето ми кода:

    
    def homogenize(array)
      array.flatten.group_by { |element| element.class }.values
    end
    

    Ето и грешката:

    
      1) homogenize returns array of homogeneous arrays
         Failure/Error: [anonymous_nil]]
           expected collection contained:  [[5, 6], [:a, :b], [[1, 2], [3, 4]], [#]]
           actual collection contained:    [[1, 2, 3, 4, 5, 6], [:a, :b], [#]]
           the missing elements were:      [[5, 6], [[1, 2], [3, 4]]]
           the extra elements were:        [[1, 2, 3, 4, 5, 6]]
         # /tmp/d20131019-16294-17dvgw4/spec.rb:16:in `block (2 levels) in '
         # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in '
         # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in '
    

    Мерси : ))

    Edit: Разбрах си грешката. Изобщо не е имало нужда от flatten, за да може да има елемент, който съдържа вътрешните масивите от входящия :).

Трябва да сте влезли в системата, за да може да отговаряте на теми.