Offensichtlich wäre diese Herausforderung mit separaten Funktionen und Bibliotheken trivial, so dass sie nicht zulässig sind.
Ihr Code muss einer ECMAscript-Spezifikation entsprechen (jede Spezifikation reicht aus), sodass keine browserspezifischen Antworten möglich sind.
Auf das Array muss zugegriffen werden, nachdem es instanziiert wurde.
Ich habe eine Antwort, die ich vorerst zurückhalten werde.
Hinweis: Diese Herausforderung ist spezifisch für JavaScript, da die Erstellung mehrdimensionaler Arrays in JavaScript bekanntermaßen unpraktisch ist.
code-golf
javascript
array-manipulation
Shmiddty
quelle
quelle
[10]
[[10]]
?Antworten:
Javascript ES6, 30
ES6 in Aktion :)
quelle
Javascript, 34 Bytes
Da es anscheinend in Ordnung ist, die Zeilen nach Verweis gleich zu machen, ist es anscheinend in Ordnung, sich auf diese Tatsache zu verlassen. Dies hilft uns, eine for-Schleife abzuschalten, indem die Tabelle gleichzeitig mit den Zeilen erstellt wird. Also, hier ist mein neuer Kandidat.
Da
r[0]
undb[0]
während der Schleife überschrieben werden, können sie Müll enthalten. Dies gibt uns einen weiteren freien Ausführungsplatz, um einige Kommas zu entfernen. Das geht leiderr=b=[]
nicht, da sie dann gleich by-ref sind.Außerdem skaliert es gut (99x99 ist immer noch 34 Bytes), benötigt kein ES5 (die neuen Funktionen haben jedenfalls furchtbar lange Namen) und ist als Bonus unlesbar :-)
quelle
c=[b=[i=10]];while(i--)b[i]=c,c[i]=1
. Hätte wissen sollen!!!ECMAScript 6 - 33 Zeichen
Gibt ein 10x10-Array mit "1" aus.
Dies missbraucht die Tatsache, dass die Zeichenfolge "1111111111" über alle erforderlichen Eigenschaften verfügt, die behandelt werden müssen, als wäre sie ein Array, sodass Sie den Spread-Operator verwenden können
...
um es in ein Array von Zeichen umzuwandeln und es dann einer Kopie des Arrays mit zuzuordnen jedes Element verweist auf das "Original".Oder mit nur einem Variablennamen (für 35 Zeichen):
Oder für zusätzliche Verwirrung (aber bei 45 Zeichen)
oder (43 Zeichen)
quelle
...
Betreibers!44 Bytes
Vorherige Version:
quelle
^
für!=
45 Zeichen
Jedes Element zeigt auf dasselbe Array, aber die Spezifikation erwähnt nichts dagegen!
quelle
x=
am Anfang eine zusätzliche habenJavascript, 51
Oder wenn alle Indizes auf dasselbe Array zeigen dürfen:
Javascript, 41
quelle
a[0][1] = 5; console.log(a[1][1])
).JavaScript,
4544 BytesDas Beste, was ich bisher habe. (Versuche immer noch).
Kürzer (danke mellamokb!)
quelle
for
fast immer demwhile
Golfen vorzuziehen ist . Die Grundaussage ist gleich lang (while()
vsfor(;;)
),for
gibt Ihnen aber mehr Flexibilität. In diesem Fall können Siex=[]
den Initialisierer von eingebenfor
und ein Zeichen speichern.Javascript, 47
Da meine ursprüngliche Lösung geschlagen wurde, werde ich sie jetzt posten.
Leider
0x3FF.toString(2)
ist es nicht ganz so effizient wie das Auflisten des Strings, was nicht ganz so effizient ist wie das statische Deklarieren des Arrays.Sie können einen Charakter folgendermaßen abschneiden ( 46 ):
Sie können 2 weitere Zeichen wie folgt speichern: ( 44 )
Eine weitere 44-Byte-Lösung mit JS 1.8-Funktionsausdruck-Closures (nur FF atm):
quelle
i
ina
wie folgt aus :a=[i=10]
JavaScript, 57 Bytes
Vor dem Golfen:
Hinweis: Dies erfordert ES5, erwarten Sie also nicht viel vom IE.
quelle
eval('a=['+(b=Array(11)).join('['+b.join("1,")+'],')+']')
. Abgesehen davon, dass ich unterschiedliche Anführungszeichen und die Variable inside eval habe, sind diese genau gleicha=eval("["+Array(11).join("[1,1,1,1,1,1,1,1,1,1],")+"]")
hat 56 Jahre54
Dies wurde bereits geschlagen, aber hier ist meine Lösung:
quelle
x=
vorx().map
(odery=
usw.) einfügen , um es zugänglich zu machen, richtig?39 Bytes
Verwenden des Array-Verständnisses in ECMAScript 7:
quelle
[1,1,1,1,1,1,1,1,1,1]
mitArray(10).fill(1)
rasiert 4 Zeichen.56 Zeichen
Ziemlich lange Antwort, aber besser für 100x100 usw.
quelle
Javascript, 36 Zeichen (ECMA 6)
Getestet in meinem Browser (Firefox unter Ubuntu) und im Codecademy Javascript Interpreter
quelle
ES6, 54
Es ist nicht die kürzeste, aber ich dachte, ich würde anders vorgehen als hier.
quelle
a
diese Version bereits existierte und funktioniert zu haben schien. Die aktualisierte Version sollte in FF und Node mit den --harmony-Flags funktionieren.61 zum Spaß
quelle
Javascript -
646359 ZeichenEin Zeichen wurde gespeichert, indem der Iterator im Array ausgeblendet wurde.Einige Zeichen mit Jans Vorschlägen gespeichert.
Lesbare Version:
Ja, es ist nicht die kürzeste Lösung, sondern ein anderer Ansatz ohne Verwendung von vorgefertigten
[1,1,1,1,1,1,1,1,1,1]
Arrays.quelle
i-->0
zui--
. Der "Downto" -Operator ist zwar nett, aber nicht wirklich notwendig.==0
könnte auch durch zwei Bits rasiert werden. Auch auslassenvar
. Während normalerweise nützlich, sind vier nutzlose Bytes hier einfach nicht akzeptabel.Javascript 69 Zeichen (für jetzt)
quelle
JavaScript 73
quelle
r=[10],
tut nix da du sofort überschreibstr[0]
. Sie müssen nicht deklarierens
und können dies einfach tun,"1111111111".split("")
aber das sind 22 Zeichen, wohingegen[1,1,1,1,1,1,1,1,1,1]
es nur 21 Zeichen sind.Javascript ES6, 53
Aber die im Array sind Strings :)
quelle
Javscript ES6, 53
quelle
JavaScript (ES6), 35 Byte
quelle
f=>Array(10).fill(Array(10).fill(1))
eine anonyme Funktion für 36 Byte definieren.