Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
81
Task/Playing-cards/Ceylon/playing-cards.ceylon
Normal file
81
Task/Playing-cards/Ceylon/playing-cards.ceylon
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
import com.vasileff.ceylon.random.api { ... }
|
||||
|
||||
"""Run the example code for Rosetta Code ["Playing cards" task] (http://rosettacode.org/wiki/Playing_cards)."""
|
||||
shared void run() {
|
||||
variable value deck = Deck();
|
||||
print("New deck (``deck.size`` cards): ``deck``
|
||||
");
|
||||
|
||||
deck = deck.shuffle();
|
||||
print("Shuffeled deck (``deck.size`` cards): ``deck``
|
||||
");
|
||||
|
||||
print("Deal three hands: ");
|
||||
for (i in 1..3) {
|
||||
value [hand, _deck] = deck.deal();
|
||||
print("- Dealt ``hand.size`` cards to hand ``i`` : ``join(hand)``");
|
||||
deck = _deck;
|
||||
}
|
||||
|
||||
print("
|
||||
Deck (``deck.size`` cards) after dealing three hands: ``deck``");
|
||||
|
||||
}
|
||||
|
||||
abstract class Suit() of clubs | hearts | spades | diamonds {}
|
||||
|
||||
object clubs extends Suit() { string = "♣"; }
|
||||
object hearts extends Suit() { string = "♥"; }
|
||||
object spades extends Suit() { string = "♠"; }
|
||||
object diamonds extends Suit() { string = "♦"; }
|
||||
|
||||
abstract class Pip() of two | three | four | five | six | seven | eight | nine | ten | jack | queen | king | ace {}
|
||||
object two extends Pip() { string = "2"; }
|
||||
object three extends Pip() { string = "3"; }
|
||||
object four extends Pip() { string = "4"; }
|
||||
object five extends Pip() { string = "5"; }
|
||||
object six extends Pip() { string = "6"; }
|
||||
object seven extends Pip() { string = "7"; }
|
||||
object eight extends Pip() { string = "8"; }
|
||||
object nine extends Pip() { string = "9"; }
|
||||
object ten extends Pip() { string = "10"; }
|
||||
object jack extends Pip() { string = "J"; }
|
||||
object queen extends Pip() { string = "Q"; }
|
||||
object king extends Pip() { string = "K"; }
|
||||
object ace extends Pip() { string = "A"; }
|
||||
|
||||
class Card(shared Pip pip, shared Suit suit) {
|
||||
string = "``pip`` of ``suit``";
|
||||
}
|
||||
|
||||
|
||||
String join(Card[] cards) => ", ".join { *cards };
|
||||
|
||||
class Deck (cards = [ for (suit in `Suit`.caseValues) for (pip in `Pip`.caseValues) Card(pip, suit) ]) {
|
||||
shared Card[] cards;
|
||||
|
||||
shared Deck shuffle(Random rnd = platformRandom())
|
||||
=> if (nonempty cards)
|
||||
then Deck( [*randomize(cards, rnd)] )
|
||||
else this;
|
||||
|
||||
shared Integer size => cards.size;
|
||||
|
||||
shared Boolean empty => cards.empty;
|
||||
|
||||
string => if (size > 13)
|
||||
then "\n " + "\n ". join { *cards.partition(13).map((cards) => join(cards)) }
|
||||
else join(cards);
|
||||
|
||||
shared [Card[], Deck] deal(Integer handSize = 5) {
|
||||
if (handSize >= cards.size) {
|
||||
return [cards, Deck([])];
|
||||
}
|
||||
else {
|
||||
return [
|
||||
cards.initial(handSize),
|
||||
Deck(cards.skip(handSize).sequence())
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue