This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
Getting the n Smallest Items of an Array | ||
---|---|---|
Code | Expected | Actual |
[3, 5, 11, 16].min |
3 | 3 |
["three", "five", "eleven", "sixteen"].min |
"eleven" | "eleven" |
["three", "five", "eleven", "sixteen"].min { |x,y| x.size <=> y.size } |
"five" | "five" |
[3, 5, 11, 16].max |
16 | 16 |
["three", "five", "eleven", "sixteen"].max |
"three" | "three" |
["three", "five", "eleven", "sixteen"].max { |x,y| x.size <=> y.size } |
"sixteen" | "sixteen" |
l = [1, 60, 21, 100, -5, 20, 60, 22, 85, 91, 4, 66] sorted = l.sort #The top 5 sorted[-5...sorted.size] |
[60, 66, 85, 91, 100] | [60, 66, 85, 91, 100] |
#The bottom 5 sorted[0...5] |
[-5, 1, 4, 20, 21] | [-5, 1, 4, 20, 21] |
require 'sortedarray' module Enumerable def min_n(n, &block) block ||= proc { |x,y| x <=> y } stable = SortedArray.new(&block) each do |x| stable << x if stable.size < n or block.call(x, stable[-1]) == -1 stable.pop until stable.size <= n end return stable end def max_n(n, &block) block ||= proc { |x,y| x <=> y } stable = SortedArray.new(&block) each do |x| stable << x if stable.size < n or block.call(x, stable[0]) == 1 stable.shift until stable.size <= n end return stable end end l = [1, 60, 21, 100, -5, 20, 60, 22, 85, 91, 4, 66] l.max_n(5) |
[60, 66, 85, 91, 100] |
Error! (Exception?) Here's stdout: LoadError: no such file to load -- sortedarray from (irb):13:in `require' from (irb):13 NameError: uninitialized constant Enumerable::SortedArray from (irb):26:in `max_n' from (irb):35 |
l.min_n(5) |
[-5, 1, 4, 20, 21] |
Error! (Exception?) Here's stdout: NameError: uninitialized constant Enumerable::SortedArray from (irb):17:in `min_n' from (irb):36 |
l.min_n(5) { |x,y| x.abs <=> y.abs } |
[1, 4, -5, 20, 21] |
Error! (Exception?) Here's stdout: NameError: uninitialized constant Enumerable::SortedArray from (irb):17:in `min_n' from (irb):37 |