Я пытаюсь придумать новый алгоритм для Болгарского Солитара.В интернете есть только одно решение для этой игры, и все просто копируют его.Здесь я пытаюсь сделать немного по-другому.Это описание
В этом задании вы будете моделировать игру «Болгарский пасьянс».Игра начинается с 45 карт.Случайно разделите их на несколько стопок.Например, вы можете начать со стопок размером 20, 5, 1, 9 и 10. В каждом раунде вы берете одну карту из каждой колоды, образуя новую колоду из этих карт.Например, исходная конфигурация образца будет преобразована в сваи размером 19, 4, 8, 10 и 5. Пасьянс заканчивается, когда сваи имеют размеры 1, 2, 3, 4, 5, 6, 7, 8,и 9, в каком-то порядке.(Можно показать, что вы всегда получаете такую конфигурацию.) В вашей программе создайте случайную начальную конфигурацию и распечатайте ее.Затем продолжайте применять шаг пасьянса и распечатайте результат.Остановитесь, когда будет достигнута окончательная конфигурация пасьянса.
Итак, что я сделал, я создал 2 Dimensional ArrayList и наполнил его случайным количеством стопок.У каждой колоды есть несколько карт.Сумма ровно 45.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class BulgarianSolitare {
public static void main(String[] args) {
int numberOfCards = 45;
Random random = new Random();
int numberOfPiles = random.nextInt(numberOfCards) + 1;
System.out.println("Number of piles - " + numberOfPiles);
ArrayList<ArrayList<Integer>> piles = new ArrayList();
ArrayList<Integer> eachPile = new ArrayList();
ArrayList<Integer> lastPile = new ArrayList();
if (numberOfCards % numberOfPiles != 0) {
for (int i = 0; i < numberOfPiles; i++) {
for (int j = 1; j <= numberOfCards / numberOfPiles; j++) {
eachPile.add(j);
}
piles.add(eachPile);
eachPile = new ArrayList();
}
for (int i = 0; i < numberOfCards % numberOfPiles; i++) {
lastPile.add(i + 1);
}
piles.add(lastPile);
eachPile = new ArrayList();
} else {
for (int i = 0; i < numberOfPiles; i++) {
for (int j = 1; j <= numberOfCards / numberOfPiles; j++) {
eachPile.add(j);
}
piles.add(eachPile);
eachPile = new ArrayList();
}
}
System.out.println("This is your beginning set up:");
for (int i = 0; i < piles.size(); i++) {
System.out.print("[" + piles.get(i).size() + "]");
}
}
}
Выход для этой программы.
Количество свай - 17
Это ваша начальная установка:
[2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [11]
Теперь мне нужнонаписать основную логику программы, но все, что я пишу, я получаю ошибку out obounds.Может кто-нибудь помочь мне с алгоритмом этой игры.