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.
Computing Set Operations on Arrays | ||
---|---|---|
Code | Expected | Actual |
#Union [1,2,3] | [1,4,5] |
[1, 2, 3, 4, 5] | [1, 2, 3, 4, 5] |
#Intersection [1,2,3] & [1,4,5] |
[1] | [1] |
#Difference [1,2,3] - [1,4,5] |
[2, 3] | [2, 3] |
require 'set' a = [1,2,3] b = [3,4,5] a.to_set ^ b.to_set |
#<Set: {5, 1, 2, 4}> | #<Set: {5, 1, 2, 4}> |
(a | b) - (a & b) |
[1, 2, 4, 5] | [1, 2, 4, 5] |
array = [1,2,3] set = [3,4,5].to_set set & array |
#<Set: {3}> | #<Set: {3}> |
array & set |
TypeError: cannot convert Set into Array |
Error! (Exception?) Here's stdout: TypeError: can't convert Set into Array from (irb):15:in `&' from (irb):15 |
[3,3] & [3,3] |
[3] | [3] |
[3,3] | [3,3] |
[3] | [3] |
[1,2,3,3] - [1] |
[2, 3, 3] | [2, 3, 3] |
[1,2,3,3] - [3] |
[1, 2] | [1, 2] |
[1,2,3,3] - [2,2,3] |
[1] | [1] |
u = [:red, :orange, :yellow, :green, :blue, :indigo, :violet] a = [:red, :blue] u - a |
[:orange, :yellow, :green, :indigo, :violet] | [:orange, :yellow, :green, :indigo, :violet] |
def natural_numbers_except(exclude) exclude_map = {} exclude.each { |x| exclude_map[x] = true } x = 1 while true yield x unless exclude_map[x] x = x.succ end end natural_numbers_except([2,3,6,7]) do |x| break if x > 10 puts x end |
1 4 5 8 9 10 |
1 4 5 8 9 10 |
module Enumerable def cartesian(other) res = [] each { |x| other.each { |y| res << [x, y] } } return res end end [1,2,3].cartesian(['a',5,6]) |
[[1, "a"], [1, 5], [1, 6], | [[1, "a"], [1, 5], [1, 6], [2, "a"], [2, 5], [2, 6], [3, "a"], [3, 5], [3, 6]] |
module Enumerable def cartesian(other) inject([]) { |res, x| other.inject(res) { |res, y| res << [x,y] } } end end |
nil |