Ruby和Diophantine方程 - 哈希问题

时间:2013-03-07 20:05:06

标签: ruby hash diophantine

我是编程和ruby的新手。我正在研究处理特定Diophantine方程的代码(来自MIT opencourseware问题),并且只是看看我能用它做些什么。

对于具有三个变量的特定线性方程,代码生成三个数组和两个散列。

以下是代码:

def diophantine_solutions(x)
  #For all x > 1, finds values for a, b, c such that 6a + 9b + 20c = x,
  #Creates array of solvable x, unsolvable x, 
  #Creates hash of solvable x with possible values of a, b, c

  nopes=(1..x).to_a #will contain sums with no solutions at the end
  yups=[] #has solvalbes
  yups_values=[] #solutions for a, b, c
  yups_hash={} #sums with the solutions

  while x>0
    for a in (0..x/6):
      for b in (0..x/9):
        for c in (0..x/20):
          total=6*a + 9*b + 20*c
          if total==x
            yups<< x
            yups_values<< [a, b, c]
          end          
        end
      end
    end
    x=x-1
  end

  yups_hash=[yups.zip(yups_values)]
  yups=yups.uniq
  nopes=nopes-yups
  puts yups_hash[20]
end

diophantine_solutions(20)

我现在要做的是访问各个哈希配对,以确保它们排成一行,但是

puts yups_hash[] 

为任何数字返回nil。有帮助吗?另外,像我一样新的,如果有更好的方法可以做我做过的任何事情,如果你让我知道,我会很感激。

1 个答案:

答案 0 :(得分:1)

应该是:

yups_hash = Hash[yups.zip(yups_values)]

有一点需要注意,我不知道假设会发生什么,但是yups_hash名称意味着它应该是一个哈希,而不是一个包含一堆数组的数组。

一旦有实际的哈希,20的输出是:

0 0 1

这至少符合定义。