module PerformanceCheck
class << self
ITERATIONS = 2
def time_it
start_time = Time.now
yield
Time.now - start_time
end
def without_optimization
(1...1_000_000).select do |n|
n.to_s == n.to_s.reverse && n.to_s(2) == n.to_s(2).reverse
end.reduce(0, :+)
end
def with_optimization
(1...1_000_000).select do |n|
base10 = n.to_s
base2 = n.to_s(2)
base10 == base10.reverse && base2 == base2.reverse
end.reduce(0, :+)
end
def profile_optimization
result = without_optimization
duration = time_it do
ITERATIONS.times { without_optimization }
end
puts "Without optimization took #{duration/ITERATIONS}s per iteration to return #{result}"
result = with_optimization
duration = time_it do
ITERATIONS.times { with_optimization }
end
puts "With optimization took #{duration/ITERATIONS}s per iteration to return #{result}"
end
end
end
PerformanceCheck.profile_optimization
bW9kdWxlIFBlcmZvcm1hbmNlQ2hlY2sKICBjbGFzcyA8PCBzZWxmCiAgICBJVEVSQVRJT05TID0gMgoKICAgIGRlZiB0aW1lX2l0CiAgICAgIHN0YXJ0X3RpbWUgPSBUaW1lLm5vdwogICAgICB5aWVsZAogICAgICBUaW1lLm5vdyAtIHN0YXJ0X3RpbWUKICAgIGVuZAoKICAgIGRlZiB3aXRob3V0X29wdGltaXphdGlvbgogICAgICAoMS4uLjFfMDAwXzAwMCkuc2VsZWN0IGRvIHxufAogICAgICAgIG4udG9fcyA9PSBuLnRvX3MucmV2ZXJzZSAmJiBuLnRvX3MoMikgPT0gbi50b19zKDIpLnJldmVyc2UKICAgICAgZW5kLnJlZHVjZSgwLCA6KykKICAgIGVuZAoKICAgIGRlZiB3aXRoX29wdGltaXphdGlvbgogICAgICAoMS4uLjFfMDAwXzAwMCkuc2VsZWN0IGRvIHxufAogICAgICAgIGJhc2UxMCA9IG4udG9fcwogICAgICAgIGJhc2UyICA9IG4udG9fcygyKQogICAgICAgIGJhc2UxMCA9PSBiYXNlMTAucmV2ZXJzZSAmJiBiYXNlMiA9PSBiYXNlMi5yZXZlcnNlCiAgICAgIGVuZC5yZWR1Y2UoMCwgOispCiAgICBlbmQKCiAgICBkZWYgcHJvZmlsZV9vcHRpbWl6YXRpb24KICAgICAgcmVzdWx0ID0gd2l0aG91dF9vcHRpbWl6YXRpb24KICAgICAgZHVyYXRpb24gPSB0aW1lX2l0IGRvCiAgICAgICAgSVRFUkFUSU9OUy50aW1lcyB7IHdpdGhvdXRfb3B0aW1pemF0aW9uIH0KICAgICAgZW5kCiAgICAgIHB1dHMgIldpdGhvdXQgb3B0aW1pemF0aW9uIHRvb2sgI3tkdXJhdGlvbi9JVEVSQVRJT05TfXMgcGVyIGl0ZXJhdGlvbiB0byByZXR1cm4gI3tyZXN1bHR9IgoKICAgICAgcmVzdWx0ID0gd2l0aF9vcHRpbWl6YXRpb24KICAgICAgZHVyYXRpb24gPSB0aW1lX2l0IGRvCiAgICAgICAgSVRFUkFUSU9OUy50aW1lcyB7IHdpdGhfb3B0aW1pemF0aW9uIH0KICAgICAgZW5kCiAgICAgIHB1dHMgIldpdGggb3B0aW1pemF0aW9uIHRvb2sgI3tkdXJhdGlvbi9JVEVSQVRJT05TfXMgcGVyIGl0ZXJhdGlvbiB0byByZXR1cm4gI3tyZXN1bHR9IgoKICAgIGVuZAogIGVuZAplbmQKClBlcmZvcm1hbmNlQ2hlY2sucHJvZmlsZV9vcHRpbWl6YXRpb24=