By requiring Sudoku, you're loading the contents of the file sudoku.rb which
could contain several modules or classes (or even just one module by the sound of things).

The next line outputs (puts) the result of the method 'solver', which is a
class method of Sudoku. The parameter Sudoku::Puzzle.new(ARGF.readlines) is a
statement that creates a new instance of Sudoku Puzzle, passing ARGF.readlines
as a parameter to the constructor (a.k.a the initialize method).

ARGF is a constant that represents the parameters passed into the program from
the command line (usually). I took this definition from (http://blog.bogojoker.com/2008/11/data-and-argf-in-ruby/) 
"ARGF takes each of the elements in ARGV, assumes they are filenames, and allows you to process these files as single stream of input"

So if you've passed muliple files into the program from the command line, ARGF represents them as one big file. The method readlines, reads each line of ARGF into an array.

Keep reading that book and all will be revealed :)