teaching machines

CS 330 Lecture 4 – Ruby

February 1, 2016 by . Filed under cs330, lectures, spring 2016.

Agenda

TODO

Note

Today we switch to another language for writing scripts: Ruby. We won’t hit in full detail, just enough to be able to move around in it. Really, we’re learning just enough to move on to our next topic: regular expressions.

Ruby is just a programming language. We don’t want to get caught up in superficial details. So, let’s begin our discussion today with a little segment I like to call Program This:

You are an oppressive office manager. Each year you record in a comma-separated file how many typos you and your employees make in their correspondence. For instance, file 2013 looks like this:

pendleton.patty,27
tater.dick,0
dollar.bill,52
keys.charlotte,2
...

File 2014 looks similar. And 2015. Sometimes employees leave. Sometimes you hire new ones. Sometimes.

To produce some graphs for your organization’s centennial report, you want to merge all these files into one:

id,2013,2014,...
pendleton.patty,27,22,...
tater.dick,0,0,...
dollar.bill,52,,...
keys.charlotte,2,1,...
todian.gus,,5,...
...

When employees leave or join, their missing entries are left blank. With a neighbor, write pseudocode to accomplish this merge. Don’t worry about syntax, but do express your loops, conditionals, calls to standard functions, etc. Test your pseudocode!

We’ll implement a possible solution to this in Ruby after we do some simpler examples.

Code

aspect

#!/usr/bin/env ruby

puts ARGV[0].to_f / ARGV[1].to_f

rhymes

#!/usr/bin/env ruby

require 'open-uri'
require 'json'

url = "http://rhymebrain.com/talk?function=getRhymes&word=#{ARGV[0]}"

json = open(url).read
rhymes = JSON.parse(json)

rhymes.each do |rhyme|
  puts rhyme['word'] if rhyme['score'] >= 300
end

advent

#!/usr/bin/env ruby

directions = File.read('advent.txt')
# puts directions

ups = directions.count('(')
downs = directions.count(')')

puts ups - downs