fork download
  1. object Cards {
  2. case object Spades extends Suit
  3. case object Clubs extends Suit
  4. case object Hearts extends Suit
  5. case object Diamonds extends Suit
  6.  
  7. trait FaceCard extends Rank
  8.  
  9. case object Jack extends FaceCard
  10. case object Queen extends FaceCard
  11. case object King extends FaceCard
  12. case object Ace extends FaceCard
  13.  
  14. case class ValueCard(n: Int) extends Rank
  15.  
  16. case class Card(rank: Rank, suit: Suit)
  17.  
  18. type Deck = List[Card]
  19.  
  20. def numberToRank(n: Int): Rank = n match {
  21. case 1 => Ace
  22. case x if x <= 10 => ValueCard(x)
  23. case 11 => Jack
  24. case 12 => Queen
  25. case 13 => King
  26. case _ => throw new IllegalArgumentException
  27. }
  28.  
  29. def numberToSuit(n: Int): Suit = n match {
  30. case 0 => Spades
  31. case 1 => Clubs
  32. case 2 => Hearts
  33. case 3 => Diamonds
  34. }
  35.  
  36. def apply(): Deck = (for(rank <- 1 to 13; suit <- 0 to 3) yield Card(numberToRank(rank), numberToSuit(suit))).to[List]
  37. }
  38.  
  39.  
  40. object Main extends App {
  41. println (Cards())
  42. }
Success #stdin #stdout 0.38s 382080KB
stdin
Standard input is empty
stdout
List(Card(Ace,Spades), Card(Ace,Clubs), Card(Ace,Hearts), Card(Ace,Diamonds), Card(ValueCard(2),Spades), Card(ValueCard(2),Clubs), Card(ValueCard(2),Hearts), Card(ValueCard(2),Diamonds), Card(ValueCard(3),Spades), Card(ValueCard(3),Clubs), Card(ValueCard(3),Hearts), Card(ValueCard(3),Diamonds), Card(ValueCard(4),Spades), Card(ValueCard(4),Clubs), Card(ValueCard(4),Hearts), Card(ValueCard(4),Diamonds), Card(ValueCard(5),Spades), Card(ValueCard(5),Clubs), Card(ValueCard(5),Hearts), Card(ValueCard(5),Diamonds), Card(ValueCard(6),Spades), Card(ValueCard(6),Clubs), Card(ValueCard(6),Hearts), Card(ValueCard(6),Diamonds), Card(ValueCard(7),Spades), Card(ValueCard(7),Clubs), Card(ValueCard(7),Hearts), Card(ValueCard(7),Diamonds), Card(ValueCard(8),Spades), Card(ValueCard(8),Clubs), Card(ValueCard(8),Hearts), Card(ValueCard(8),Diamonds), Card(ValueCard(9),Spades), Card(ValueCard(9),Clubs), Card(ValueCard(9),Hearts), Card(ValueCard(9),Diamonds), Card(ValueCard(10),Spades), Card(ValueCard(10),Clubs), Card(ValueCard(10),Hearts), Card(ValueCard(10),Diamonds), Card(Jack,Spades), Card(Jack,Clubs), Card(Jack,Hearts), Card(Jack,Diamonds), Card(Queen,Spades), Card(Queen,Clubs), Card(Queen,Hearts), Card(Queen,Diamonds), Card(King,Spades), Card(King,Clubs), Card(King,Hearts), Card(King,Diamonds))