Für diese Herausforderung sollten Sie ein Programm oder eine Funktion schreiben, die die Diagonalen einer gegebenen Quadratmatrix ausgibt. Wenn Sie jedoch die Zeilen und Spalten des Quellcodes Ihrer Lösung transponieren, sollte dies stattdessen ein Programm oder eine Funktion sein, die die Antidiagonalen der Matrix zurückgibt. Lesen Sie weiter für Details ...
Regeln
- Der Quellcode Ihrer Lösung wird als 2D-Zeichenraster betrachtet, das durch einen Standard-Zeilenumbruch Ihrer Wahl (Zeilenvorschub, Wagenrücklauf oder eine Kombination aus beiden) getrennt ist.
Keine Zeile in Ihrem Quellcode darf länger als die vorherige sein. Hier einige Beispiele für gültige Layouts:
### ### ###
######## ####### ### ### #
Und hier ist ein Beispiel für ein ungültiges Layout (da die dritte Zeile länger als die zweite ist):
###### #### ##### ###
Ihre beiden Lösungen sollten sich gegenseitig transponieren, dh Sie sollten sich durch Vertauschen von Zeilen und Spalten voneinander lösen. Hier sind zwei gültige Paare:
abc def ghi
adg beh cfi
Und
print 10 (~^_^)~ foo bar !
p(fb! r~oa i^or n_ t^ ) 1~ 0
Beachten Sie, dass Leerzeichen wie alle anderen Zeichen behandelt werden. Insbesondere sind nachgestellte Leerzeichen von Bedeutung, da sie möglicherweise keine nachgestellten Leerzeichen in der Transponierung sind.
Jede Lösung sollte ein Programm oder eine Funktion sein, die eine nicht leere quadratische Matrix aus einstelligen ganzen Zahlen als Eingabe verwendet. Eine Lösung sollte eine Liste aller Diagonalen der Matrix und die andere eine Liste aller Antidiagonalen ausgeben. Sie können alle sinnvollen, eindeutigen Eingabe- und Ausgabeformate verwenden, diese müssen jedoch für beide Lösungen identisch sein (dies bedeutet auch, dass es sich entweder um beide Funktionen oder um beide Programme handeln muss).
- Jede Diagonale verläuft von links oben nach rechts unten und sollte von oben nach unten angeordnet werden.
- Jede Antidiagonale verläuft von links unten nach rechts oben und sollte von oben nach unten angeordnet werden.
Wertung
Um Lösungen zu fördern, die so quadratisch wie möglich sind, ist die primäre Punktzahl die Anzahl der Zeilen oder Spalten Ihrer Lösung, je nachdem, welcher Wert größer ist . Weniger ist besser. Die Krawatten werden durch die Anzahl der Zeichen in der Lösung getrennt, wobei die Zeilenumbrüche nicht berücksichtigt werden. Auch hier ist weniger besser. Beispiel:
abcd
efg
h
Dies und seine Transponierung hätten eine primäre Punktzahl von 4 (da es 4 Spalten gibt) und eine bahnbrechende Punktzahl von 8 (da es 8 Zeichen ohne Zeilenumbruch gibt). Bitte geben Sie beide Werte in der Kopfzeile Ihrer Antwort an.
Testfälle
Die eigentliche Aufgabe, die von den beiden Lösungen ausgeführt wird, sollte hier nicht die primäre Herausforderung sein. Hier sind zwei Beispiele, die Ihnen beim Testen Ihrer Lösungen helfen:
Input:
1 2 3
4 5 6
7 8 9
Diagonals:
3
2 6
1 5 9
4 8
7
Antidiagonals:
1
4 2
7 5 3
8 6
9
Input:
1 0 1 0
0 1 0 1
1 0 1 0
0 1 0 1
Diagonals:
0
1 1
0 0 0
1 1 1 1
0 0 0
1 1
0
Antidiagonals:
1
0 0
1 1 1
0 0 0 0
1 1 1
0 0
1
quelle
Antworten:
Javascript, Punktzahl
2014, (258176 Nicht-Newline-Zeichen)und
Beispielcode-Snippet:
und
quelle
<!-- language-all: lang-javascript -->
vor dem ersten Codeblock.MATL , Punktzahl 10 (100 Nicht-Newline-Zeichen)
Es gibt 10 Zeilen mit 10 Zeichen (beachten Sie die nachstehenden Leerzeichen).
Der obige Code erzeugt die Diagonalen. Probieren Sie es online!
Die transponierte Fassung produziert die Antidiagonalen. Probieren Sie es online!
Erläuterung
Beachten Sie, dass
%
ist ein Kommentarsymbol, das bewirkt, dass der Rest der Zeile ignoriert wird.Zwei-Zeichen-Funktionen wie
Xd
können nicht in eineX
und eined
aufeinanderfolgende Zeile aufgeteilt werden.Originalcode
Der ursprüngliche Code, linearisiert und ohne den kommentierten Teil, ist
was wie folgt funktioniert:
Transponierter Code
Der transponierte Code ist linearisiert
Das hat die folgenden zwei Unterschiede zum Originalcode:
T
und&
werden getauscht. Dies hat keine Auswirkung, daT
es sich um ein Literal handelt und nicht um eine Funktion, die die&
Spezifikation nicht abfängt .P!
wird am Anfang hinzugefügt.Der hinzugefügte Code ändert die Eingabematrix so, dass die Diagonalen der geänderten Matrix die Antidiagonalen der Eingabe sind:
quelle
Jelly , Score 7, 49 Nicht-Newline-Bytes
Diagonaldruckprogramm
Probieren Sie es online!
Anti-Diagonaldruck-Programm
Probieren Sie es online!
Ältere Antwort (ungeordnete Ausgabe), Ergebnis 3, 6 Nicht-Newline-Bytes
Diagonaldruckprogramm
Probieren Sie es online!
Anti-Diagonaldruckprogramm
Probieren Sie es online!
quelle
Jelly , 4 Punkte (12 Zeichen)
Bisherige Bewertungen: 5 (16 Zeichen), 4 (16 Zeichen)
Original
Probieren Sie es online!
Transponieren
Probieren Sie es online!
Hintergrund
Diagonalen
Der einfache Weg, die Diagonalen (von oben nach unten) einer quadratischen Matrix zu erhalten, ist wie folgt.
Bei einer Eingangsmatrix M ,
ŒD
Listen M ‚s Diagonalen, beginnend mit der Hauptdiagonale und nach oben bewegt.Für die Eingabe
Dies ergibt
ṙL
berechnet dann die Länge von M mitL
und dreht die Einheiten der Ergebnislänge (M) nach links.In unserem Beispiel ist die Länge 3 und wir erhalten
Schließlich
Ṛ
kehrt sich die Reihenfolge der Diagonalen um und kehrt zurückfür unsere Beispieleingabe.
Anti-Diagonalen
Dieselben Bausteine können verwendet werden, um die Antidiagonalen (wiederum von oben nach unten) einer quadratischen Matrix zu erhalten.
Bei einer Eingabematrix M wird
Ṛ
zunächst die Reihenfolge der Zeilen umgekehrt.Für die Eingabe
Dies ergibt
Wie zuvor werden
ŒDṙL
die Diagonalen (von ganz unten nach ganz oben) des Ergebnisses generiert.In unserem Beispiel wird dies zurückgegeben
wie gewünscht.
Wie es funktioniert
In Jelly definiert jede Zeile eine Verknüpfung (Funktion). Insbesondere definiert die letzte Zeile den Hauptlink , der beim Programmstart ausgeführt wird.
Andere Links müssen aufgerufen werden. Diese Antwort verwendet
ñ
, was den unten stehenden Link dyadisch ausführt.ñ
wird umbrochen. Wenn es über den Hauptlink aufgerufen wird, wird der Link in der ersten Zeile ausgeführt.Original
Der Hauptlink
Nimmt eine Eingabematrix M , berechnet ihre Länge mit
L
, dreht dann die Einheiten der Eingabelänge (M) mit nach linksṙ
(beachte, dass dies M nicht ändert ) und ruft schließlich den ersten Link mit dem Ergebnis ( M ) und der Länge auf ( M) als Argumente.Der erste Link
berechnet die Diagonalen von M mit
ŒD
(wie im vorherigen Abschnitt gezeigt), dreht die Einheiten der Ergebnislänge (M) mit nach linksṙ
und kehrt dann die Reihenfolge des Ergebnisses mit umṚ
.Der zweite Link wird nie aufgerufen.
Transponieren
Der Hauptlink
Nimmt eine Eingabematrix M und berechnet ihre Umkehrung mit
Ṛ
. Es berechnet dann die Länge von M mitL
und ruft den ersten Link mit den Argumenten reverse (M) und length (M) auf .Der erste Link
berechnet dann die Diagonalen der Umkehrung (M) mit
ŒD
(wie im vorherigen Abschnitt gezeigt) und dreht schließlich die Einheiten der Ergebnislänge (M) mit nach linksṙ
.Die restlichen Links werden nie aufgerufen.
quelle
R, Punktzahl
14 1311 (9995 Nicht-Newline-Zeichen)Vielen Dank an @Giuseppe für die Verbesserung der Punktzahl um 1. Einige Zeichen wurden durch das Ausnutzen von Redundanzen in den Transpositionen abgeschnitten. Derzeit die beste Punktzahl für eine nicht Golf spielende Sprache!
Und umgesetzt:
Probieren Sie es online!
quelle
row(m)+col(m)
ist kürzer für die Antidiagonalen.Husk ,
794 Zeichen,4Punkte 3Probieren Sie es online!
-4 Zeichen dank BMO .
quelle