private final Rank rank;
private boolean hidden;
+ Card(Suit suit, Rank rank) {
+ this(suit, rank, true);
+ }
+
Card(Suit suit, Rank rank, boolean hidden) {
this.suit = suit;
this.rank = rank;
this.hidden = hidden;
}
- Card(Suit suit, Rank rank) {
- this(suit, rank, true);
- }
+ @Override
+ public String toString() {
+ if (isHidden())
+ return " * ";
- Suit getSuit() {
- return suit;
+ return String.format("%s%2s", suit, rank);
}
Rank getRank() {
return rank;
}
+ Suit getSuit() {
+ return suit;
+ }
+
boolean isHidden() {
return hidden;
}
void reveal() {
hidden = false;
}
-
- @Override
- public String toString() {
- if (isHidden())
- return " * ";
-
- return String.format("%s%2s", suit, rank);
- }
}
import java.util.stream.Collectors;
final class Depot {
+ private static boolean isValidNextCard(Card lastCard, Card nextCard) {
+ if (nextCard.getSuit().isRed() == lastCard.getSuit().isRed())
+ return false;
+
+ return lastCard.getRank().isSuccessorOf(nextCard.getRank());
+ }
+
+ private static boolean isValidRun(List<Card> run) {
+ Card prev = null;
+
+ for (Card next : run) {
+ if (next.isHidden() || (prev != null && !isValidNextCard(prev, next)))
+ return false;
+
+ prev = next;
+ }
+
+ return true;
+ }
+
private final List<Card> cards;
Depot(List<Card> cards) {
this.cards.getLast().reveal();
}
- private static boolean isValidNextCard(Card lastCard, Card nextCard) {
- if (nextCard.getSuit().isRed() == lastCard.getSuit().isRed())
- return false;
+ @Override
+ public String toString() {
+ if (cards.isEmpty())
+ return "< >";
- return lastCard.getRank().isSuccessorOf(nextCard.getRank());
+ return cards.stream().map(String::valueOf).collect(Collectors.joining("\n"));
}
private boolean isValidPlacement(Card card) {
return isValidNextCard(cards.getLast(), card);
}
- private static boolean isValidRun(List<Card> run) {
- Card prev = null;
-
- for (Card next : run) {
- if (next.isHidden() || (prev != null && !isValidNextCard(prev, next)))
- return false;
-
- prev = next;
- }
-
- return true;
+ boolean add(Card card) {
+ return add(List.of(card));
}
boolean add(List<Card> run) {
return true;
}
- boolean add(Card card) {
- return add(List.of(card));
- }
-
Optional<List<Card>> remove(int size) {
if (size < 1)
throw new IllegalArgumentException("Size must be a positive integer");
return Optional.of(run);
}
-
- @Override
- public String toString() {
- if (cards.isEmpty())
- return "< >";
-
- return cards.stream().map(String::valueOf).collect(Collectors.joining("\n"));
- }
}
private final Suit suit;
Foundation(Suit suit) {
- this.cards = new LinkedList<>();
+ cards = new LinkedList<>();
this.suit = suit;
}
- Suit getSuit() {
- return suit;
- }
+ @Override
+ public String toString() {
+ if (cards.isEmpty())
+ return String.format("( %s )", suit);
- boolean isFull() {
- return cards.size() == Rank.RANKS.size();
+ return String.format("(%s)", cards.getLast());
}
private boolean isValidNextCard(Card nextCard) {
- if (nextCard.getSuit() != this.suit)
+ if (nextCard.getSuit() != suit)
return false;
if (cards.isEmpty())
return true;
}
- @Override
- public String toString() {
- if (cards.isEmpty())
- return String.format("( %s )", suit);
+ Suit getSuit() {
+ return suit;
+ }
- return String.format("(%s)", cards.getLast());
+ boolean isFull() {
+ return cards.size() == Rank.RANKS.size();
}
}
private static Waste waste = new Waste();
private static Foundation foundation = new Foundation(Suit.CLUBS);
- private static void printTable() {
- System.out.printf("%s %s\n\n%s\n\n", stock, waste, foundation);
- }
-
public static void main(String[] args) {
Card c;
printTable();
}
+ private static void printTable() {
+ System.out.printf("%s %s\n\n%s\n\n", stock, waste, foundation);
+ }
+
}
this.symbol = symbol;
}
- boolean isSuccessorOf(Rank rank) {
- return this.ordinal() == rank.ordinal() + 1;
- }
-
@Override
public String toString() {
return symbol;
}
+
+ boolean isSuccessorOf(Rank rank) {
+ return ordinal() == rank.ordinal() + 1;
+ }
}
private final List<Card> cards;
Stock() {
- this.cards = new LinkedList<>();
+ cards = new LinkedList<>();
for (Suit s : Suit.SUITS)
for (Rank r : Rank.RANKS)
Collections.shuffle(cards);
}
- Card draw() {
- return cards.removeLast();
- }
-
- boolean isEmpty() {
- return cards.isEmpty();
- }
-
@Override
public String toString() {
if (isEmpty())
return String.format("{%s}", cards.getLast());
}
+
+ Card draw() {
+ return cards.removeLast();
+ }
+
+ boolean isEmpty() {
+ return cards.isEmpty();
+ }
}
this.red = red;
}
- boolean isRed() {
- return red;
+ @Override
+ public String toString() {
+ return symbol;
}
boolean isBlack() {
return !red;
}
- @Override
- public String toString() {
- return symbol;
+ boolean isRed() {
+ return red;
}
}
private final List<Card> cards;
Waste() {
- this.cards = new LinkedList<>();
+ cards = new LinkedList<>();
+ }
+
+ @Override
+ public String toString() {
+ if (isEmpty())
+ return "{ }";
+
+ return cards.stream().map(String::valueOf).collect(Collectors.joining("|", "[", "]"));
}
void add(Card card) {
boolean isEmpty() {
return cards.isEmpty();
}
-
- @Override
- public String toString() {
- if (isEmpty())
- return "{ }";
-
- return cards.stream().map(String::valueOf).collect(Collectors.joining("|", "[", "]"));
- }
}