課題は、次の最小の整数を見つけることfoo
です。
foo % 1..20 == 0
私の現在の試みはブルートフォースです
until foo % 1.upto(20) == 0 do
foo++
end
これはエラーを出力しますunexpected keyword end
。しかし、キーワードを irb に入れないend
と、ブロックが閉じられていないため、コードは実行されません。
エラーがどこにあるのかを確認するために空のテストケースを作成しました
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 では期待どおりに動作しません。