Dies ist eine Code-Golf-Frage.
Bei gegebenen ganzen Zahlen s und n besteht die Aufgabe darin, alle Arrays der Länge n auszugeben, die Werte von -s bis s annehmen. Die einzige Wendung ist, dass Sie sie in der folgenden Reihenfolge ausgeben müssen.
- Das All-Zero-Array der Länge n.
- Alle Arrays der Länge n mit Elementen von -1 bis 1, ausgenommen alle zuvor ausgegebenen Arrays.
- Alle Arrays der Länge n mit Elementen von -2 bis 2, ausgenommen alle zuvor ausgegebenen Arrays.
- Und so weiter, bis Sie zu allen Arrays der Länge n mit Elementen von -s bis s gelangen, mit Ausnahme aller zuvor ausgegebenen Arrays.
Sie sollten ein Array pro Zeile ausgeben. Sie können durch Leerzeichen oder Kommas getrennt sein.
Hier ist ein nicht konformer Python-Code, der die Arrays / Listen / Tupel in der richtigen Reihenfolge ausgibt.
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 "***"
Zusätzlicher Ruhm (und eine positive Bewertung von mir) für Antworten, die keine festgelegte Subtraktion oder Äquivalente ausführen.
code-golf
array-manipulation
Martin Ender
quelle
quelle
Antworten:
Gelee, 9 Bytes
Bei der Erstellung dieses Beitrags wurde keine Listensubtraktion verwendet. Probieren Sie es online aus!
Wie es funktioniert
quelle
MATL , 18 Bytes
Die erste Eingabe ist
s
, die zweite istn
Das funktioniert in aktuellen Version (15.0.0) der Sprache.
Probieren Sie es online aus!
Erläuterung
quelle
Haskell,
6160 BytesAnwendungsbeispiel:
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]]
.Wie es funktioniert:
Edit: @xnor darauf hingewiesen , dass
mapM id
istsequence
.quelle
mapM id
ist kürzer alssequence
.Mathematica, 83 Bytes
Gebrauch, setzte in einem Skript und Eingabe
n
danns
in separaten Zeilen. Druckt jedes Array als durch Kommas getrennte Liste in geschweiften Klammern (z{-1, 0, 1}
. B. ). Es funktioniert, indem jede Längenlisten
mit Zahlen zwischen[-cur..cur]
und diejenigen gedruckt wird, die entweder-cur
oder enthaltencur
. Es wiederholt dies dann für allecur
in[0..s]
. (Dieser Beitrag enthält 19 `Zeichen!)quelle
JavaScript (SpiderMonkey 30+), 134 Bytes
Verwendet den kartesischen Power-and-Sort-Ansatz, an den ich separat gedacht habe, aber ich habe SpiderMonkey zu diesem Zeitpunkt neu kompiliert, sodass ich dies vor @Dennis nicht beantworten konnte.
quelle