Я изучаю Ruby, беру MOK Беркли, и в некоторых из этих домашних заданий MOOC у нас есть упражнение, в котором говорится:
Определить метод sum_to_n? который принимает массив целых чисел и дополнительное целое число, n, как аргументы и возвращает true, если любые два элементы в массиве целых чисел суммируются с n. Пустой массив должен суммировать к нулю по определению.
Я уже создал два метода, которые могут выполнять эту работу, но мне не нравится ни один из них, потому что я думаю, что они не написаны на Ruby Way. Я надеюсь, что некоторые из вас помогут мне узнать, что будет правильным!
Первый метод, который я использовал, использует метод each
для обеих итераций, но то, что мне не нравится в этом методе, состоит в том, что каждое число суммируется с любым другим числом, даже с тем же числом, что-то вроде этого:
arr[1, 2, 3, 4] => 1+1, 1+2, 1+3, 1+4, 2+1, 2+2, 2+3, 2+4, 3+1, 3+2... 4+3, 4+4
Как вы можете видеть, много повторных сумм, и я не хочу этого.
Это код:
def sum_to_n?(arr, n)
arr.each {|x| arr.each {|y| return true if x + y == n && x != y}}
return true if n == 0 && arr.length == 0
return false
end
С помощью другого метода я получил то, что хотел, всего несколько сумм, не повторяя ни одного из них или даже суммируя одинаковые числа, но он выглядит УЖАСНЫМ, и я уверен, что кто-то захочет убить меня за это но метод делает отличную работу, как вы можете видеть:
arr[1, 2, 3, 4] => 1+2, 1+3, 1+4, 2+3, 2+4, 3+4
Это код:
def sum_to_n?(arr, n)
for i in 0..arr.length - 1
k = i + 1
for k in k..arr.length - 1
sum = arr[i] + arr[k]
if sum == n
return true
end
end
end
return true if n == 0 && arr.length == 0
return false
end
Хорошо, надеюсь, вы, ребята, повеселитесь, делая лучший и красивый метод, как я пытался.
Благодарим вас за помощь.