Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Pattern Matching Wojtek Mach
Slide 2
Slide 2 text
Card „Ace of Spades”
Slide 3
Slide 3 text
Card "As" „Ace of Spades”
Slide 4
Slide 4 text
Card "A♠" „Ace of Spades”
Slide 5
Slide 5 text
Card { :A, :s } „Ace of Spades”
Slide 6
Slide 6 text
Card { rank, suit } „Ace of Spades”
Slide 7
Slide 7 text
Hand { {:A,:s}, {:A,:h}, {6,:s}, {6,:d}, {2,:c} } „Aces and Sixes”
Slide 8
Slide 8 text
Ranks •Straight Flush •Four of a Kind •Full House •Flush •Straight •Three of a Kind •Two Pairs •One Pair •High Card
Slide 9
Slide 9 text
Conditionals Card = Struct.new :rank, :suit def rank(hand) if hand[0].rank == hand[1].rank && hand[0].rank == hand[2].rank && hand[0].rank == hand[3].rank :four_of_a_kind elsif hand[0].rank == hand[1].rank && hand[0].rank == hand[2].rank && hand[3].rank == hand[4].rank :full_house # ... end end
Slide 10
Slide 10 text
OOP! Card = Struct.new :rank, :suit class Hand def four_of_a_kind? cards[0].rank == cards[1].rank && cards[0].rank == cards[2].rank && cards[0].rank == cards[3].rank end def full_house? # ... end # ... end
Slide 11
Slide 11 text
Pattern matching case value do pattern1 -> result1 pattern2 -> result2 # ... end
Slide 12
Slide 12 text
Pattern matching case hand do { card1, card2, card3, card4, card5 } -> rank1 { card1, card2, card3, card4, card5 } -> rank2 # ... end
Slide 13
Slide 13 text
Pattern matching case hand do { card1, card2, _ , _ , card5 } -> rank1 { card1, card2, _ , _ , card5 } -> rank2 # ... end
Slide 14
Slide 14 text
Pattern matching case hand do { {r1,s1}, {r2,s2}, _ , _ , {r5,s5} } -> rank1 { {r1,s1}, {r2,s2}, _ , _ , {r5,s5} } -> rank2 # ... end
Slide 15
Slide 15 text
Pattern matching case hand do { {a,_}, {a,_}, {a,_}, {a,_}, _ } -> :four_of_a_kind end
Slide 16
Slide 16 text
Pattern matching case hand do { {a,_}, {a,_}, {a,_}, {a,_}, _ } -> :four_of_a_kind { {a,_}, {a,_}, {a,_}, {b,_}, {b,_} } -> :full_house end
Slide 17
Slide 17 text
Pattern matching case hand do { {a,_}, {a,_}, {a,_}, {a,_}, _ } -> :four_of_a_kind { {a,_}, {a,_}, {a,_}, {b,_}, {b,_} } -> :full_house { {_,a}, {_,a}, {_,a}, {_,a}, {_,a} } -> :flush end
Slide 18
Slide 18 text
Pattern matching case hand do { {a,_}, {a,_}, {a,_}, {a,_}, _ } -> {:four_of_a_kind, a} { {a,_}, {a,_}, {a,_}, {b,_}, {b,_} } -> {:full_house, a, b} { {_,a}, {_,a}, {_,a}, {_,a}, {_,a} } -> {:flush} end
Slide 19
Slide 19 text
Pattern matching case hand do { {a,_}, {a,_}, {a,_}, {a,_}, _ } -> {:four_of_a_kind, a} { {a,_}, {a,_}, {a,_}, {b,_}, {b,_} } -> {:full_house, a, b} { {_,a}, {_,a}, {_,a}, {_,a}, {_,a} } -> {:flush} # straights are tricky! end
Slide 20
Slide 20 text
Thanks! @wojtekmach @wojtekmach