Definition
Bei einer Matrix aus nicht negativen ganzen Zahlen und einer nicht negativen ganzen Zahl definieren wir als die Funktion "Abhacken", die alle Zeilen und Spalten in , die enthalten .k F k M k
Beispiel:
Deine Aufgabe
Bei gegebenem und einer Zielsumme besteht Ihre Aufgabe darin, alle möglichen Werte von so zu finden, dass die Summe der verbleibenden Elemente in gleich .S k F k ( M ) S
Beispiel:
Ausgehend von der obigen Matrix und :S = 9
- ist eine Lösung, weil und 1 + 2 + 6 + 0 = 9
- ist die einzig mögliche Lösung: und 5 + 4 = 9
Die erwartete Ausgabe wäre also .
Erläuterungen und Regeln
- Die Eingabe lässt garantiert mindestens eine Lösung zu.
- Die Summe der Elemente in der ursprünglichen Matrix gewährleistet ist als größer ist .
- Sie können S> 0 annehmen . Dies bedeutet, dass eine leere Matrix niemals zu einer Lösung führt.
- Die Werte von können in beliebiger Reihenfolge und in einem angemessenen, eindeutigen Format ausgedruckt oder zurückgegeben werden.
- Sie dürfen die Ausgabe nicht (zB oder gelten als gültige Antworten für das obige Beispiel).[ 1 , 5 , 1 , 5 ]
- Das ist Code-Golf .
Testfälle
M = [[6,1,5],[1,2,8],[9,8,5],[6,0,4]]
S = 9
Solution = {1,5}
M = [[7,2],[1,4]]
S = 7
Solution = {4}
M = [[12,5,2,3],[17,11,18,8]]
S = 43
Solution = {5}
M = [[7,12],[10,5],[0,13]]
S = 17
Solution = {0,13}
M = [[1,1,0,1],[2,0,0,2],[2,0,1,0]]
S = 1
Solution = {2}
M = [[57,8,33,84],[84,78,19,14],[43,14,81,30]]
S = 236
Solution = {19,43,57}
M = [[2,5,8],[3,5,8],[10,8,5],[10,6,7],[10,6,4]]
S = 49
Solution = {2,3,4,7}
M = [[5,4,0],[3,0,4],[8,2,2]]
S = 8
Solution = {0,2,3,4,5,8}
code-golf
array-manipulation
matrix
Arnauld
quelle
quelle
[[1,5],[1],[5],[]]
für den ersten Testfall) ein gültiges Mittel zur Ausgabe?Antworten:
K (ngn / k) , 39 Bytes
Probieren Sie es online!
danke @ Adám für diese Erklärung :
{
…}
Funktionx
ist M undy
ist S,/x
M abflachen (das sind die k Kandidaten)a:
zuweisena
x{
...}/:
gelten für jeden die folgende Funktion bei der Verwendung von M als festem linkem Argument (x
):x=y
Boolesche Matrix, die angibt, wo Elemente von M gleich dem aktuellen k- Kandidaten sind~
negiere dasb:
weise das zub
&/
AND-Reduktion (findet Spalten ohne das k )(
…)&\:
UND das mit jedem der folgenden:&/'b
UND-Reduktion von jedem (findet Zeilen ohne das k )x*
multiplizieren Sie M damit+//
Gesamtsummey=
Liste der Booleschen Werte, die angeben, wo S diesen Summen entspricht&
Indizes der Wahrheitena@
benutze das, um die Elemente zu indizieren (die k Kandidaten)quelle
APL (Dyalog Unicode) ,
353328 Byte SBCS-7 danke an ngn.
Anonymes Infix Lambda. Nimmt S als linkes Argument und M als rechtes Argument.
Probieren Sie es online!
{
...}
"dfn"⍺
und⍵
sind jeweils linke und rechte Argumente ( S und M ):⍵[
…]
Index M mit folgenden Koordinaten:⊂⍵
Füge M hinzu , um es als einzelnes Element zu behandeln⍵=
vergleiche jedes Element (dh k Kandidat) von M mit dem gesamten M(
…)¨
Wenden auf jede folgende stillschweigende Funktion an:∧⌿
vertikale UND-Reduktion (findet Spalten ohne diesen k Kandidaten)…
∘.∧
Kartesisches Boolesches Produkt mit:∧/
horizontale UND-Reduktion (findet Zeilen ohne diesen k Kandidaten)⍵×
multipliziere M mit dieser Maske+/∘,
summiere die abgeflachte Matrix⍺=
Boolescher Wert, der angibt, wo S diesen Summen entspricht⍸
Indizes, wo das stimmtquelle
{M[⍸⍺={+/,(∧⌿d)/M⌿⍨∧/d←M≠⍵}¨M←⍵]}
M
wenn sie noch nicht erstellt wurde?⍵
wie⍺
in der inneren dfn ist für mich genauso verwirrend{⍵[⍸⍺=+/¨(,⍵×∧/∘.∧∧⌿)¨⍵≠⊂⍵]}
R ,
7873 BytesProbieren Sie es online!
Sortiert oder dedupliziert die Ausgabe nicht.
Gutschrift an J.Doe & Giuseppe für -5 Bytes.
quelle
Jelly ,
2019171514 BytesDies ist eine monadische Verknüpfung, die M als Argument verwendet und S aus STDIN liest .
Probieren Sie es online!
Wie es funktioniert
quelle
Haskell ,
88868477 BytesÜberprüfen Sie alle Testfälle .
Erläuterung
quelle
Pyth ,
27 23 22 2120 BytesTestsuite!
Dedupliziert nicht.
Wie es funktioniert?
quelle
Python 2 ,
114108 BytesProbieren Sie es online!
quelle
Perl 6 ,
8074 BytesProbieren Sie es online!
Erläuterung
quelle
05AB1E , 21 Bytes
Probieren Sie es online!
Erst nachdem ich diese Antwort geschrieben habe, habe ich Kevin gesehen . Ich bin der Meinung, dass dies wesentlich anders ist, daher poste ich es separat. Meiner Intuition nach liegt die optimale Byteanzahl bei 18, daher muss ich das noch einmal überprüfen und sehen, was ich sonst noch tun kann. Mit dem aktuellen Code ist es nicht möglich, eine Testsuite zu schreiben, aber ich habe alle Testfälle selbst überprüft und die Ergebnisse sind korrekt.
Algorithmus zum Zuschneiden
~
+
Danach wird die Summe der resultierenden Matrix berechnet.
quelle
[[1,1,0,1],[2,0,0,2],[2,0,1,0]]
mich für die Nummer vermasselt hat1
(der jede Spalte entfernt ..). Ich hatte in der Tat etwas unter 20 in meinem Kopf sowie die Möglichkeit. Schade, dass es trotz der kürzlich hinzugefügten Produkte kaum eingebaute Matrizen gibt. Der Grund für die1|2
(1 2~
in 05AB1E-Synthax) resultierende 3 ist, dass sich dielogical OR
wie eine verhält,binary OR
wenn andere Zahlen als0
/1
beteiligt sind (ich denke / nehme an).+
sowieso ersetzt werden, also hoffe ich, dass es keine Probleme damit gibt :)05AB1E (Legacy) ,
27 -26 ByteSortiert oder vereinheitlicht das Ergebnis nicht.
Funktioniert (vorerst) nur im Legacy, da sum-each seltsame Dinge zu tun scheint, wenn ein Teil der inneren Listen Ganzzahlen und ein anderer Teil Listen sind.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Jelly , 22 Bytes
Probieren Sie es online!
-6 Bytes unter Verwendung des allgemeinen Ansatzes aus der 05AB1E-Antwort von Herrn Xcoder.
quelle
Holzkohle , 33 Bytes
Probieren Sie es online!Der Link ist eine ausführliche Version des Codes und enthält die Deduplizierung. Erläuterung:
Reduzieren Sie das erste Eingabearray
q
in die vordefinierte Listeu
.Summieren Sie für jedes Element der Liste das Array, aber wenn die Zeile das Element enthält, verwenden Sie
0
anstelle der Summe, und wenn Sie Zeilen summieren, die das Element nicht enthalten, verwenden Sie0
anstelle des Spaltenwerts , wenn die Spalte das Element enthält . Dies ist ein bisschen besser als das Herausfiltern von Elementen, da Charcoal keine leere Liste zusammenfassen kann.quelle
Sauber , 92 Bytes
Probieren Sie es online!
Erklärt:
quelle
MATLAB - 80 Bytes
( Korrigiert und ) Verdichtet:
Und in einer voll entwickelten Version:
Vielen Dank an die Kommentare, um meinen anfänglichen Fehler hervorzuheben. Beachten Sie, dass diese Version die Ausgabe nicht dupliziert.
Es ist möglich, die Ausgabe mit 5 weiteren Bytes zu deduplizieren:
quelle