-
-
Save carolineartz/6f2cb25cbbd961022a46 to your computer and use it in GitHub Desktop.
for DBC Phase 0 coaching
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
# Requirements | |
# | |
# Create a new list | |
# Add an item with a quantity to the list | |
# Remove an item from the list | |
# Update quantities for items in your list | |
# Print the list (Consider how to make it look nice!) | |
# Pseudocode | |
# | |
# DEFINE 'new_list' which takes no arguments: | |
# CREATE and RETURN an empty hash | |
# | |
# DEFINE 'add', which takes three arguments, item (a string) and quantity (a string), and list (a hash): | |
# IF item is on list | |
# PRINT message that item is already on list | |
# ELSE | |
# ADD key item to list with value qantity | |
# | |
# DEFINE 'remove', which takes two arguments, an item (string), and a list (hash): | |
# IF item is on list | |
# DELETE the element of list with key of item | |
# ELSE | |
# PRINT message that item isn't actually on the list | |
# | |
# DEFINE 'update', which takes three arguments, an item (string), a quantity (a string) and a list(hash): | |
# IF item is on list | |
# SET list at item's value to quantity | |
# ELSE | |
# PRINT message that the item isn't there to update | |
# | |
# DEFINE print_list, which takes one argument, a list (hash) | |
# ITERATE over each element of list, for each item, quantity | |
# PRINT item in uppercase, hyphen, quantity | |
# Initial solution | |
# | |
def new_list | |
Hash.new | |
end | |
def add(item, quantity, list) | |
if list[item] | |
puts "#{item.upcase} is already on your list! Use command `update` to change the quantity." | |
else | |
list[item] = quantity | |
end | |
end | |
def remove(item, list) | |
if list[item] | |
list.delete(item) | |
else | |
puts "Whoops! #{item.upcase} wasn't even on your list!" | |
end | |
end | |
def update(item, quantity, list) | |
if list[item] | |
list[item] = quantity | |
else | |
puts "Whoops! #{item.upcase} wasn't on your list! Use `add` to add your item." | |
end | |
end | |
def print(list) | |
list.each do |item, quantity| | |
puts "#{item.upcase} - #{quantity}" | |
end | |
end | |
# Tests | |
my_list = new_list | |
p my_list == {} | |
add("Carrots", "10", my_list) | |
p my_list == {"Carrots" => "10"} | |
add("Carrots", "20", my_list) | |
p my_list == {"Carrots" => "10"} | |
add("Apples", "15", my_list) | |
p my_list == {"Carrots" => "10", "Apples" => "15"} | |
remove("Oranges", my_list) | |
p my_list == {"Carrots" => "10", "Apples" => "15"} | |
remove("Apples", my_list) | |
p my_list == {"Carrots" => "10"} | |
update("Carrots", "20", my_list) | |
p my_list == {"Carrots" => "20"} | |
update("Oranges", "20", my_list) | |
p my_list == {"Carrots" => "20"} | |
# Refactored solution w/ commandline input | |
# | |
def new_list | |
{} | |
end | |
def add(item, quantity, list) | |
return list[item] = quantity unless list[item] | |
puts "#{item.upcase} is already on your list! Use command `update` to change the quantity." | |
end | |
def remove(item, list) | |
list.delete(item) { |item| puts "Whoops! #{item.upcase} wasn't on your list!" } | |
end | |
def update(item, quantity, list) | |
return list[item] = quantity if list[item] | |
puts "Whoops! #{item.upcase} wasn't on your list! Use `add` to add your item." | |
end | |
def print(list) | |
list.each { |item, quantity| puts "#{item.upcase} - #{quantity}" } | |
end | |
def help | |
puts <<-helpdocs | |
The following commands are available. Separate input with a single space, e.g.: | |
add 10 chips | |
add <number> <item> ADD an item to your list: | |
remove <item> REMOVE an item from your list | |
update <item> <quantity> UPDATE an item's quantity on your list | |
help show HELP documentation | |
quit exit the program | |
helpdocs | |
end | |
def run | |
puts "Hello! Lets get ready to shop!" | |
list = new_list | |
puts "Type 'help' to see a list of available commands." | |
input = "" | |
until input[0] == "quit" | |
puts | |
puts "What would you like to do?" | |
input = gets.chomp.split(" ") | |
puts | |
case input[0] | |
when 'add' then add(input[2], input[1], list) | |
when 'remove' then remove(input[1], list) | |
when 'update' then update(input[1], input[2], list) | |
when 'help' then help; next | |
else puts "Try again..." | |
end | |
puts; puts "*******************" | |
puts "This is your list:" | |
print(list) | |
puts | |
end | |
end | |
run |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment