Indexsumme und Strip meine Matrix
Gegeben ein Matrix / 2d-Array in Ihrer bevorzugten Sprache
Eingang:
- Die Matrix hat immer eine ungerade Länge
- Die Matrix ist immer perfekt quadratisch
- Die Matrixwerte können eine beliebige Ganzzahl in Ihrer Sprache sein (positiv oder negativ).
Beispiel:
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 50 6 7 8 9
4 5 6 100 8 9 10
5 6 7 8 -9 10 11
6 7 8 9 10 11 12
7 8 900 10 11 12 0
Definitionen:
- Die "zentrale Nummer" ist definiert als die Nummer mit der gleichen Anzahl von Nummern links, rechts, oben und unten
In diesem Fall ist es die Mitte 100
- Die "äußere Hülle" ist die Sammlung von Zahlen, deren x- und y-Index oder 0 oder die Matrixgröße ist
1 2 3 4 5 6 7
2 8
3 9
4 10
5 11
6 12
7 8 900 10 11 12 0
Deine Aufgabe:
Addieren Sie zur zentralen Zahl die Summe jeder Zeile und Spalte, nachdem Sie die Werte in jeder Zeile mit ihrem 1-basierten Index multipliziert haben
Eine einzelne Zeile zum Beispiel
4 5 6 7 8
für jede Nummer
number * index + number * index.....
4*1 + 5*2 + 6*3 + 7*4 + 8*5 => 100
Beispiel:
2 -3 -9 4 7 1 5 => 61
-2 0 -2 -7 -7 -7 -4 => -141
6 -3 -2 -2 -3 2 1 => -10
8 -8 4 1 -8 2 0 => -20
-5 6 7 -1 8 4 8 => 144
1 5 7 8 7 -9 -5 => 10
7 7 -2 2 -7 -8 0 => -60
|
78 65 60 45 -15 -89 10 => 154
|
=> -16
- Für alle Zeilen und Spalten kombinieren Sie diese Werte.
- Nun summieren Sie auch diese => 154-16 = 138
- Sie fügen diese Nummer zur "zentralen Nummer" hinzu und entfernen die "äußere Hülle" der Matrix
0 -2 -7 -7 -7 => -88
-3 -2 -2 -3 2 => -15
-8 4 1+138 -8 2 => 395
6 7 -1 8 4 => 69
5 7 8 7 -9 => 26
19 69 442 30 -26
Tun Sie dies, bis Sie eine einzige Zahl erhalten
-2 -2 -3 => -15
4 1060 -8 => 2100
7 -1 8 => 29
27 2115 5
- Addiere 2114 + 2147 zu 1060
- Entfernen Sie die "äußere Hülle" und erhalten Sie 5321
- Jetzt haben wir nur noch eine Nummer
das ist die Ausgabe!
Testfälle:
-6
-6
-7 -1 8
-4 -6 7
-3 -6 6
2
6 7 -2 5 1
-2 6 -4 -2 3
-1 -4 0 -2 -7
0 1 4 -4 8
-8 -6 -5 0 2
-365
8 3 5 6 6 -7 5
6 2 4 -2 -1 8 3
2 1 -5 3 8 2 -3
3 -1 0 7 -6 7 -5
0 -8 -4 -9 -4 2 -8
8 -9 -3 5 7 8 5
8 -1 4 5 1 -4 8
17611
-9 -7 2 1 1 -2 3 -7 -3 6 7 1 0
-7 -8 -9 -2 7 -2 5 4 7 -7 8 -9 8
-4 4 -1 0 1 5 -3 7 1 -2 -9 4 8
4 8 1 -1 0 7 4 6 -9 3 -9 3 -9
-6 -8 -4 -8 -9 2 1 1 -8 8 2 6 -4
-8 -5 1 1 2 -9 3 7 2 5 -6 -1 2
-8 -5 -7 -4 -9 -2 5 0 2 -4 2 0 -2
-3 -6 -3 2 -9 8 1 -5 5 0 -4 -1 -9
-9 -9 -8 0 -5 -7 1 -2 1 -4 -1 5 7
-6 -9 4 -2 8 7 -9 -5 3 -1 1 8 4
-6 6 -3 -4 3 5 6 8 -2 5 -1 -7 -9
-1 7 -9 4 6 7 6 -8 5 1 0 -3 0
-3 -2 5 -4 0 0 0 -1 7 4 -9 -4 2
-28473770
Antworten:
MATL ,
3634 BytesDie Eingabe ist ein 2D-Array mit einem
;
ZeilentrennzeichenProbieren Sie es online aus! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Python 2.7, 229 Bytes
Dies ist mein erster Versuch in so etwas, also habe ich hoffentlich alle Regeln mit dieser Einreichung befolgt. Dies ist nur eine Funktion, die eine Liste von Listen als Parameter verwendet. Ich habe das Gefühl, dass die Summen und das Listenverständnis wahrscheinlich etwas verkürzt werden könnten, aber es war zu schwer für mich. : D.
Vielen Dank an Easterly Irk, die mir geholfen haben, ein paar Bytes zu sparen.
quelle
...) + sum([i*j...
->...)+sum([i*j...
), aber insgesamt ein großartiger erster Beitrag !!!!...]for ...
. Sie können mindestens 2 Leerzeichen so entfernen. (Ende der Liste trifft die for-Schleife)C #, 257 Bytes
Hier ist eine Antwort ohne Esolang
ungolfed:
quelle
using System.Linq
undusing System
. Ich bin mir nicht sicher, ob es nach den Regeln erforderlich ist.System.Linq
. Andere Sprachen, die importiert werden müssen, um bestimmte Funktionen nutzen zu können, durchlaufen denselben Prozess. Daher halte ich es für unfair anzunehmen, dass jedes Modul in C # in den Speicher geladen wird.J, 66 Bytes
Einfacher Ansatz basierend auf dem in der Herausforderung beschriebenen Prozess.
[:+/^:2#\*]+|:
bekommt die Summe.]+(i.@,~=](]+*)<.@-:)@#*
ist eine besonders hässliche Methode, um das Zentrum um die Summe zu erhöhen.[:}:@}."1@}:@}.
entfernt die äußere Hülle. Es gibt wahrscheinlich einen besseren Weg, dies zu tun.Verwendungszweck
quelle
Brachylog , 114 Bytes
Ich bin überrascht, dass dies sogar funktioniert, um ehrlich zu sein. Zumindest wurde mir klar, dass Brachylog wirklich einen "Änderungswert dieses Elements" als eingebautes Element benötigt ...
Anwendungsbeispiel:
Erläuterung
Lesbarere (und längere) Version:
Ich werde nur grob erklären, was jedes Prädikat (dh jede Zeile außer der ersten, die Hauptprädikat + Prädikat 1 ist) tut:
Hauptprädikat + Prädikat 1
{l1,?hh.|:2f:7a$\:7a&.}.
: Wenn die Eingabe nur eine Zeile enthält, beenden Sie den Algorithmus und geben Sie den einzigen Wert zurück. Andernfalls finden Sie alle Zeilen, die das Prädikat 2 erfüllen, und wenden dann das Prädikat 7 auf die resultierende Matrix an, dann das Prädikat 7 auf die Transposition und rufen dann rekursiv auf.Prädikat 2
:Im:I:?:3f.
: Nehmen Sie dieI
dritte Zeile der Matrix und suchen Sie alle Werte dieser Zeile, die Prädikat 3 erfüllen,I
und die Matrix als zusätzliche Eingaben.Prädikat 3
[L:I:M]h:JmN,Ll:2/D(IJ,M:4&:N+.;'(DIJ),N.)
:L
ist die Zeile,I
ist der Index der Zeile,M
ist die Matrix.N
ist dasJ
th Element vonL
. Wenn die Länge vonL
geteilt durch 2 gleich beidenI
und istJ
, ist die Ausgabe die Summe vonN
mit dem Ergebnis von Prädikat 4 in der Matrix. Ansonsten ist die Ausgabe geradeN
. Dieses Prädikat erstellt die Matrix im Wesentlichen neu, mit der Ausnahme, dass das zentrale Element zur Summe hinzugefügt wird.Prädikat 4
$\:?c:5a+.
: Wenden Sie Prädikat 5 auf jede Zeile und Spalte der Matrix an und vereinheitlichen Sie die Ausgabe mit der Summe der Ergebnisse.Prädikat 5
:6f+.
: Finden Sie alle gültigen Ausgaben von Prädikat 6 in der Zeile und vereinheitlichen Sie die Ausgabe mit der Summe der resultierenden Liste.Prädikat 6
:ImN,I:1+:N*.
:N
ist derI
th-Wert der Zeile, vereinheitlichen Sie die Ausgabe mitN * (I+1)
.Prädikat 7
brbr.
: Entfernen Sie die erste und letzte Zeile der Matrix.quelle
APL, 56 Zeichen
Auf Englisch:
⍣(⌊.5×≢⍵)
Wiederholen Sie den Vorgang "halb so groß wie eine abgerundete Dimension"(⍵⍪⍉⍵)+.×⍳≢⍵
inneres Produkt der Matrix und ihre Transponierung mit dem Indexvektor(-⍴⍵)↑(⌈.5×⍴⍵)↑
Transformationsergebnis in Matrix mit 0s aufgefüllt1 1↓¯1 ¯1↓
entfernt die äußere Hüllequelle