To jest pytanie do golfa.
Biorąc pod uwagę liczby całkowite si, zadaniem jest wyprowadzenie wszystkich tablic o długości n, które przyjmują wartości od -s do s. Jedynym zwrotem jest to, że musisz je wyprowadzić w następującej kolejności.
- Tablica wszystkich zer o długości n.
- Wszystkie tablice o długości n z elementami od -1 do 1, z wyłączeniem tablicy, którą wcześniej wypisałeś.
- Wszystkie tablice o długości n z elementami od -2 do 2, z wyjątkiem tablicy, którą wcześniej wypisałeś.
- I tak dalej, aż dojdziesz do wszystkich tablic o długości n z elementami od -s do s, z wyłączeniem tablicy, którą wcześniej wypisałeś.
Powinieneś wypisać jedną tablicę na linię. Mogą być oddzielone spacją lub przecinkiem.
Oto trochę niezgodnego kodu python, który wyświetla tablice / listy / krotki we właściwej kolejności.
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 "***"
Dodatkowa chwała (i aprobata ode mnie) dla odpowiedzi, które nie wykonują żadnego odejmowania ani nie są równoważne.
code-golf
array-manipulation
Martin Ender
źródło
źródło
Odpowiedzi:
Galaretka, 9 bajtów
Przy tworzeniu tego postu nie zastosowano odejmowania listy. Wypróbuj online!
Jak to działa
źródło
MATL , 18 bajtów
Pierwsze wejście to
s
drugie ton
Działa to w bieżącej wersji (15.0.0) języka.
Wypróbuj online!
Wyjaśnienie
źródło
Haskell,
6160 bajtówPrzykład użycia:
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]]
.Jak to działa:
Edycja: @xnor wskazał, że tak
mapM id
jestsequence
.źródło
mapM id
jest krótszy niżsequence
.Mathematica, 83 bajty
Aby użyć, wprowadź skrypt i wprowadź
n
następnies
w osobnych wierszach. Drukuje każdą tablicę w postaci nawiasów klamrowych (np{-1, 0, 1}
.). Działa, biorąc każdą listę długościn
z liczbami pomiędzy[-cur..cur]
i drukując te, które zawierają jeden-cur
lubcur
. Następnie powtarza to dla wszystkichcur
in[0..s]
. (Ten post zawiera 19 `znaków!)źródło
JavaScript (SpiderMonkey 30+), 134 bajty
Stosuje podejście kartezjańskie-moc i sortuj, o czym myślałem osobno, ale rekompilowałem wtedy SpiderMonkey, więc nie mogłem odpowiedzieć na to przed @Dennis.
źródło