Skip to content

Instantly share code, notes, and snippets.

@iamkevinlowe
Last active December 30, 2015 17:38
Show Gist options
  • Save iamkevinlowe/23688f2223def21c7ec6 to your computer and use it in GitHub Desktop.
Save iamkevinlowe/23688f2223def21c7ec6 to your computer and use it in GitHub Desktop.
# http://www.codewars.com/kata/54eb33e5bc1a25440d000891/train/ruby
def decompose(n, area = n**2, squares = "", results = [])
if area == 0
results << squares.strip.split(' ').map(&:to_i)
elsif
x = Math.sqrt(area).floor
x -= 1 while x >= n
x.downto(1) do |i|
next if squares.strip.split(' ').map(&:to_i).include? i
decompose(i, area - i**2, "#{i} #{squares}", results)
end
end
results
end
# Solution 2
def decompose(n)
squares = (1..n-1).map { |i| i**2 }.reverse
find_squares(squares, squares.length - 1, n**2,)
end
def find_squares(squares, index, sum, solution = "", results = [])
if sum == 0
results << solution.strip.split(' ').map(&:to_i)
elsif index >= 0 && sum > 0
find_squares(squares, index-1, sum, solution, results)
find_squares(squares, index-1, sum -= squares[index], "#{solution} #{Math.sqrt(squares[index])}", results)
end
results
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment