挑战在于找到满足以下foo
条件的最小整数:
foo % 1..20 == 0
我目前的尝试是蛮力
until foo % 1.upto(20) == 0 do
foo++
end
这会输出错误unexpected keyword end
。但是,如果我不将end
关键字放入 irb 代码将永远不会运行,因为该块没有关闭。
我做了一个空的测试用例来看看我的错误在哪里
until foo % 1.upto(20) == 0 do
end
这会引发一个新错误:enumerator can't be coerced to a fixnum
. 我想这意味着您不能直接在一个范围内执行模数并期望整个范围内都有一个简洁的布尔结果。但我不知道从这里去哪里。
我的第一次尝试不是蛮力,而是倾向于尝试更有效/优雅/切中要害的东西,如下所示:
foo = 1
1.upto(20) {|bar| foo *= bar unless foo % i == 0}
给出了错误的答案。我不明白为什么,但我也对为什么感兴趣
foo = 1
20.downto(1) {|bar| foo *= bar unless foo % i == 0}
输出不同的答案。
编辑:我会使用 for 循环(我在 ActionScript 中进行编程时弄湿了我的脚),但它们在 ruby 中无法正常工作。