Last active
January 1, 2016 21:29
-
-
Save chischaschos/8203496 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'ruby-prof' | |
def prime(n) | |
limit = n | |
numbers = Array.new(n + 1) { true } | |
start = 2 | |
primes = [] | |
loop do | |
numbers[start] && primes << start | |
cross_multiples start, numbers | |
start = next_bigger_than start, numbers | |
start > limit && break | |
end | |
primes | |
end | |
def cross_multiples number, numbers | |
next_to_cross = number + number | |
loop do | |
numbers[next_to_cross].nil? && break | |
numbers[next_to_cross] && numbers[next_to_cross] = false | |
next_to_cross += number | |
end | |
end | |
def next_bigger_than number, numbers | |
increment = 1 | |
next_bigger = number + increment | |
loop do | |
if numbers[next_bigger] || numbers[next_bigger].nil? | |
break | |
else | |
next_bigger += 1 | |
end | |
end | |
next_bigger | |
end | |
RubyProf.start | |
p prime 1_000_000 | |
result = RubyProf.stop | |
printer = RubyProf::FlatPrinter.new result | |
printer.print STDOUT |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
➜ katas ruby primes.rb | |
Thread ID: 70312662476500 | |
Fiber ID: 70312668298920 | |
Total: 16.014233 | |
Sort by: self_time | |
%self total self wait child calls name | |
16.57 2.654 2.654 0.000 0.000 3696711 Kernel#nil? | |
3.88 0.621 0.621 0.000 0.000 1 Array#initialize | |
3.44 0.550 0.550 0.000 0.000 921501 Array#[]= | |
3.12 15.393 0.500 0.000 14.893 156997 *Kernel#loop | |
2.68 4.218 0.429 0.000 3.789 78498 Object#next_bigger_than | |
1.86 10.675 0.298 0.000 10.377 78498 Object#cross_multiples | |
0.60 0.097 0.097 0.000 0.000 78499 NilClass#nil? | |
0.00 16.014 0.000 0.000 16.014 1 Global#[No method] | |
0.00 16.014 0.000 0.000 16.014 1 Object#prime | |
0.00 0.621 0.000 0.000 0.621 1 Class#new | |
* indicates recursively called methods |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment