Set puzzle: Difference between revisions

→‎{{header|Ruby}}: Added Ruby sample.
(→‎{{header|Ruby}}: Added Ruby sample.)
Line 705:
(deal 12 6)
</lang>
 
=={{header|Ruby}}==
Brute force.
<lang ruby>COLORS = %i(red green purple) #use [:red, :green, :purple] in Ruby < 2.0
SYMBOLS = %i(oval squiggle diamond)
NUMBERS = %i(one two three)
SHADINGS = %i(solid open striped)
FEATURES = [COLORS, SYMBOLS, NUMBERS, SHADINGS]
 
@hand_size = 9
@num_sets_goal = 4
 
#create an enumerator which deals all combinations of @hand_size cards
@dealer = FEATURES[0].product(*FEATURES[1..-1]).shuffle.combination(@hand_size)
 
def get_all_sets(hand)
hand.combination(3).select do |candidate|
grouped_features = candidate.flatten.group_by{|f| f}
grouped_features.values.none?{|v| v.size == 2}
end
end
 
def get_puzzle_and_answer
sets = []
until sets.size == @num_sets_goal do
hand = @dealer.next
sets = get_all_sets(hand)
end
[hand, sets]
end
 
def print_cards(cards)
cards.each{|card| puts card.join(", ")}
puts
end
 
puzzle, sets = get_puzzle_and_answer
puts "Dealt #{puzzle.size} cards:"
print_cards(puzzle)
puts "Containing #{sets.size} sets:"
sets.each{|set| print_cards(set)}</lang>
{{output}}<pre>purple, diamond, one, open
red, oval, two, striped
purple, oval, two, open
purple, oval, one, striped
purple, diamond, two, open
green, squiggle, two, open
red, squiggle, three, striped
purple, squiggle, one, solid
green, oval, two, solid
 
Containing 4 sets:
purple, diamond, one, open
purple, oval, one, striped
purple, squiggle, one, solid
 
purple, diamond, one, open
red, squiggle, three, striped
green, oval, two, solid
 
red, oval, two, striped
purple, oval, two, open
green, oval, two, solid
 
green, squiggle, two, open
red, squiggle, three, striped
purple, squiggle, one, solid
 
siep@siep-desktop:~$ '/home/siep/.rvm/rubies/ruby-2.0.0-p247/bin/ruby' test1.rb
Dealt 9 cards:
green, oval, three, solid
green, diamond, one, open
purple, squiggle, three, striped
red, diamond, three, striped
purple, oval, one, solid
green, oval, three, open
purple, diamond, three, striped
green, squiggle, two, open
green, oval, three, striped
 
Containing 4 sets:
green, oval, three, solid
green, oval, three, open
green, oval, three, striped
 
green, diamond, one, open
green, oval, three, open
green, squiggle, two, open
 
purple, squiggle, three, striped
red, diamond, three, striped
green, oval, three, striped
 
red, diamond, three, striped
purple, oval, one, solid
green, squiggle, two, open
</pre>
 
=={{header|Tcl}}==
1,149

edits