Запись чисел в лист в виде массива

253
04 сентября 2018, 19:30

Делаю реализацию игры Mastermind взял за основу алгоритм Кнута.

Столкнулся с проблемой создания Set всех возможных значений.

Значение хранится в массиве для которого я написал класс обертку.

Есть несколько параметров которые влияют на наш массив. Его длинна и количество возможных цифр.

То есть при длине массива 4 и количестве максимальных значений 6 у меня должно получится множество массивов от [0, 0, 0, 0] до [5, 5, 5, 5].

Вопрос в том как это можно сделать в цикле с отсечкой по максимальному значению. И как int превратить в массив, что-бы 1 давала массив [0, 0, 0, 1], а не [1].

Answer 1

Сделайте цикл по числам 0..6^4-1 и представьте счётчик цикла как четырёхразрядное число в шестеричной системе счисления (с помощью операций целочисленного деления и остатка от деления (взятия модуля)). Каждый получившийся разряд соответствует элементу массива.

десятичное =>    шестиричное
0          =>    0 0 0 0
1295       =>    5 5 5 5
679        =>    3 0 5 1    (216*3 + 36*0 + 6*5 + 1)

Псевдокод:

Digits = [0,0,0,0]
for i = 0.. 6*6*6*6-1:
   t = i
   for d = 0..3:
      Digit[d] = t % 6   
      //младший разряд слева - в нулевом индексе
      //для того, чтобы 1 соответствовал массиву [0,0,0,1] - сделать
      //Digit[3 - d] = t % 6   
      t = t / 6    ///целочисленное деление  
Answer 2

Просто добавлю реализацию описанного в соседнем ответе механизма с использованием Stream API и встроенными методами перевода значений между системами счисления:

int count = 4, max = 6;
long[][] array = LongStream
    .range(0, Math.round(Math.pow(max, count)))
    .mapToObj(i -> Long.toString(i, max))
    .map(s -> Stream.generate(() -> "0")
        .limit(count - s.length())
        .collect(Collectors.joining()) + s
    )
    .map(s -> s.chars()
        .mapToLong(l -> Long.parseLong(String.valueOf((char) l), max))
        .toArray())
    .toArray(long[][]::new);
System.out.println(Arrays.deepToString(array));
READ ALSO
Клиент - сервер на javafx

Клиент - сервер на javafx

Сделала авторизацию пользователя в javafx - приложенииУ меня есть 2 роли: ребенок и родитель

264
scene builder полноэкранный режим

scene builder полноэкранный режим

Как в scene builder сделать так, чтобы при развертывании окна любого размера равномерно растягивалась и сжималась картинка и ничего не сьезжало

220
Libgdx.net чем отличается от java.net

Libgdx.net чем отличается от java.net

Чем отличается libgdxnet от стандартной библиотеки java

195
Почему-то не работает кнопка android

Почему-то не работает кнопка android

У меня есть приложение на андроид и почему-то, я кстати так и не понял почему, у меня не работает моя единственная кнопка, хотя все должно нормально...

258