Это вопрос кода-гольфа.
Для заданных целых чисел 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 "***"
Дополнительная слава (и возражение от меня) за ответы, которые не выполняют никакого установленного вычитания или эквивалентного.
code-golf
array-manipulation
Мартин Эндер
источник
источник
Ответы:
Желе, 9 байт
Никакое вычитание списка не использовалось в создании этого сообщения. Попробуйте онлайн!
Как это работает
источник
MATL , 18 байт
Первый вход
s
, второйn
Это работает в текущей версии (15.0.0) языка.
Попробуйте онлайн!
объяснение
источник
Haskell,
6160 байтПример использования:
2#2
->[[0,0],[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1],[-2,-2],[-2,-1],[-2,0],[-2,1],[-2,2],[-1,-2],[-1,2],[0,-2],[0,2],[1,-2],[1,2],[2,-2],[2,-1],[2,0],[2,1],[2,2]]
.Как это работает:
Редактировать: @xnor указал, что
mapM id
этоsequence
.источник
mapM id
короче чемsequence
.Mathematica, 83 байта
Чтобы использовать, вставьте в скрипт и введите
n
затемs
в отдельных строках. Печатает каждый массив в виде списка в кавычках, разделенных запятыми (например,{-1, 0, 1}
). Это работает, беря каждый список длиныn
с числами между[-cur..cur]
, и и печатая те, которые включают-cur
илиcur
. Затем он повторяет это для всехcur
в[0..s]
. (Этот пост содержит 19 символов!)источник
JavaScript (SpiderMonkey 30+), 134 байта
Использует подход декартовой власти и сортировки, о котором я думал отдельно, но я перекомпилировал SpiderMonkey в то время, поэтому я не смог ответить на этот вопрос до @Dennis.
источник