Петко обнови решението на 19.10.2016 00:03 (преди около 8 години)
+class Hash
+ def fetch_deep(path)
+ keys = path.split('.').map { |x| x =~ /\A\d+\z/ ? x.to_i : x }
+ return_val = keys.reduce(self) { |a, e| a[e] || a[e.to_sym] || {} }
+ return_val == {} ? nil : return_val
+ end
+
+ def reshape(shape)
+ shape.keys.map do |key|
+ if shape[key].class != Hash
+ [key, fetch_deep(shape[key])]
+ else
+ [key, reshape(shape[key])]
+ end
+ end.to_h
+ end
+end
+
+class Array
+ def reshape(shape)
+ map { |x| x.reshape(shape) }
+ end
+end