Set, the card game: Difference between revisions
→{{header|Ruby}}: Add Ruby
imported>Rowsety Moid (Added Common Lisp) |
(→{{header|Ruby}}: Add Ruby) |
||
Line 1,010:
In the whole deck, there are 1080 sets.</pre>
=={{header|Ruby}}==
<syntaxhighlight lang="ruby" line>
ATTRIBUTES = [:number, :shading, :colour, :symbol]
Card = Struct.new(*ATTRIBUTES){ def to_s = values.join(" ") }
combis = %i[one two three].product(%i[solid striped open], %i[red green purple], %i[diamond oval squiggle])
PACK = combis.map{|combi| Card.new(*combi) }
def set?(trio) = ATTRIBUTES.none?{|attr| trio.map(&attr).uniq.size == 2 }
[4, 8, 12].each do |hand_size|
puts "#{"_"*40}\n\nCards dealt: #{hand_size}"
puts hand = PACK.sample(hand_size)
sets = hand.combination(3).select{|h| set? h }
puts "\n#{sets.size} sets found"
sets.each{|set| puts set, ""}
end</syntaxhighlight>
{{out|Sample output}}
<pre>________________________________________
Cards dealt: 4
one striped green squiggle
one open red squiggle
two striped green oval
three solid green diamond
0 sets found
________________________________________
Cards dealt: 8
three open green squiggle
three striped green diamond
three striped red oval
three open red oval
three solid red diamond
one solid purple diamond
two open red diamond
one striped red diamond
2 sets found
three striped green diamond
one solid purple diamond
two open red diamond
three solid red diamond
two open red diamond
one striped red diamond
________________________________________
Cards dealt: 12
one solid purple oval
one striped purple oval
one open red diamond
three striped purple squiggle
three striped purple oval
three solid green squiggle
three solid purple diamond
two solid green squiggle
two open green squiggle
three open green diamond
two open purple squiggle
one striped red squiggle
3 sets found
one striped purple oval
three solid purple diamond
two open purple squiggle
one open red diamond
three striped purple oval
two solid green squiggle
three solid green squiggle
two open purple squiggle
one striped red squiggle
</pre>
=={{header|Quackery}}==
|