Podstawy w rubym

0

Czy ktoś mógłby pomóc poprawić mój kod pod względem składni?

theLargestPrimeFactor = 0
tableForFactors = []
count = 0
p = 2
to = 1000

while p < to

  test = true

  for d in 2..p

     if (p % d) == 0

       test = false
       break
     end

  end

  if test
    tableForFactors[count] = p
    count += 1
  end

  p += 1

end


 for i in 0..count

   if (to % tableForFactors[i]) == 0
   theLargestPrimeFactor = tableForFactors[i]
   end

  end
0

Nie znam Ruby'ego, ale formatowanie u ciebie leży, na przykład, podczas pierwszego rzutu okiem na twój kod, myślałem, że ostatni end jest do pętli while. Popraw wcięcia i będzie to znacznie bardziej czytelne. Każde zagłębienie = jedno wcięcie.

while p < 1000

if (1000 % tableForFactors[i]) == 0

Ten 1000 to magic number, takie rzeczy też utrudniają czytanie kodu. Zrób z tego stałą i nazwij ją sensownie.
1

Jeśli chcesz na maksa uprościć ten kod, to proszę:

require 'prime'

num = 1000
num_sqrt = Math::sqrt(num).floor

puts Prime.take_while { |n| n < num_sqrt }.select { |n| num % n == 0 }.last

http://ideone.com/6jN2Fm

Co do twojego kodu:

  • nie używaj for a in 0..count. Ogólnie nie używaj składni for … in …. Zamiast tego używaj Enumerator#each oraz Fixnum#times.
  • używaj snake_case do nazywania zmiennych CamelCase do nazywania klas i UPPER_SNAKE_CASE do nazywania stałych.
  • zapoznaj się z Ruby Style Guide i to stosuj.
1

można jeszcze krócej http://ideone.com/L9oC8b

require 'prime'
num = 1000
puts num.prime_division.max[0]

1 użytkowników online, w tym zalogowanych: 0, gości: 1