------art_42422_25935223.1225063556700
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Here there's my attempt:


 CODE START 

class Array
  def sum; self.inject{|a,b| a+b}; end
end

def get_points (shot,next_shots)
  return shot.sum + (
    # strike
    if shot.first 10
      next_shots.flatten[0..1].sum
    # spare
    elsif shot.sum 10
      next_shots.first.first
    # normal
    else
      0
    end
  )
end

def symbols(score,sep)
  return "X#{sep}" if score.first 10
  return "#{score[0]}#{sep}/" if score.sum 10
  return "#{score[0]}#{sep}#{score[1]}"
end

name, score, points  RGV.first, ARGV[1..-1].join(" "), []
raise "Usage: 'ruby 181_bowling_score.rb [name] [scores]'" if name.nil? or
score.to_a.empty?

score  core.scan(/10|\d+\s*\d*/).collect{|e| e.split(" ").map!{|e|
e.to_i}}
score.each_with_index { |s,i| points[i]  et_points(s,score[i+1..-1]) }

puts "#{name}'s final score: #{points[0..9].sum}";
puts "Frame\tRoll\tRoll\tScore\t"
score.each_with_index do |s,i|
  puts "#{i+1}\t#{symbols(s,"\t")}\t#{(i<10) ? points[0..i].sum : ''}"
end


 CODE END 




On Sun, Oct 26, 2008 at 5:09 PM, Ken Bloom <kbloom / gmail.com> wrote:

> On Fri, 24 Oct 2008 09:25:45 -0500, Matthew Moss wrote:
>
> > Apologies for not having the Long Division quiz summary done yet. It
> > will come sometime today or tomorrow. Meanwhile, I have the next quiz
> > ready...
> >
> > ------------------
> >
> > The three rules of Ruby Quiz 2:
> >
> > 1.  Please do not post any solutions or spoiler discussion for this quiz
> > until 48 hours have passed from the time on this message.
> >
> > 2.  Support Ruby Quiz 2 by submitting ideas as often as you can! (A
> > permanent, new website is in the works for Ruby Quiz 2. Until then,
> > please visit the temporary website at
> >
> >    <http://splatbang.com/rubyquiz/>.
> >
> > 3.  Enjoy!
> >
> > Suggestion:  A [QUIZ] in the subject of emails about the problem helps
> > everyone on Ruby Talk follow the discussion.  Please reply to the
> > original quiz message, if you can.
> >
> > ------------------
> >
> > ## Bowling Scores (#181)
> >
> >
> > Whether it is real or on the Wii, bowling is a fun game. (Okay, for the
> > sake of the quiz, let's assume it's a fun game.) But I've known folks
> > who just don't understand [how to score properly][1]. They can count
> > pins knocked down, and know that getting all ten pins in one roll is
> > good, but they still can't keep score.
> >
> > Your task this week is to tally scores for these people. The input will
> > be the player's name and the number of pins felled from each roll. For
> > example:
> >
> >      ruby bowling_scores.rb John 6 2 7 1 10 9 0 8 2 10 10 3 5 7 2 5 5 8
> >
> > Your should tally the per-frame scores and generate output in table
> > form, such as:
> >
> >      John's final score: 140
> >
> >      Frame     Roll  Roll    Score
> >         1        6     2        8
> >         2        7     1       16
> >         3        X             35
> >         4        9     -       44
> >         5        8     /       64
> >         6        X             87
> >         7        X            105
> >         8        3     5      113
> >         9        7     2      122
> >        10        5     /      140
> >         *        8
> >
> >
> > Note that you should make use of typical bowling symbols: `X` for a
> > strike, `/` for a spare, and `-` for zero. Also, if extra balls were
> > thrown at the end (to supplement a strike or spare in the final frame),
> > list those as frame `*` like the above, but without a score.
> >
> > Extra credit: Generate ascii or graphical output that looks more like
> > the traditional bowling score form, which can be seen on [this page][1].
> >
> >
> > [1]: http://www.bowling2u.com/trivia/game/scoring.asp
>
> #!/usr/bin/env ruby
> #Requires Ruby 1.8.7
>
> class Fixnum
>  def to_bowl
>    return '-' if self
>    return 'X' if self0
>    return self.to_s
>  end
> end
>
> class Array
>  def strike?
>    self[0]0
>  end
>  def spare?
>    self[0]+self[1]0
>  end
> end
>
> module Enumerable
>  #each cons is almost what I want, but it won't generate partial cons at
> the end
>  def mycons n
>    result
>    each_with_index do |f,i|
>      result << self[i,n]
>    end
>    result
>  end
> end
>
> ARGV.map!(&:to_i)
> fail if ARGV.any?{|x| x>10}
> frames ¨ÂÖ®íùãïîó¨³> frames.delete_at(-1)
>
> frames.each_with_index do |f,i|
>  frames[i+1]l if f and not f.strike?
> end
> frames.compact!
> totalsðámes.inject([]) do |h,frame|
>  last  [-1] || 0
>  frame.delete_at(2) unless frame.spare? or frame.strike?
>  h+[last+frame.inject(&:+)]
> end
> printf "%8s%8s%8s%8s\n", "Frame", "Roll", "Roll", "Score"
> frames.each_with_index do |f,i|
>  spare' if f[0]+f[1]0
>  printf "%8s%8s%8s%8s\n", i+1, f[0].to_bowl, (spare or f[1].to_bowl unless
> f.strike?), totals[i]
>  if i	 and f.spare?
>    printf "%8s%8s\n", '*', f[2].to_bowl
>  elsif i	 and f.strike?
>    printf "%8s%8s%8s\n", '*', f[1].to_bowl, f[2].to_bowl
>  end
> end
>
>
>
>
> --
> Chanoch (Ken) Bloom. PhD candidate. Linguistic Cognition Laboratory.
> Department of Computer Science. Illinois Institute of Technology.
> http://www.iit.edu/~kbloom1/ <http://www.iit.edu/%7Ekbloom1/>
>
>


-- 
Go outside! The graphics are amazing!

------art_42422_25935223.1225063556700--