-1

私はこの謎の解決策を求めていません。

それで、私はRubyを使用してプロジェクトオイラーの問題に取り組んでいます。

次の方法で回文チェッカーを作成しました。

def is_palindrome(n)
  if n.to_s == n.to_s.reverse
      true
  else
      false
  end
end

これを使用して、次の方法を使用して、2つの3桁の数字で作成された最大の回文を見つけようとします。

x = 999
y = 998

while y > 100
  if is_palindrome(x * y) == true
    puts (x * y)
  else
    x-=1
    y-=1
  end
end

その結果、端末は完全にフィットし、289982でスタックし、停止するにはCtrl+Cを押す必要があります。

私が言ったように、私はこの謎の解決策を探していませんが、これを実現するために私のコードが何をしているのか知りたいです。私はまだ学んでいるので、私のコードはかなり醜い可能性が高いので、余分なカルマはこれを手伝ってくれる人を指しています。

4

4 に答える 4

4

回文が見つかった場合、変数をデクリメントしません。変数は同じままなので、同じ回文が再び見つかります。そして、それは行きます...

于 2012-12-06T00:37:29.363 に答える
4

アマダンはあなたの問題を解決したので、私は余分なカルマポイントに行きます:)

まず、if somethingの代わりに行うことができますif something == true

また、あなたはする必要はありません

if something == something_else
  true
else
  false
end

==演算子がいずれかtrueまたはfalseすでに返すため、メソッドは次のis_palindromeように単純になる可能性があります。

def is_palindrome(n)
  n.to_s == n.to_s.reverse
end

また、Rubyでは、通常、このようなメソッド(ブールチェック)の最後に疑問符が付いた名前が表示されます。これは、イエス/ノーの質問をしているようなものだからです。したがって、通常は、と呼ばれるものが表示されis_palindrome?(n)ます。他の場所で見られるかもしれない同様のものはArray#empty?Hash#has_key?(k)です。

于 2012-12-06T00:51:34.030 に答える
2

あなたの質問には答えませんが、ブール値の使用は恐ろしいものです。ブール式はブール自体を返すことを忘れないでください。別の比較は必要ありません。すなわち

def is_palindrome(n)
  if n.to_s == n.to_s.reverse
      true
  else
      false
  end
end

する必要があります:

def is_palindrome(n)
  n.to_s == n.to_s.reverse
end

while y > 100
  if is_palindrome(x * y) == true

する必要があります

while y > 100
  if is_palindrome(x * y)
于 2012-12-06T00:52:01.003 に答える
1

これが私の解決策です:

# Find largest palindrome made from the product of two 3-digit numbers

largest = 0
for i in 100..999
  for j in i..999
    product = j*i
    # Check for palindrome and determine largest
    largest = product.to_s == product.to_s.reverse && product > largest ? product : largest
  end
end
p largest
于 2013-03-28T14:33:37.420 に答える