Решение на Втора задача - хешове, масиви и структура от Петър Нетовски

Обратно към всички решения

Към профила на Петър Нетовски

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 14 успешни тест(а)
  • 1 неуспешни тест(а)

Код

class Hash
def get_value(possible_key)
return self[possible_key] if self[possible_key]
symbolic_key = possible_key.to_sym
return self[symbolic_key] if self[symbolic_key]
integer_key = possible_key.to_i
return self[integer_key] if self[integer_key]
end
def fetch_deep(hash_path)
keys = hash_path.split '.'
keys.reduce(self) do |value, key|
return nil if value.nil?
(value.is_a? Array) ? value[key.to_i] : value.get_value(key)
end
end
def reshape(shape)
new_shape = shape.map do |key, value|
(value.is_a? Hash) ? [key, reshape(value)] : [key, fetch_deep(value)]
end.to_h
replace new_shape
new_shape
end
end
class Array
def reshape(shape)
each { |element| element.reshape(shape) }
end
end

Лог от изпълнението

.............F.

Failures:

  1) Task 2 Hash#reshape does not modify the input hash
     Failure/Error: expect(input).to eq menu: {
       
       expected: {:menu=>{:order=>"cake", "dessert"=>"ice cream", 3=>4}}
            got: {:order=>"cake", :dessert=>"ice cream"}
       
       (compared using ==)
       
       Diff:
       @@ -1,2 +1,3 @@
       -:menu => {:order=>"cake", "dessert"=>"ice cream", 3=>4}
       +:dessert => "ice cream",
       +:order => "cake"
     # /tmp/d20161024-13689-1ka6ftk/spec.rb:196:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:7:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:7:in `block (2 levels) in <top (required)>'

Finished in 0.00887 seconds
15 examples, 1 failure

Failed examples:

rspec /tmp/d20161024-13689-1ka6ftk/spec.rb:180 # Task 2 Hash#reshape does not modify the input hash

История (1 версия и 0 коментара)

Петър обнови решението на 23.10.2016 21:56 (преди над 7 години)

+class Hash
+ def get_value(possible_key)
+ return self[possible_key] if self[possible_key]
+
+ symbolic_key = possible_key.to_sym
+ return self[symbolic_key] if self[symbolic_key]
+
+ integer_key = possible_key.to_i
+ return self[integer_key] if self[integer_key]
+ end
+
+ def fetch_deep(hash_path)
+ keys = hash_path.split '.'
+
+ keys.reduce(self) do |value, key|
+ return nil if value.nil?
+ (value.is_a? Array) ? value[key.to_i] : value.get_value(key)
+ end
+ end
+
+ def reshape(shape)
+ new_shape = shape.map do |key, value|
+ (value.is_a? Hash) ? [key, reshape(value)] : [key, fetch_deep(value)]
+ end.to_h
+
+ replace new_shape
+
+ new_shape
+ end
+end
+
+class Array
+ def reshape(shape)
+ each { |element| element.reshape(shape) }
+ end
+end