add other game scoring scripts

This commit is contained in:
swaits committed 2010-10-03 18:59:24 -07:00
1 parent 9a87aca70c
commit c864cf5cdb
73 files changed
+2311

No files matched your search

+71
View File
@@ -0,0 +1,71 @@
#!/usr/bin/env ruby
class Card
attr_reader :rank, :suit
def initialize(str)
r = str[0,1].downcase
s = str[1,1].downcase
@suit = case s
when 's' then :spades
when 'h' then :hearts
when 'd' then :diamonds
when 'c' then :clubs
end
@rank = case r
when '2'..'9' then r.to_i
when 't' then 10
when 'j' then 11
when 'q' then 12
when 'k' then 13
when 'a' then 14
end
end
def rank_long_s
['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace'][@rank-2]
end
def suit_long_s
@suit.to_s.capitalize
end
def rank_s
['2','3','4','5','6','7','8','9','t','j','q','k','a'][@rank-2]
end
def suit_s
{:spades => 's', :hearts => 'h', :diamonds => 'd', :clubs => 'c'}[@suit]
end
def to_s
rank_s + suit_s
end
def to_long_s
rank_long_s + '-' + suit_long_s
end
def ==(other)
@rank == other.rank && @suit == other.suit
end
def <=>(other)
if @rank != other.rank
@rank <=> other.rank
else
# order is Spades, Hearts, Diamonds, Clubs (conveniently reverse alphabetical)
other.suit_s <=> suit_s
end
end
def eql?(other)
self == other
end
def hash
to_s.hash
end
end
+16
View File
@@ -0,0 +1,16 @@
#!/usr/bin/env ruby
class Array
def combinations n
result = Array.new
if n > 0
(0 .. self.length - n).each do |i|
combs = self[i + 1 .. -1].combinations(n - 1)
combs = [[]] if combs.empty?
combs.collect {|comb| [self[i]] + comb}.each {|x| result << x}
end
end
return result
end
end
+29
View File
@@ -0,0 +1,29 @@
/*
* Tripoli is a generic CSS standard for HTML rendering.
* Copyright (C) 2007-2008 David Hellsing
*
* http://devkick.com/lab/tripoli/
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
**
_______________________________
RESET */
*{text-decoration:none;font-size:1em;outline:none;margin:0;padding:0}code,kbd,samp,pre,tt,var,textarea,input,select,isindex,listing,xmp,plaintext{font:inherit;white-space:normal}a,img,a img,iframe,form,abbr,acronym,object,applet,table,a abbr,a acronym{border-width:0}dfn,i,cite,var,address,em{font-style:normal}th,b,strong,h1,h2,h3,h4,h5,h6,dt{font-weight:400}caption,th,td{text-align:left}html{background:#FFF;color:#000;line-height:1;font-family:arial, sans-serif}/* \*/html{font-family:sans-serif}/* */q{quotes:"\201C""\201D""\2018""\2019"}ul,ol,dir,menu{list-style:none}sub,sup{vertical-align:baseline}a{color:inherit}/*
_______________________________
DISABLE DEPRECATED HTML */
font,basefont{color:inherit;font:inherit;font-size:100%}center,*[align]{text-align:inherit}s,strike,u{text-decoration:inherit}img{border:none;margin:0}ol{list-style-type:decimal}body{background-color:transparent}tr,th,td{width:auto;height:auto;background-color:transparent;vertical-align:inherit;border:none}table[border],.content table[border]{border-collapse:separate;border-spacing:0}nobr{white-space:normal}marquee{overflow:visible;-moz-binding:none}blink{text-decoration:none}/*
_______________________________
GENERAL */
html{font-size:125%}body{font-size:50%}a{text-decoration:underline}strong,th,thead td,h1,h2,h3,h4,h5,h6,dt{font-weight:700}cite,em,dfn{font-style:italic}code,kbd,samp,pre,tt,var,input[type='text'],input[type='password'],textarea{font-size:100%;font-family:mono-space,monospace}pre{white-space:pre}pre *{font-size:100%;white-space:pre}del{text-decoration:line-through}ins,dfn{border-bottom:1px solid #000}small,sup,sub{font-size:85%}big{font-size:125%;line-height:80%}abbr,acronym{text-transform:uppercase;font-size:85%;letter-spacing:.1em}abbr[title],acronym[title],dfn[title]{cursor:help;border-bottom:1px dotted #000}sup{vertical-align:super}sub{vertical-align:sub}blockquote{padding-left:2.2em}hr{display:none/* We will re-reset it later for content */}:lang(af),:lang(nl),:lang(pl){quotes:'\201E' '\201D' '\201A' '\2019'}:lang(bg),:lang(cs),:lang(de),:lang(is),:lang(lt),:lang(sk),:lang(sr),:lang(ro){quotes:'\201E' '\201C' '\201A' '\2018'}:lang(da),:lang(hr){quotes:'\00BB' '\00AB' '\203A' '\2039'}:lang(el),:lang(es),:lang(sq),:lang(tr){quotes:'\00AB' '\00BB' '\2039' '\203A'}:lang(en-GB){quotes:'\2018' '\2019' '\201C' '\201D'}:lang(fi),:lang(sv){quotes:'\201D' '\201D' '\2019' '\2019'}:lang(fr){quotes:'\ab\2005' '\2005\bb' '\2039\2005' '\2005\203a'}*[lang|='en'] q:before{content:'\201C'}*[lang|='en'] q:after{content:'\201D'}*[lang|='en'] q q:before{content:'\2018'}*[lang|='en'] q q:after{content:'\2019'}input,select,button{cursor:pointer}input[type='text'],input[type='password']{cursor:text}input[type='hidden']{display:none}/*
_______________________________
CONTENT */
.content{font-size:1.2em;line-height:1.6em}.content h1{font-size:1.6em;line-height:1;margin:1em 0 .5em}.content h2{font-size:1.5em;line-height:1;margin:1.07em 0 .535em}.content h3{font-size:1.4em;line-height:1;margin:1.14em 0 .57em}.content h4{font-size:1.3em;line-height:1;margin:1.23em 0 .615em}.content h5{font-size:1.2em;line-height:1;margin:1.33em 0 .67em}.content h6{font-size:1em;line-height:1;margin:1.6em 0 .8em}.content hr{display:block;background:#000;color:#000;width:100%;height:1px;border:none}.content ul{list-style:disc outside}.content ol{list-style:decimal outside}.content table{border-collapse:collapse}.content hr,.content p,.content ul,.content ol,.content dl,.content pre,.content address,.content table,.content form{margin-bottom:1.6em}.content p+p{margin-top:-.8em}.content fieldset{margin:1.6em 0;padding:1.6em}/* \*/.content legend{padding-left:.8em;padding-right:.8em}/* *//* for Opera 8 */@media all and min-width 0px{.content legend{margin-bottom:1.6em}.content fieldset{margin-top:0}.content[class^='content'] fieldset{margin-top:1.6em}}.content fieldset>*:first-child{margin-top:0}.content textarea,.content input[type='text']{padding:.1em .2em}.content input{padding:.2em .1em}.content select{padding:.2em .1em 0}.content select[multiple]{margin-bottom:.8em}.content option{padding:0 .4em .1em}.content button{padding:.3em .5em}.content input[type='radio']{position:relative;bottom:-.2em}.content dt{margin-top:.8em;margin-bottom:.4em}.content ul,.content ol{margin-left:2.2em}.content caption,.content form div{padding-bottom:.8em}.content ul ul,content ol ul,.content ul ol,content ol ol{margin-bottom:0}/*
_______________________________
VISUAL PLUG */
blockquote{color:#666}blockquote > *:first-child:before /* Tripoli bonus: pure CSS blockquote */{content:"\201C";font-size:2.5em;margin-left:-.62em;font-family:georgia,serif;padding-right:.2em;color:#aaa;line-height:0}abbr[title],acronym[title],dfn[title]{border-bottom:1px solid #ccc}ins,dfn{border-bottom-color:#666}del{color:#666}fieldset{border-color:#ccc}textarea,input[type='text'],input[type='password'],select{border:1px solid #ccc;background:#fff}fieldset{border:1px solid #ccc}textarea:hover,input[type='text']:hover,input[type='password']:hover,select:hover{border-color:#aaa}textarea:focus,input[type='text']:focus,input[type='password']:focus,select:focus{outline:2px solid #e4e4e4;border-color:#888}.content hr{background:#aaa;color:#aaa}.content table{border-top:1px solid #ccc;border-left:1px solid #ccc}.content th,.content td{border-bottom:1px solid #ddd;border-right:1px solid #ccc}.content th,.content td{padding:.8em}a:link{color:#36c}a:visited{color:#99c}a:hover,code,pre{color:#c33}a:active,.a:focus{color:#000}/*
_______________________________
TYPE PLUG */
.alt{font-family:"baskerville italic","Warnock Pro","Goudy Old Style","Palatino","palatino linotype","Book Antiqua",Georgia, serif;font-style:italic;font-weight:400}.dquo{margin-left:-.55em}/*
_______________________________
END */
+14
View File
@@ -0,0 +1,14 @@
/*
* Tripoli is a generic CSS standard for HTML rendering.
* Copyright (C) 2007-2008 David Hellsing
*
* http://devkick.com/lab/tripoli/
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
**
_______________________________
BASE.IE */
textarea{white-space:pre}.content legend{margin-bottom:1.6em}.content fieldset{padding-top:0}sup,sub{font-size:100%}.content legend:first-child{margin-top:0}a abbr,a acronym{text-decoration:underline}* html .content blockquote *{margin:.8em 0}* html input{cursor:expression(this.type=='text' || this.type=='password' ? 'text' : 'pointer');display:expression(this.type=='hidden' ? 'none' : 'inline')}* html .content textarea,* html .content input,.content input[type='submit'],.content input[type='button']{padding:0}/*
_______________________________
END */
File diff suppressed because it is too large. Load diff
+100
View File
@@ -0,0 +1,100 @@
fred,2h2c2cacahqcts9d7d4h
aaron,4h7h7s7sjsjdjdjhkhks
steven,tsksqsjsas2dtckc9c6d
eileen,5h6s7s2s3c4d8d9dtcjh
randy,qsqhqc6d6h2s2sth9d3d
cathy,5c5s5d5s7h8h9hthqckd
josh,as8sks7s5s3c3hqcqhqh
jen,9s9sahacac4h4s4c4c7d
jen,4d4s4cah6h6s6s9c9c
jen,2h3s4s5c6dtdtcth3c3c
aaron,thtstc6c6hjsjdjs9dtd
casey,4h3h2hah5h3dqcqsts8d
steven,3s2sas4s9s3s2d8h7d7s
steven,tsqs9s5stskhah3h9h2h
steven,kckd6d6c6h5c7hqdqsjh
francois,5d6d7d8d9d6c7c8c9ctc
jeff,5h5d3s3h3casts9s8s3s
dundee,ah2h3h4h5hadadas2c2c
stephanie,7c2ctc5c6cjh4h2h6hth
stephanie,qcqsqd3c3dkhkdkstdtc
eddy,ackcqcjctc5sjs8s3sts
randy,2s3s4ckdksactdjcqhkh
francois,5s6s7h8s9ctdjsqcksas
fred,5h4c3d6s2dqh3h3d3hqd
fred,jcjhjdqdqsts7d5c2h3c
cynthia,qsqhqd4s4h8c8s8hkhkc
fred,6s7c8c8skhqhjhth9h5h
josh,2d3d4d5d6djdjcjh7h7c
jen,4h4s4c4c6h6d2sjcjsjd
josh,3s3c3d3h5cahac2h2s2c
steven,7s7h7h7hqsqdqs5d5c3s
steven,9c6c5c2cjcjh9dad2dqc
steven,6hkhqdjcts9c8dac7s5h
jen,3d3c3skcqdqckskdtstd
josh,6s6c5h5s5stcjcqckcac
randy,ahas2h2s3s3d4d4h5c5s
jen,4c4c4c4d9d9d3c3h3sts
jeff,2s3d9c9h9skdqd6d4s2d
jeff,thadkdqhjd7d7s7h2c2d
jeff,6c6s6h9d9c2s4d3c5d6s
dundee,2h3h4h5h6h7h8h9hthah
mike,asksqsjstskh4d4h4s4c
fred,8s7s6s5s4s8s2ckcqd3c
jen,6c6d6d6h4s5s6s7c8d7d
randy,as2c3s4c5h6h7s8s9stc
cynthia,7h6d5d4h3h8h9s9d9c9h
aaron,8s8d8hkskcacadthtc9h
josh,2c7d7c7h7s3s3hadacah
francois,3stcthtdacah8sqsks9s
aaron,qcjctc9c8c7h7d7s4s4h
mike,6h7h8h9h9skcad5h7d5h
mike,4h6hqh7c7cjh3h3s3d3c
rob,kskckhkd8c8h8d5d5cqd
rob,ad2d3d4d5d9d3hqsjh7h
rob,5c4c3d2dahadkcqdjctc
rob,jdjsjcjd4ckhqs4h3h2s
jen,3d4d5s6c7d8d9ctcjdqc
rob,tcjcqckcacadac7d7d7h
josh,5h8h8s7s4c3s7s8s9sts
jeff,5s4s3s2sas3c4c5c6c9c
fred,6h2d6h2d5d8s9dthqdkd
steven,3h3c2s2h2dackcqcjctc
steven,8c7c4c4c8c6h6d6s4h4s
steven,7h2h7dkc9s3c3s3sahah
jen,9sqcadaskskhjdjsjcjh
stephanie,9c9s2c6s6d5s4s3s2sas
stephanie,2c3s4d5s6c7s8h9dtsjh
stephanie,3c3sqhqctcthtd9c9h9s
eileen,qsjs5s6s4std8d7d4dad
eileen,5d8d2h2d2h2sadasacah
eileen,asadtstctd2s2c2hkdkh
eileen,kskdkhkcqh3d9htdthts
eileen,jc9c8c6c3ckhqh7h6h4h
eddy,9stsjsqsks5d5s5h5c7h
eddy,9d8h8c9s9h2d2h3d3h3c
eddy,3h5h8h9hjh3cqcqsqdqh
jonathan,jcjsjh8s8hkdqdjdtd9d
adam,ackcqcjctc9c8c7c6c5c
adam,5h4d4c7s7h7h2h2c2d2s
shaelagh,2c9c7h6d6skhqhth7h9h
shaelagh,6d5h4s3s2s9h8s7s6d5c
shaelagh,8dtdtctsthjdjs6d6h6c
shaelagh,6d2h7c7s5s9dtd8d4d3d
jonathan,ahksqhjdthqc6c5c2cac
jonathan,qhjh8h5h4h3c3d3h3sjc
jonathan,ahasackskdjdtd9d8d7d
jonathan,9d8d7d6h5dkdqdkc4s4s
aaron,6h6c6s9d9c9hasacqdqs
dundee,5h4h3h2hahtsjsqsksas
jen,thts7d7d7c6hjsac4hkc
lonna,6s6d4d5dkd6c5h4h3c2s
lonna,8c7s6s5d4cahadas5c5s
lonna,khqhjdtd9d8h7c6s5s4s
lonna,ahkhqhjhtc9d8c7c6c5d
francois,qc9s7d6s4s5c4cqc9c8c
randy,5c4d3d2cahqdqsqdtsth
cathy,2d2c2h2s8dkckdjhjdjh
cynthia,2d3d4d5d6d8skd9cjcqd
cathy,4c6s7s8s9stsjsqsksas
mike,5h4s8s8sadacadks9h7s
+97
View File
@@ -0,0 +1,97 @@
#!/usr/bin/env ruby
require 'card'
class Hand
def initialize(hand_string)
@cards = hand_string.scan(/../).collect { |s| Card.new(s) }.sort
end
def legal?
@cards.size == @cards.sort.uniq.size && [5,10].include?(@cards.size)
end
def illegal?
!(legal?)
end
def rank
return nil if illegal?
# array of suits, ranks
suits = @cards.collect { |c| c.suit_s }
ranks = @cards.collect { |c| c.rank }
# count of suits
suit_counts = Hash.new(0)
suits.each { |s| suit_counts[s] += 1 }
# count of ranks
rank_counts = Hash.new(0)
ranks.each { |s| rank_counts[s] += 1 }
# test for straight & flush
straight =
ranks.sort == (ranks.min .. ranks.max).to_a ||
ranks.sort == [2,3,4,5,14] ||
ranks.sort == [2,3,4,5,6,7,8,9,10,14]
flush = (suits.sort.uniq.size == 1)
# rank hand
return :royal_flush if straight && flush && ranks.min == 10
return :straight_flush if straight && flush
return :four_of_a_kind if [1,4] == rank_counts.values.sort
return :full_house if [2,3] == rank_counts.values.sort
return :flush if flush
return :straight if straight
# nothing
nil
end
def score
r = rank
return 0 if r.nil?
# ten card hands
return 80 if @cards.size == 10 && r == :straight_flush
return 40 if @cards.size == 10 && r == :flush
return 20 if @cards.size == 10 && r == :straight
# five card hands
return 21 if r == :royal_flush
return 20 if r == :straight_flush
return 15 if r == :four_of_a_kind
return 10 if r == :full_house
return 7 if r == :flush
return 5 if r == :straight
# nothing
return 0
end
def score_name
rank.to_s.gsub(/_/,' ') if rank
end
def to_s
@cards.collect { |c| c.to_s }.join(', ')
end
def hash
to_s.hash
end
def <=>(other)
to_s <=> other.to_s
end
end
Binary file not shown.

After

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 515 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

+7
View File
@@ -0,0 +1,7 @@
#!/bin/sh
while [ 1 ]
do
./score.rb hands.txt > /Volumes/share/score.html
sleep 5
done
+117
View File
@@ -0,0 +1,117 @@
#!/usr/bin/env ruby
require 'hand'
require 'combinations'
def score(hand_string)
# split into an array of two character strings (each representing a card)
cards = hand_string.scan(/../)
# a place to store all of our scores
best_hands = nil
best_score = -1
# create and score all permutations of two 5 card hands
cards.combinations(5).each do |c|
# create each hand from two 10 character strings
hand_a = Hand.new(c.join)
hand_b = Hand.new((cards-c).join)
score = hand_a.score + hand_b.score
# save the hand if it's the best
best_hands,best_score = [hand_a,hand_b],score if score > best_score
end
# now create and score the 10 card hand
ten_card_hand = Hand.new(cards.join)
best_hands,best_score = [ten_card_hand],ten_card_hand.score if ten_card_hand.score > best_score
# return score
[best_score, best_hands]
end
PlayerNames = {
'aaron' => 'Aaron Dickinson',
'adam' => 'Adam Dickinson',
'angel' => 'Angel Madigan',
'casey' => 'Casey Lowe',
'cathy' => 'Cathy Waits',
'dundee' => 'Dundee Reyno',
'eddy' => 'Eddy Cramm',
'eileen' => 'Eileen Gher',
'eryn' => 'Eryn Roston',
'francois' => 'François Bertrand',
'fred' => 'Fred Thompson',
'george' => 'George Rothrock',
'jeff' => 'Jeff Curley',
'jen' => 'Jen Gratz',
'john' => 'John Yuill',
'jonathan' => 'Jonathan Leghart',
'josh' => 'Josh Hart',
'lonna' => 'Lonna Leghart',
'mike' => 'Mike Skinner',
'peter' => 'Peter Heino',
'ramana' => 'Ramana Prakash',
'randy' => 'Randy Yumul',
'rob' => 'Rob Whyte',
'ryan' => 'Ryan Mack',
'shaelagh' => 'Shaelagh Skinner',
'stephanie' => 'Stéphanie Plante',
'steven' => 'Steven Gher',
'swaits' => 'Stephen Waits',
'tim' => 'Tim Flier',
'tj' => 'TJ Madigan',
}
total = Hash.new(0)
puts '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'
puts '<html><head>'
puts '<title>Super Babel Scoring</title>'
puts '<meta http-equiv="content-type" content="text/html; charset=UTF-8">'
puts '<link href="css/tripoli.simple.css" type="text/css" rel="stylesheet">'
puts '<!--[if IE]><link rel="stylesheet" type="text/css" href="css/tripoli.simple.ie.css"><![endif]-->'
puts ' <style type="text/css">
tr.even td {
background-color: #f6f6f6;
}
tr.odd td {
background-color: #ffffff;
}
</style>'
puts '</head><body>'
puts '<div class="content" style="text-align:left;margin:20px auto;padding:20px">'
puts '<h1>Hand Log</h1>'
puts '<table>'
puts '<tr><th>Player</th><th colspan=2>Hands</th><th>Score</th><th>Total</th></tr>'
even = false
IO.readlines(ARGV[0]).each do |line|
player,cards = line.chomp.split(/,/)
score,hands = score(cards)
total[player.downcase] += score
evenorodd = even ? 'even' : 'odd'
even = !even
puts "<tr class=\"#{evenorodd}\">"
puts " <td>#{PlayerNames[player]}<br/>[#{player}]</td>"
colspan = 3 - hands.size
hands.each do |h|
puts " <td colspan=\"#{colspan}\">"
h.to_s.split(/, ?/).each { |card| puts "<img src=\"img/#{card}.gif\">" }
puts "<br/>#{h.score_name} (#{h.score})</td>"
end
puts " <td>#{score}</td>"
puts " <td>#{total[player]}</td>"
puts '</tr>'
end
puts '</table>'
puts '<br/><hr/><br/>'
puts '<h1>Total Scores</h1>'
total.sort { |a,b| a[1] <=> b[1] }.reverse.each { |s| puts "#{s[1]} - #{PlayerNames[s[0]]} [#{s[0]}]<br/>" }
puts '</div>'
puts '</body>'
puts '</html>'
+12
View File
@@ -0,0 +1,12 @@
tj,tsjsqsksastcjcqckcac
tj,tsjsqsksastcjcqckcac
cathy,tsjsqsksastcjcqckcac
cathy,3d8c6s7d8h9s9dkdqd5d
cathy,2s3s4s5s6s7s8s9stsjs
eileen,2c3s4c5d6h7s8d9sthjs
randy,as3s4s5s6s7s8s9stsjs
jen,asadacah6s7s8s9stsjs
jen,asadackskd7s8s9stsjs
jen,asadacksks2c8h5stdjs
francois,2c3s4c5d6h7s8d9sthjs
stephanie,as3s4s5s6s7s8s9stsjs