2013-03-07 6 views
2

Я новичок в программировании и рубине. Я работаю над кодом, который имеет отношение к определенному диофантовому уравнению (из задачи 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

Это, вероятно, следует:

yups_hash = Hash[yups.zip(yups_values)] 

С оговоркой, что я не знаю, что должен случаться, но имя yups_hash означает, что должно быть хэш, а не массив с кучей массивы в нем.

После того, как есть фактический хэш выход для 20:

0 0 1 

Это соответствует определению, по крайней мере.

+0

Это возвращает ошибку: '[] ': нечетное количество аргументов для Hash (ArgumentError). Я пытаюсь сделать хэш из него, сопоставляя значение x с [a, b, c] для каждого значения x, имеющего решение, и для каждого набора из [a, b, c] таких, что они вместе удовлетворяют уравнению для х. Я хочу собрать эту информацию и назвать, какие вариации [a, b, c] решают уравнение для одного и того же значения x. – qrrr

+0

@quiet_engine Какая версия Ruby? Прекрасно работает для меня. –