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"));
- }
}