--Apple-Mail-3-869588174
Content-Type: text/plain;
	charset=US-ASCII;
	format=flowed;
	delsp=yes
Content-Transfer-Encoding: 7bit

Begin forwarded message:

> From: "Brian Knoll" <brianeknoll / gmail.com>
> Date: January 14, 2008 8:51:34 PM CST
> To: suggestion / rubyquiz.com
> Subject: Attempted solution. :)
>
> Hi, James,
>
> Thanks for doing Ruby Quiz -- it was very nice to have something to  
> focus on, rather than inane training book examples (they try hard,  
> they really do).
>
> I was hoping to get some feedback, as this is one of my first Ruby  
> programs (not copied from a book or website).
>
> Looking forward to seeing the other solutions!
>
> _be
>
> -------
>
>
> #knock-out ruby quiz
> #
> #thanks to steve bristol, jacksonville, fl ruby programmer, of  
> lesseverything.com for suggestion
> #
> #known issue: 3 card display doesn't  work - missing an end  
> somewhere, I think
> #
> #known SciTe issue - SciTe buffers all data, even backspaces.  If  
> you run it via SciTe, it tell you you were incorrect when you weren't.
> #   happens if you enter an answer and then change it before hitting  
> enter
> #
> ##########################################
>
> ###header/version
> def header
>     puts "Knock-Out BlackJack Card Counting trainer v0.1"
>   puts ""
> end
>
>
> header
> card_number=0  #for multiple card display
>
> ###set deck number/# cards displayed
> puts "How many decks do you want to practice with? "
> STDOUT.flush #needed to run correctly in SciTe
> decks = gets.chomp!.to_i
> puts "And how many cards to display at once? "
> STDOUT.flush
> cards_display = gets.chomp!.to_i
>
>
> puts "#{decks} deck/s and #{cards_display} cards displayed it is!"
> puts ""
>
> ###setup cards/card values/initial count value
> cards =%w(2 3 4 5 6 7 8 9 10 J Q K A) #array of cards
>                                                                                                             # is 
>  there a way to setup the array with
>                                                                                                           #something 
>  like: %w(2..10, JQKA)?
>
> card_values = Hash["2", -1, "3", -1, "4", -1, "5", -1, "6", -1, "7",  
> -1, "8", 0, "9", 0, "10", 1, "J", 1, "Q", 1,\
> "K", 1, "A", 1] #card value hash - is there a more succint way of  
> setting up the cards and hash values?  It seems a little repetitive
>                                             #can I assign values  
> somehow like 2..7=-1; 8,9=0; 10,JQKA=1?
> shoe = cards*4*decks
> value = 4-(4*decks)
> correct = 0
> shoeshuf = shoe.sort_by {rand} #shuffle the cards
>
> quit_early_rounds = 1
>
> ###user help
> puts "A quick reminder: \n2-7 = -1, \n8-9 = 0,\n10-A = +1"
> puts "\nAlso, the count STARTS at 4 minus (4 x num of decks)."
> puts "(so with #{decks} deck/s, your count starts at #{value})"
> puts "\nGood luck!"
> puts ""
> puts "You're going through #{decks} deck/s with #{cards_display}  
> cards displayed."
> puts ""
>
>
> #start timer
> timestart = Time.new
>
>
>
> if cards_display == 1
>     shoeshuf.each do |c|
>             #for each card in shoeshuf array...
>         value += card_values.fetch(c)      #add the count value...
>
>         #progress feedback
>         if quit_early_rounds*cards_display == (shoeshuf.length)
>             puts "Last one!"
>
>         elsif quit_early_rounds*cards_display ==  
> ( shoeshuf.length) / 2 + 1
>             puts "Halfway done!"
>
>         elsif quit_early_rounds*cards_display == (shoeshuf.length) /  
> 4 + 1
>             puts "1/4 done!"
>
>         elsif quit_early_rounds*cards_display == ( shoeshuf.length)  
> * 0.75 + 1
>             puts "3/4 done!"
>
>         end
>
>         puts  c
>         puts "Count? (x to quit)"      #user test
>         STDOUT.flush
>         ans = gets.chomp!.to_s
>
>     # answer handling/scoring
>         if ans == value.to_s
>             puts "Correct!"
>             correct += 1
>         elsif ans == 'x'
>             timeend = Time.new
>             time = timeend - timestart
>             puts "Summary --"
>             puts "You got #{correct} right out of  
> #{quit_early_rounds}."
>             percent = correct.to_f/quit_early_rounds.to_f
>             puts "(That's #{(percent*100).to_i}%!)"
>             puts "And it took you #{time.to_i} secs to complete  
> #{quit_early_rounds} cards."
>             exit
>         elsif
>             puts "Incorrect. Count is #{value}."
>     end
>
>     quit_early_rounds += 1
>     puts ""
>
>
> end
>
> #calc time taken
> timeend = Time.new
> time = timeend - timestart
>
> puts "Summary --"
> puts "You got #{correct} right out of #{ shoeshuf.length}."
> puts "(That's #{correct.to_f/shoeshuf.length.to_f}%!)"
> #maybe add an evaluation statement depending on # right out of total
> #percentage might be even better
>
> puts "And it took you #{ time.to_i} secs to complete #{decks} deck/s"
> #eval ... i.e. "The goal is 30 seconds for 1 deck! You are #{second}  
> from that goal! Keep working!"
> end
>
> ######################################
> # 2 card display
> if cards_display == 2
>     puts "You said 2 cards to display"
>     quit_early_rounds += 1
>     while shoeshuf[card_number] != nil
>
>         print shoeshuf[card_number] + "   "
>     #acount for value? (running count?)
>         value += card_values.fetch(shoeshuf[card_number])  #keep count
>         card_number +=1  # keep cards moving
>         puts shoeshuf[card_number]
>     value += card_values.fetch(shoeshuf[card_number])
>         card_number +=1
>
>         #progress feedback
>         if quit_early_rounds == (shoeshuf.length)
>             puts "Last one!"
>
>         elsif quit_early_rounds == ( shoeshuf.length) / 2
>             puts "Halfway done!"
>
>         elsif quit_early_rounds == (shoeshuf.length) / 4 + 1
>             puts "1/4 done!"
>
>         elsif quit_early_rounds == ( shoeshuf.length) * 0.75 + 1
>             puts "3/4 done!"
>
>         end
>
>       puts "Running Count? (x to quit)"      #user test
>         STDOUT.flush
>         ans = gets.chomp!.to_s
>
>     if ans == value.to_s
>         puts "Correct!"
>         correct += 1
>     elsif ans == 'x'
>         timeend = Time.new
>         time = timeend - timestart
>         puts "Summary --"
>     puts "You got #{correct} right out of #{quit_early_rounds}."
>      percent = correct.to_f/quit_early_rounds.to_f
>      puts "(That's #{(percent*100).to_i}%!)"
>      puts "And it took you #{ time.to_i} secs to complete  
> #{quit_early_rounds} cards."
>         exit
>     elsif
>         puts "Incorrect. Count is #{value}."
>     end
>
>     quit_early_rounds += cards_display
>     puts ""
>
> end
>
>
>
>
> ######################################
> # 3 card display -- having trouble with this -- when you enter 3 (or  
> anything other than 1-2) you skip out -- end issues?
> if cards_display == 3
>     puts "You said 3 cards to display"
>     quit_early_rounds += 1
>     while shoeshuf[card_number] != nil
>
>         print shoeshuf[card_number] + "   "
>     #acount for value? (running count?)
>         value += card_values.fetch(shoeshuf[card_number])  #keep count
>         card_number +=1  # keep cards moving
>         print shoeshuf[card_number] + "   "
>     value += card_values.fetch(shoeshuf[card_number])
>         card_number +=1
>         puts shoeshuf[card_number]
>     value += card_values.fetch(shoeshuf[card_number])
>         card_number +=1
>
>         #progress feedback
>         if quit_early_rounds == ( shoeshuf.length)
>             puts "Last one!"
>
>         elsif quit_early_rounds == (shoeshuf.length) / 2
>             puts "Halfway done!"
>
>         elsif quit_early_rounds == ( shoeshuf.length) / 4 + 1
>             puts "1/4 done!"
>
>         elsif quit_early_rounds == (shoeshuf.length) * 0.75 + 1
>             puts "3/4 done!"
>
>         end
>
>       puts "Running Count? (x to quit)"      #user test
>         STDOUT.flush
>         ans = gets.chomp!.to_s
>
>     if ans == value.to_s
>         puts "Correct!"
>         correct += 1
>     elsif ans == 'x'
>         timeend = Time.new
>         time = timeend - timestart
>         puts "Summary --"
>     puts "You got #{correct} right out of #{quit_early_rounds}."
>      percent = correct.to_f/quit_early_rounds.to_f
>      puts "(That's #{(percent*100).to_i}%!)"
>      puts "And it took you #{time.to_i} secs to complete  
> #{quit_early_rounds} cards."
>         exit
>     elsif
>         puts "Incorrect. Count is #{value}."
>     end
>
>     quit_early_rounds += cards_display
>     puts ""
>
> end
>
>
> end
> end
>
>
> #calc time taken
> timeend = Time.new
> time = timeend - timestart
>
> puts "Summary --"
> puts "You got #{correct} right out of #{shoeshuf.length}."
> puts "(That's #{correct.to_f/shoeshuf.length.to_f }%!)"
> #maybe add an evaluation statement depending on # right out of total
> #percentage might be even better
>
> puts "And it took you #{time.to_i} secs to complete #{decks} deck/s"
> #eval ... i.e . "The goal is 30 seconds for 1 deck! You are  
> #{second} from that goal! Keep working!"
>
>  #getting an error on this line? undefined method "+" for nil class,  
> but prog runs fine
> #account for value? (running count?)
>
> #need some feedback DURING the process to let you know where you are  
> in
> #process, ESP with more than 1 decks
>
> #when do you bet with knockout? depends on the number of decks
> #
>


--Apple-Mail-3-869588174--