Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement