Skip to content

Instantly share code, notes, and snippets.

@LanceH
Last active December 23, 2015 00:49
Show Gist options
  • Save LanceH/6556253 to your computer and use it in GitHub Desktop.
Save LanceH/6556253 to your computer and use it in GitHub Desktop.
One of each item from an array of arrays.
require "./one_of_each"
meats = %w(steak carnitas chicken barbacoa)
beans = %w(no pinto black)
salsas = %w(no mild medium hot nuclear)
guacamoles = [true,false]
rices = [true,false]
sour_creams = [true,false]
cheeses = [true,false]
lettuces = [true,false]
ingredients = [meats, beans, salsas, guacamoles, rices, sour_creams, cheeses, lettuces]
ingredients.one_of_each(ingredients, []) do |i|
p i.join " "
end
BEGIN {
class Array
def one_of_each (lists, elements, &block)
if lists.size == 1
lists[0].each do |item|
elements.push item
yield elements
elements.pop
end
elsif lists.size > 1
list = lists.pop
list.each do |item|
elements.push item
one_of_each(lists, elements, &block)
elements.pop
end
lists.push list
end
end
end
}
beans = %w(no pinto black)
salsas = %w(no mild medium hot nuclear)
guacamoles = [true,false]
rices = [true,false]
sour_creams = [true,false]
cheeses = [true,false]
lettuces = [true,false]
burritos = []
meats.each do |meat|
beans.each do |bean|
salsas.each do |salsa|
guacamoles.each do |guac|
rices.each do |rice|
sour_creams.each do |sour|
cheeses.each do |cheese|
lettuces.each do |lettuce|
burrito = "#{meat} burrito with #{bean} beans"
burrito += rice ? ", rice" : ""
burrito += guac ? ", guacamole" : ""
burrito += sour ? ", sour cream" : ""
burrito += lettuce ? ", lettuce" : ""
burrito += cheese ? ", cheese" : ""
burrito += ", and #{salsa} salsa"
burritos.push burrito
end
end
end
end
end
end
end
end
puts burritos
puts burritos.count
require 'rake/testtask'
Rake::TestTask.new do |t|
t.libs << "test"
t.test_files = FileList['test*.rb']
t.verbose = true
end
require "./one_of_each"
require "test/unit"
class TestOneOfEach < Test::Unit::TestCase
def setup
beans = %w(no pinto black)
salsas = %w(no mild medium hot nuclear)
guacamoles = [true,false]
rices = [true,false]
sour_creams = [true,false]
cheeses = [true,false]
lettuces = [true,false]
@burritos = []
end
def teardown
## Nothing really
end
def test_simple
assert_equal(4, 4)
end
def test_simple2
assert_equal(4, 4)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment