Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
def calculate_mode(nums, time_start) hi_count = 0 mode = nums[0] puts "\ncalculate_mode(nums)" puts "====================" nums.each do | search_for | count = 0 nums.each do |num| if search_for == num count += 1 end $loop_count += 1 end if count > hi_count hi_count = count mode = search_for end end # show results puts "mode => " + mode.to_s + " (it occurs " + hi_count.to_s + " times)" puts "\narray length was " + nums.length.to_s puts "num loops was " + $loop_count.to_s puts "completed in " + (Time.now - time_start).to_s end def calculate_mode_fast(nums, time_start) puts "\ncalculate_mode_fast(nums)" puts "=========================" # sort array first sorted_nums = quicksort(nums) hi_count = 0 mode = nums[0] count = 1 idx = 1 sorted_nums.each do | search_for | $loop_count += 1 if search_for == sorted_nums[idx] count += 1 if count > hi_count hi_count = count mode = search_for end else count = 1 end idx += 1 if idx < sorted_nums.length end # show results puts "mode => " + mode.to_s + " (it occurs " + hi_count.to_s + " times)" puts "\narray length was " + nums.length.to_s puts "num loops was " + $loop_count.to_s puts "completed in " + (Time.now - time_start).to_s end # recursive quick-sort algorithm def quicksort(a) return a if a.size <= 1 pivot = a[0] $loop_count += 1 quicksort(a.select {|i| i < pivot }) + a.select {|i| i == pivot } + quicksort(a.select {|i| i > pivot }) end # set global to count number of loops $loop_count = 0 # generate nums array (of random integers between 0 and 40) max_num = 40 nums = [] (1..1000).each do | idx | nums << (rand max_num) end # start calculating $loop_count = 0 calculate_mode(nums, Time.now) $loop_count = 0 calculate_mode_fast(nums, Time.now)
This paste will be private.
From the Design Piracy series on my blog: