Это вопрос кода-гольфа.
Для заданных целых чисел s и n задача состоит в том, чтобы вывести все массивы длины n, которые принимают значения от -s до s. Единственный поворот заключается в том, что вы должны вывести их в следующем порядке.
- Массив всех нулей длины n.
- Все массивы длины n с элементами от -1 до 1, за исключением любого массива, который вы выводили ранее.
- Все массивы длины n с элементами от -2 до 2, за исключением любого массива, который вы выводили ранее.
- И так до тех пор, пока вы не получите все массивы длины n с элементами от -s до s, исключая любой массив, который вы выводили ранее.
Вы должны вывести один массив на строку. Они могут быть разделены пробелом или запятой.
Вот некоторый несоответствующий код Python, который выводит массивы / списки / кортежи в правильном порядке.
import itertools
s = 3
n = 2
oldsofar = set()
newsofar = set()
for i in xrange(s):
for k in itertools.product(range(-i,i+1), repeat = n):
newsofar.add(k)
print newsofar - oldsofar
oldsofar = newsofar.copy()
print "***"
Дополнительная слава (и возражение от меня) за ответы, которые не выполняют никакого установленного вычитания или эквивалентного.