Skip to content

Instantly share code, notes, and snippets.

@samlandfried
Last active February 9, 2017 18:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samlandfried/9e748b7a6a11bcb22a4dc963736dcd01 to your computer and use it in GitHub Desktop.
Save samlandfried/9e748b7a6a11bcb22a4dc963736dcd01 to your computer and use it in GitHub Desktop.

Week 2 and 3 Diagnostic

This exercise is intended to help you assess your progress with the concepts and techniques we’ve covered during the week.

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).

Use single () and triple backticks (```) to container code snippets.

Define a class called PizzaOven which has a method cook_pizza which returns the string "mmm 'za".

`class PizzaOven

def cook_pizza "mmm 'za" end end`

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 = name end end

Given an array of the numbers [1,2,3,4,5], find the sum of the doubles of all the numbers

ary.reduce(0) do |memo, num| memo = num * 2 end

Give the command to create a new Git repository in a directory on your machine

git init

Pizza

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.

def test_it_is_tasty assert Pizza.new.is_tasty? 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 test_it_is_of_a_style assert ["supreme", "mediterranean", "cheese"].include? (Pizza.new.style) end

Give the Git commands needed to stage and then commit a set of changes to a file

git add file.txt git commit

Student

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.

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" Given an array of 3 Student instances, generate a new string of all of their assignments 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]

YOUR CODE HERE

def Student

  attr_accessor :attitude # changed because a reader wouldn't let us reset this value
  
  def initialize 
    @attitude = "cheerful"
    @assignments = []
  end
  
  def assign_homework assignment
    assignments << assignment
    case attitude
    when "cheerful"
      attitude = "dubious"
    when "dubious"
      attitude = "perturbed"
    when "perturbed"
      attitude = "dazed"
    end
  end
  
  def assignments
    @assignments.join(", ")
  end
end

=> "linked list, sorting algos, write a c compiler, write a pacman game, headcount, sales engine"

What does the following code output? def print_variables(x) puts "x: #{x}" puts "b: #{b}" end

def b 12 end

a = 4 print_variables(a)

x: 4 b: 12

Working with files: given a text file located at "~/Documents/pizza.txt", write code to read the file from the filesystem and print each line one at a time.

File.open("~/Documents/pizza.txt", "r").read.split("\n").each do |line| p line end

Writing Files: given a text file located at "/Documents/pizza.txt", write code to read the file from the filesystem, then write a new file at "/Documents/line_count.txt" containing the number of lines in the original file.

File.open("~/Documents/line_count.txt", "w").write(File.open("~/Documents/pizza.txt", "r").read.split("\n").length)

Imagine a simple ruby class designed to represent a Corgi dog. Write a test for each of the following features:

A Corgi can be created with no arguments

def test_it_needs_no_arguments assert Corgi.new end

A Corgi can be assigned a name

def test_it_can_have_a_name assert Corgi.new("Anticorgi") end

A Corgi can be asked for its name

def test_its_name_is_not_secret darryl = Corgi.new("Darryl") assert_equal "Darryl", darryl.new end

A Corgi can be asked for its posture, which should default to “standing”

def test_it_knows_its_posture assert_equal "standing", Corgi.new.posture end

A Corgi can be asked to lie down, which should change its posture to “laying”

def test_it_knows_how_to_lie_down best_corgi = Corgi.new best_corgi.lie_down assert_equal "laying", best_corgi.posture end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment