-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>
> There has been some debate on the proper ways to screen programmers you intend
> to hire.  A common theory is that you really need to have the programmer write
> some code for you to accurately gauge their skill.  Exactly what to have them
> write is another debate, but the blogosphere has recently been abuzz with this
> question as a screener:
>
>         Write a program that prints the numbers from 1 to 100.
>         But for multiples of three print "Fizz" instead of the
>         number and for the multiples of five print "Buzz". For
>         numbers which are multiples of both three and five
>         print "FizzBuzz".
>
> Pretend you've just walked into a job interview and been hit with this question.
> Solve it as you would under such circumstances for this week's Ruby Quiz.

My "honest" solution (what I really would have submitted to the interviewer):

arr = (1..100).map do |i|
  i = (("FizzBuzz" if i%15==0) or ("Fizz" if i%3==0) or ("Buzz" if i%5==0) or i)
end
puts arr


I couldn't resist throwing in the Loki solution.  Why Loki?  Because
it's a mischievous rascal, and it makes excessive use of the name
"it", albeit misguidedly, which it thinks is fitting giving the recent
hoopla about "it":

require 'date'

class Fixnum
  @@shapes = {
    3 => "Fizz",
    5 => "Buzz"
  }

  def self.invoke it
    @@shapes = it if it.kind_of? Hash
  end

  def self.reveal
    puts @@shapes.value.join( ' ' )
  end

  def << it
    return self if it.empty?
    it
  end

  def options( sep="", it=[] )
    @@shapes.keys.sort.each do |k|
      it << @@shapes[k] if self%k == 0
    end
    self << it.join( sep )
  end
end

loki_roused = ARGV[0]

if loki_roused
  the_simpsons = {
    3=>"Homer",
    5=>"Marge",
    7=>"Bart",
    11=>"Lisa",
    13=>"Maggie"
  }
  Fixnum.invoke the_simpsons
end

(1..100).each do |i|
  puts i.options
end

if loki_disturbed
  jd = Date.today.jd
  puts "\n---------------------------------"
  puts "\n Out of the simpson family -- on this Julian day of #{jd},
Loki can shape shift into:\n   #{(it = jd.options "
").kind_of?(String) ? it : 'none of them'}"
  puts "---------------------------------\n"
end


Some thoughts:

This is, obviously, an incredibly easy programming puzzle -- as far as
writing down the pseudo code in english.  It took me, however, no lie,
a good half hour just to decide on a course of action.  In my head, I
struggled with the virtues of simplicity and the "coolness" of
conciseness, all while trying to avoid mediocrity.  Actual programming
was a breeze.  From there, though, no lie, at least fifteen minutes to
debug.  I'm not kidding.

Now, I'm the first to admit that I'm new to Ruby, and programming is
not my strong suit, but I would never think that I'm one of those
people that couldn't program themselves out of a paper bag.

Thinking about this quiz just reinforced what I already knew about
myself.  I'm not a guy who just jumps in and gets his hands dirty.  In
fact, I'm the exact opposite.  I over-think the problem and often get
nowhere.  If this were a test of performance under pressure, I'm
certain I would have failed to impress during the interview.

In any case, to the other newbies out there: don't be intimidated by
such frivolous pursuits of the lofty few such as "golf".  In fact, be
so bold as to join in if you dare.  But, as in all things, be
steadfast in your Ruby endeavors.  Enlightenment will come :)

Todd