058 Spiral primes.sf 629 B

123456789101112131415161718192021222324252627282930
  1. #!/usr/bin/ruby
  2. # Author: Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Website: https://github.com/trizen
  5. # What is the side length of the square spiral for which the ratio of primes along both diagonals first falls below 10%?
  6. # https://projecteuler.net/problem=58
  7. # Runtime: 1.439s
  8. var f1 = func(n) { 3 + n*(4*n - 6) }
  9. var f2 = func(n) { 5 + n*(4*n - 8) }
  10. var f3 = func(n) { 7 + n*(4*n - 10) }
  11. var primes = 0
  12. Inf.times { |i|
  13. var total = (4*i + 1)
  14. var side = (2*i + 1)
  15. primes += [f1(i+1), f2(i+1), f3(i+1)].count { .is_prime }
  16. if (side > 7 && (primes/total < 0.1)) {
  17. say side
  18. break
  19. }
  20. }