Geben Sie zwei positive Zahlen ein N >= 2
und N <= 100
erstellen Sie eine Matrix, die den folgenden Regeln folgt:
- Die erste Nummer beginnt an der Position
[0,0]
- Die zweite Zahl beginnt an der Position
[0,1]
- Dritte Nummer geht unter Erste Nummer (Position
[1,0]
) - Die folgenden Zahlen gehen in "Schrägstrich" -Richtung
- Verwendeter Zahlenbereich ist
[1, N1 * N2]
. Die Zahlen gehen also von 1 bis zum Ergebnis der Multiplikation beider Eingänge.
Eingang
- Zwei Zahlen
N >= 2
undN <= 100
. Erste Zahl ist die Anzahl der Zeilen, zweite Zahl die Anzahl der Spalten.
Ausgabe
- Matrix. (Kann als mehrdimensionales Array oder als Zeichenfolge mit Zeilenumbrüchen ausgegeben werden.)
Beispiel:
Ausgegebene Zahlen 3 and 5
:
1 2 4 7 10
3 5 8 11 13
6 9 12 14 15
Gegebene Zahlen 2 and 2
1 2
3 4
Gegebene Zahlen 5 and 5
1 2 4 7 11
3 5 8 12 16
6 9 13 17 20
10 14 18 21 23
15 19 22 24 25
Der kürzeste Code in Bytes gewinnt.
Antworten:
Gelee ,
65 BytesProbieren Sie es online!
Wie es funktioniert
quelle
<atom><atom>¥þ
aber ich kann nicht die richtige Kombination finden.oþ++þ
ist in der Nähe, aber nicht ganz da[1, 2, 3, 4, 5, 6]
.Ụ
sortiert dieses Array unter Verwendung des Schlüssels, der1
auf[1, 1]
,2
auf[1, 2]
,3
auf[2, 1]
usw. abgebildet ist. Im Wesentlichen wird der Index jedes Paares aus dem Array "Python 3 , 91 Bytes
Probieren Sie es online!
quelle
R ,
1016054 ByteProbieren Sie es online!
Vielen Dank an @nwellnhof für den Vorschlag von
rank
Ports Dennis 'Jelly Antwort .
Alte Antwort, 101 Bytes:
Probieren Sie es online!
split
erledigt hier den größten Teil der Arbeit; Möglicherweise gibt es einen Golf-Algorithmus, aber das funktioniert definitiv.Erläuterung:
Probieren Sie es online! - Sie können einen Umbruch
print
um eine der rechten Seiten der Zuweisungen verwenden<-
, um die Zwischenergebnisse anzuzeigen, ohne das Endergebnis zu ändern, daprint
die Eingabe zurückgegeben wird.quelle
rank(x,1,"f")
ist 2 Bytes kürzer alsorder(order(x))
.rank(x,,"l")
wird das auch lost
.Java 10,
121120109105 Bytes-11 Bytes dank @ OlivierGrégoire .
-4 Bytes dank @ceilingcat .
Probieren Sie es online aus.
Erläuterung:
quelle
x,y
/width,height
J , 15 Bytes
-4 weitere Bytes für diese Lösung um Meilen. Vielen Dank!
Probieren Sie es online!
J ,
2219 Bytes-3 Bytes dank FrownyFrog!
Probieren Sie es online!
Eine Implementierung von Dennis 'fantastischer Jelly-Lösung in J.
Erläuterung:
Dyadisches Verb, nimmt linkes und rechtes Argument (mfn)
+/&i.
erstellt Listen 0..m-1 und 0..n-1 und erstellt eine Additionstabelle für diese:[:>:@/:@/:@,
Reduziert die Tabelle, bewertet die Liste zweimal und fügt 1 hinzu:,$
formt die Liste zurück in die MxN-Tabelle:quelle
-@],\
→,$
für −3 Bytes.$1(+/:@;)</.@i.
mit Eingabe als Array[r, c]
/.
aber konnte Ihr Ergebnis nicht erreichen :)APL + WIN, 38 oder 22 Bytes
Fordert zur Eingabe einer Ganzzahlspalte und einer Zeile auf:
oder:
basierend auf Dennis 'doppelter Bewertung. Verpasst das :(
quelle
Wolfram Language (Mathematica) ,
7367 BytesZählen Sie die Elemente in den obigen Zeilen:
Min[j+k,#2]~Sum~{k,i-1}
Zählen Sie die Elemente in der aktuellen Zeile und darunter:
Max[j-k+i-1,0]~Sum~{k,i,#}
In einen Tisch legen und 1. Voila hinzufügen:
Update: Ich habe festgestellt, dass es einen kürzeren Weg gibt, um alle Positionen vor einer normalerweise festgelegten Position in der Matrix mit nur einer Summe über zwei Dimensionen zu zählen:
Probieren Sie es online!
Probieren Sie es online!
quelle
APL (Dyalog Unicode) ,
1412 BytesProbieren Sie es online!
-2 danke an ngn , aufgrund seiner geschickten Verwendung von
↑⍳
.Basierend auf Dennis '5-Byte-Jelly-Lösung.
quelle
∘.+⌿⍳¨⍵
->+/↑⍳⍵
⍳
kombiniert mit↑
.05AB1E , 23 Bytes
Probieren Sie es online!
quelle
Python 3 , 164 Bytes
Probieren Sie es online!
Dies ist definitiv nicht die kürzeste Lösung, aber ich fand, dass es Spaß gemacht hat.
quelle
from numpy import*
und beide fallen zu lassenn.
ist etwas kürzer. Sie können das Leerzeichen auch bei ablegen) for
. Und Python Ändern 2 können Sie ändern ,return a
umprint a
(3 in Python wäre es der gleiche Byte-count seinprint(a)
).import*
. Ich werde Dennis 'Antwort niemalsPython 2 , 93 Bytes
Probieren Sie es online!
Semi-Ungolfed-Version:
quelle
Japt ,
2524 BytesKaum elegant, aber erledigt den Job. Das Arbeiten mit 2D-Daten in Japt ist schwierig.
Ich habe das
-Q
Flag in TIO hinzugefügt, um die Visualisierung der Ergebnisse zu vereinfachen. Es hat keinen Einfluss auf die Lösung.Dank Oliver ein Byte weggebissen .
Probieren Sie es online!
quelle
×
, können Sie ersetzen*V
mitN×
.JavaScript (Node.js) , 103 Byte
Probieren Sie es online!
quelle
TI-Basic, 76 Bytes
Fordert zur Eingabe durch den Benutzer auf und gibt die Matrix in zurück
Ans
und druckt sie aus.TI-Basic ist eine Token-Sprache . Alle hier verwendeten Token sind ein Byte, außer
[A]
2 Byte.Hinweis: TI-Basic (zumindest beim TI-84 Plus CE) unterstützt nur Matrizen bis zu 99x99 und dieses Programm auch.
Erläuterung:
quelle
Perl 6 ,
6159 BytesProbieren Sie es online!
Ein weiterer Port von Dennis 'Jelly-Lösung.
quelle
Java (JDK 10) ,
142131 BytesProbieren Sie es online!
Erläuterung:
Ein großes Dankeschön an Kevin Cruijssen, weil ich nicht wusste, wie ich meinen Code auf tio ausführen soll .
Einige Codes wie die Kopf- und Fußzeile werden ihm gestohlen. -> Seine Antwort
quelle
PHP, 115 Bytes
ein ziemlich fauler Ansatz; wahrscheinlich nicht die kürzest mögliche.
anonyme Funktion, verwendet Breite und Höhe als Parameter, gibt 2D-Matrix zurück
versuche es online
quelle
JavaScript (Node.js) ,
108105101100 ByteProbieren Sie es online!
quelle
Attache , 45 Bytes
Probieren Sie es online!
Anonymes Lambda, bei dem die Parameter gewechselt werden. Dies kann für +1 Byte festgelegt werden, indem Sie
~
dem Programm voranstellen . Die Testsuite macht das schon.Erläuterung
Dieser Ansatz ähnelt der J-Antwort und der Jelly-Antwort .
Die erste Idee ist, eine Wertetabelle zu generieren:
Dies erzeugt eine Additionstabelle unter Verwendung der Bereiche beider Eingabeparameter. Für die Eingabe
[5, 3]
gibt dies:Dann reduzieren wir dies mit
Flat!
:Unter Verwendung des Ansatzes in der J-Antwort können wir das Array zweimal bewerten (dh Indizes sortierter Werte zurückgeben), mit
Grade//2
:Dann müssen wir die Werte richtig aufteilen, wie in der Jelly-Antwort. Wir können alle
_
Elemente schneiden , um dies zu tun:Dann müssen wir nur noch die 0-Indizierung von Attache ausgleichen mit
+1
:Und so haben wir das Ergebnis.
quelle
Python 3 , 259 Bytes
Also habe ich das auf seltsame Weise gemacht. Mir ist aufgefallen, dass das Array zwei Muster aufweist.
Das erste ist, wie das Muster der oberen Reihen den Unterschied zwischen jedem Term hat, der von 1 -> h zunimmt, wobei h die Höhe und l die Länge ist. Also konstruiere ich die oberste Reihe basierend auf diesem Muster
Für eine Matrix von dim (3,4), die a ergibt, sehen
max RoC = 3
wir die oberste Zeile des FormularsNehmen wir stattdessen an, dass das dim (3,9), das a
max RoC = 3
ergibt, stattdessen eine obere Reihe von ergibtDas zweite Muster ist, wie sich die Zeilen voneinander ändern. Wenn wir die Matrix betrachten:
und subtrahiere jede Zeile von der darunter liegenden Zeile (ignoriere die zusätzliche Zeile), die wir erhalten
Wenn wir diese Matrix sehen, können wir feststellen, dass diese Matrix die Sequenz ist,
2 3 4 5 5 4 3 2
bei der um jede Zeile 5 Terme dieses Musters für jede Zeile um 1 verschoben sind. Siehe unten für visuelle.Um die endgültige Matrix zu erhalten, nehmen wir unsere erste Zeile und geben die Zeile aus, die mit den 5 benötigten Begriffen dieses Musters hinzugefügt wurde.
Dieses Muster wird immer die Eigenschaften der Anfang
2-> max value
und das Ende ,max value -> 2
wo diemax value = min(h+1, l)
und die Anzahl der Male , dass der maximale Wert angezeigt ist ,appearances of max = h + l -2*c -2
woc = min(h+1, l) - 2
Insgesamt sieht meine Methode zum Erstellen neuer Zeilen also so aus
Relevanter Code unten. Es war zwar nicht kurz, aber ich mag die Methode trotzdem.
Probieren Sie es online!
quelle
Japt, 20 Bytes
Versuch es
quelle