Last active
December 23, 2015 00:49
-
-
Save LanceH/6556253 to your computer and use it in GitHub Desktop.
One of each item from an array of arrays.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'rake/testtask' | |
Rake::TestTask.new do |t| | |
t.libs << "test" | |
t.test_files = FileList['test*.rb'] | |
t.verbose = true | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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