This exercise is intended to help you assess your progress with the concepts and techniques we've covered during the week.
Fork this gist, and when you are done, fill out this form:
http://goo.gl/forms/Q4jqmMVh2XFobVys2
For these questions, write a short snippet of code that meets
the requirement. In cases where the question mentions a "given"
data value, use the variable given
to refer to it (instead of re-writing
the information).
class PizzaOven
def cook_pizza
"mmm 'za"
end
end
2. Define a class called Student
which is instantiated with a "name" value and which has a method name
that returns this value
class Student
attr_reader :name
def initialize
@name = name
end
end
nums = [1,2,3,4,5]
nums.map {|x| x*2}.inject(:+)
git init
Given a hypothetical Pizza
class which has an instance method is_tasty?
that always
returns true, write a simple Minitest test that tests this behavior.
require 'minitest/autorun'
class PizzaTest < Minitest::Test
def test_pizza_is_tasty
pizza = Pizza.new
assert pizza.is_tasty?
end
end
Suppose the Pizza
class also has a method style
which randomly returns one of:
"supreme"
, "mediterranean"
, or "cheese"
. Write a test that confirms that the
returned pizza style is within this list.
def pizza_has_style
pizza = Pizza.new
assert_includes styles_array, pizza.style
end
git add git commit -m "message here"
Define a Student
class which, when created, has an attitude
attribute.
attitude
should start out with the value "cheerful", and the Student
class should
provide a "reader" method that allows us to access the value of its attitude
.
Additionally, add an assign_homework
method to Student
. When assigned_homework
is
invoked, if the student's attitude
is "cheerful"
, it should become "dubious"
. If
the value is currently "dubious"
it should become "perturbed"
. If the value is currently
"perturbed"
, it should become "dazed"
. Assigning homework to a "dazed"
student has no
effect.
class Student(attitude)
attr_reader :attitude
def initialize
@attitude = "cheerful"
end
def assign_homework
if attitude == "cheerful"
@attitude = "dubious"
elsif attitude == "dubious"
@attitude = "perturbed"
elseif attitude == "perturbed"
@attitude = "dazed"
end
end
end
Building on the Student
class from the previous example, update the assign_homework
method
to accept an argument. The argument will be a String
containing a short description of the
assignment. For example we might use it like this:
s = Student.new
s.assign_homework("Write a linked list")
Then, add an assignments
method to Student
. assignments
should return a list of
all the assignments that have been given, separated by a comma and a space. For example:
s = Student.new
s.attitude
=> "cheerful"
s.assign_homework("write a linked list")
s.attitude
=> "dubious"
s.assign_homework("write a BST")
s.attitude
=> "perturbed"
s.assignments
=> "write a linked list, write a BST"
class Student(attitude)
attr_reader :attitude,
:assignments
def initialize
@attitude = "cheerful"
@assignments = []
end
def assign_homework(homework)
assignments << homework
if attitude == "cheerful"
@attitude = "dubious"
elsif attitude == "dubious"
@attitude = "perturbed"
elseif attitude == "perturbed"
@attitude = "dazed"
end
end
end
Create a new class SurlyStudent
which inherits from the Student
class above.
However, whenever you ask a SurlyStudent
for their attitude, they always respond
with "disgruntled"
class SurlyStudent < Student
def initialize(attitude)
@attitude = "disgruntled"
end
end
For example:
s1 = Student.new
s2 = Student.new
s3 = Student.new
s1.assign_homework("linked list")
s1.assign_homework("sorting algos")
s2.assign_homework("write a c compiler")
s2.assign_homework("write a pacman game")
s3.assign_homework("headcount")
s3.assign_homework("sales engine")
students = [s1,s2,s3]
students_assignments = students.map {|student| student.assignments}
students_assignments.join(", "
=> "linked list, sorting algos, write a c compiler, write a pacman game, headcount, sales engine"