Bei einer Zahl n
, Output eine geordnete Liste von 1-basierten Indizes fallen entweder auf der Diagonalen einer n*n
quadratischen Matrix.
Beispiel:
Für eine Eingabe von 3
:
Das Quadrat soll sein:
1 2 3
4 5 6
7 8 9
Nun wählen wir alle die Indizes vertreten durch \
, /
oder X
( #
oder nicht-diagonalen Positionen abgelehnt werden)
\ # /
# X #
/ # \
Die Ausgabe muss sein:
[1,3,5,7,9]
Testfälle:
1=>[1]
2=>[1,2,3,4]
3=>[1,3,5,7,9]
4=>[1,4,6,7,10,11,13,16]
5=>[1,5,7,9,13,17,19,21,25]
Es wird keine akzeptierte Antwort geben. Ich möchte den kürzesten Code für jede Sprache wissen.
Antworten:
Oktave , 28 Bytes
Anonyme Funktion, die eine Zahl eingibt und einen Spaltenvektor von Zahlen ausgibt.
Probieren Sie es online!
quelle
JavaScript (ES6), 48 Byte
Gibt eine durch Bindestriche getrennte Liste von Ganzzahlen als Zeichenfolge aus.
Formatiert und kommentiert
Testfälle
Code-Snippet anzeigen
quelle
&
, um ein Byte zu speichern?4%3
und4%5
haben kein 1-Bit gemeinsam, aber beide sind ungleich Null.n=5
dass es nicht funktionieren würde.k%~-n&&k%-~n
sollte arbeiten. schöner trick mit dem separator!R ,
38353438 Bytes3 Byte gespeichert, als ich mich an die Existenz der
which
Funktion erinnerte ..., 1 Byte dank @Rift gespeichert+4 Byte für das Argument,
ec=T
wenn es von als vollständiges Programm aufgerufen wirdsource()
Probieren Sie es online!
Erläuterung:
quelle
d=diag(n<-scan());which(d|d[n:1,])
source
) ausgeführt wird, wird nichts gedruckt. Du musst anrufencat
. Siehe diesen Beitrag auf Meta .Gelee , 8 Bytes
Probieren Sie es online!
Verwendet Luis Mendos Algorithmus für seine MATL-Antwort.
quelle
ŒD
.ŒD
macht etwas ganz anderes als X einer bestimmten Größe.Oktave ,
4137 BytesDies funktioniert übrigens auch in MATLAB. Keine hinterhältige Octave-spezifische Funktionalität :)
Probieren Sie es online!
Erläuterung:
Anstatt eine quadratische Matrix zu erstellen und die beiden Diagonalen zu finden, habe ich gedacht, ich berechne die Diagonalen stattdessen direkt. Dies war 17 Bytes kürzer! =)
So sieht es aus, ohne
unique
:Ja, ich hätte wahrscheinlich die Reihenfolge der Diagonalen umkehren sollen, um sie menschenfreundlicher zu machen.
quelle
MATL , 6 Bytes
Probieren Sie es online!
Erläuterung
Gleicher Ansatz wie meine Octave-Antwort.
Betrachten Sie die Eingabe
3
als Beispiel.Die lineare Indizierung ist spaltenweise und basiert auf 1. Weitere Informationen finden Sie im Abschnitt zu Länge 12 hier .
quelle
t
ist dupliziert, nicht transponiert. Außerdem habe ich ein ausgearbeitetes Beispiel hinzugefügtPython 2 ,
5453 BytesProbieren Sie es online!
quelle
Oktave,
6854 BytesVielen Dank an @Stewie Griffin für die Einsparung von 14 Bytes!
Probieren Sie es online!
MATLAB, 68 Bytes
Erläuterung:
quelle
Mathematica, 42 Bytes
Probieren Sie es online!
@ KellyLowder Golf es bis zu ..
Mathematica, 37 Bytes
und @alephalpha warf den Tisch weg!
Mathematica, 34 Bytes
quelle
##&@@@Table[{i-#,1-i}+i#,{i,#}]⋃{}&
ist 5 Bytes kürzerUnion@@Range[{1,#},#^2,{#+1,#-1}]&
Proton , 41 Bytes
Probieren Sie es online!
quelle
MATL , 14 Bytes
Probieren Sie es online!
quelle
C (GCC) ,
6558 Bytes-7 Bytes dank Titus!
Probieren Sie es online!
quelle
i%-~n&&i%~-n||printf("%d ",i+1)
(-7 Bytes)C # (.NET Core) ,
97.83ByteProbieren Sie es online!
Die Änderung hier basiert auf der Verschiebung zwischen den zu findenden Zahlen. Die zwei Schichten, die bei 0 beginnen, sind
n-1
undn+1
, wenn alson=5
, die Zahlen fürn-1
wären0,4,8,12,16,20
und fürn+1
wären0,6,12,18,24
. Wenn Sie diese kombinieren und 1-Indizierung (anstelle von 0-Indizierung) geben, erhalten Sie1,5,7,9,13,17,19,21,25
. Der Offset vonn
wird durch bitweise Negation (bitweise Komplementoperation) erreicht, wobei~-n==n-1
und-~n==n+1
.Alte Version
Probieren Sie es online!
Bei diesem Ansatz werden die Spalten- und Zeilenindizes verwendet, um zu bestimmen, ob sich die Zahlen auf den Diagonalen befinden.
i/n
gibt den Zeilenindex an undi%n
den Spaltenindex an.Nur das Zahlenarray zurückgeben
Wenn davon ausgegangen wird, dass die Erstellung nur des Zahlenfelds zu den Bytekosten beiträgt, könnte auf der Grundlage des Vorschlags von Dennis.Verweij (
using System.Linq;
zusätzliche 18 Byte) :C # (.NET Core) , 66 + 18 = 84 Byte
Probieren Sie es online!
quelle
&
. Das Extra&
gibt es nur, um den Vergleich zu brechen, wenn die erste Eingabe falsch ist MSDNusing System;
? (Ich nehme an, esnamespace System.Linq
ist nicht gültig in einJavascript,
73Bytesalte Version
Dank @Shaggy 10 Bytes gespart
Zum ersten Mal Golf spielen! Ich hoffe, ich habe es nicht zu sehr vermasselt.
Code-Snippet anzeigen
quelle
filter
Funktion verwenden:!(--x%(n+1)&&x%(n-1))
und indem Sie Ihr Array wie folgt erstellen:[...Array(n*n+1).keys()]
[1...n*n]
Bereichs mitArray(n*n).fill().map((x,i)=>i+1)
"[...Array(n*n)].map((_,y)=>y+1)
.n=>[...Array(n*n+1).keys()].filter(x=>!(--x%-~n&&x%~-n))
Pyth ,
20 bis18 Bytes( Hier ist die ursprüngliche Version .)
Test Suite.
Pyth , 18 Bytes
Test Suite.
quelle
Perl 5 , 56 + 1 (-n) = 57 Bytes
Probieren Sie es online!
quelle
perl -e
. Die Befehlszeile für dieses Beispiel wäreperl -ne
. Das ist ein Unterschied von +1.Java (OpenJDK 8) , 71 Byte
Probieren Sie es online!
Antwort von Port of Scottinet .
quelle
Japt , 16 Bytes
Kann nicht besser aussehen, aber ich bin mir sicher, dass es möglich ist. Musste 2 Bytes für die unnötige Anforderung opfern, dass wir 1-Indexierung verwenden.
Probier es aus
quelle
Oktave, 32 Bytes
Probieren Sie es online!
quelle
PHP,
5654 + 1 Bytes+1 Byte für
-R
Flagdruckt Zahlen, denen Bindestriche vorangestellt sind. Laufen Sie als Pipe mit
-nR
oder probieren Sie es online aus .erfordert PHP 5.6 oder höher für den
**
Operator.Fügen Sie ein Byte für älteres PHP hinzu: Ersetzen Sie
;$z**.5<$n=$argn
durch$z=$argn;$z<$n*$n
.quelle
Ruby, 45 Bytes
Arbeitet intern als null indiziert. wenn Schecks
i
Modulon+1
odern-1
0, wenn dies der Fall druckti+1
.quelle