Définition
Étant donné une matrice d'entiers non négatifs et un entier non négatif , nous définissons comme la fonction de "coupure" qui supprime toutes les lignes et toutes les colonnes de qui contiennent .
Exemple:
Ta tâche
Compte tenu de et une somme cible , votre tâche est de trouver toutes les valeurs possibles de tel que la somme des éléments restants dans est égal à .
Exemple:
Étant donné la matrice ci-dessus et :
- est une solution, car et
- est la seule autre solution possible: et
La sortie attendue serait donc .
Clarifications et règles
- L'entrée est garantie pour admettre au moins une solution.
- La somme des éléments de la matrice d' origine est garanti pour être supérieur à .
- Vous pouvez supposer que . Cela signifie qu'une matrice vide ne mènera jamais à une solution.
- Les valeurs de peuvent être imprimées ou renvoyées dans n'importe quel ordre et dans n'importe quel format raisonnable et sans ambiguïté.
- Vous êtes autorisé à ne pas dédupliquer la sortie (par exemple ou sont considérés comme des réponses valides pour l'exemple ci-dessus).[ 1 , 5 , 1 , 5 ]
- C'est du code-golf .
Cas de test
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
la source
la source
[[1,5],[1],[5],[]]
pour le premier cas de test) serait-elle un moyen de sortie valide?Réponses:
K (ngn / k) , 39 octets
Essayez-le en ligne!
merci @ Adám pour cette explication :
{
…}
Fonction,x
est M ety
est S,/x
aplatir M (ce sont les k candidats)a:
affecter àa
x{
…}/:
Appliquez la fonction suivante à chacun en utilisant M comme argument gauche fixe (x
):x=y
Matrice booléenne indiquant où les éléments de M sont égaux au candidat k actuel~
nier celab:
attribuer cela àb
&/
ET réduction (trouve les colonnes sans ce k )(
…)&\:
ET avec chacun des éléments suivants:&/'b
ET réduction de chacun (recherche les lignes sans ce k )x*
multiplier M par cela+//
grande sommey=
liste des booléens indiquant où S est égal à ces sommes&
indices de Truesa@
utiliser cela pour indexer dans les éléments (les k candidats)la source
APL (Dyalog Unicode) ,
353328 octets SBCS-7 grâce à ngn.
Infixe anonyme lambda. Prend S comme argument de gauche et M comme argument de droite.
Essayez-le en ligne!
{
…}
"Dfn",⍺
et⍵
sont respectivement des arguments gauche et droit ( S et M ):⍵[
…]
Index M avec les coordonnées suivantes:⊂⍵
entourez M pour le traiter comme un élément unique⍵=
comparer chaque élément (c'est-à-dire k candidat) de M à l'ensemble de M(
…)¨
Appliquer à chacun la fonction tacite suivante:∧⌿
vertical ET réduction (recherche les colonnes sans ce k candidat)…
∘.∧
Produit booléen cartésien avec:∧/
réduction AND horizontale (recherche les lignes sans ce k candidat)⍵×
multiplier M avec ce masque+/∘,
additionner la matrice aplatie⍺=
Booléen indiquant où S est égal à ces sommes⍸
indices où c'est vraila source
{M[⍸⍺={+/,(∧⌿d)/M⌿⍨∧/d←M≠⍵}¨M←⍵]}
M
quand il n'a pas encore été créé?⍵
comme⍺
dans le dfn intérieur est tout aussi déroutant pour moi{⍵[⍸⍺=+/¨(,⍵×∧/∘.∧∧⌿)¨⍵≠⊂⍵]}
R ,
7873 octetsEssayez-le en ligne!
Ne trie ni ne dédoublonne la sortie.
Crédit à J.Doe & Giuseppe pour -5 octets.
la source
Gelée ,
2019171514 octetsIl s'agit d'un lien monadique qui prend M comme argument et lit S à partir de STDIN.
Essayez-le en ligne!
Comment ça marche
la source
Haskell ,
88868477 octetsVérifiez tous les cas de test .
Explication
la source
Pyth ,
27 23 22 2120 octetsSuite de tests!
Ne dédoublonne pas.
Comment ça marche?
la source
Python 2 ,
114108 octetsEssayez-le en ligne!
la source
Perl 6 ,
8074 octetsEssayez-le en ligne!
Explication
la source
05AB1E , 21 octets
Essayez-le en ligne!
Ce n'est qu'après avoir écrit cette réponse que j'ai vu celle de Kevin . Je crois que c'est substantiellement différent, donc je le poste séparément. Mon intuition dit que le nombre optimal d'octets est d'environ 18, donc je vais devoir revoir cela et voir ce que je peux faire d'autre. Avec le code actuel, il est impossible d'écrire une suite de tests mais j'ai moi-même vérifié tous les cas de test et les résultats sont corrects.
Algorithme de recadrage
~
+
Après quoi la somme de la matrice résultante est calculée.
la source
[[1,1,0,1],[2,0,0,2],[2,0,1,0]]
qui m'a vissé pour le numéro1
(ce qui supprime chaque colonne ..) J'avais en effet un peu moins de 20 dans ma tête ainsi que la possibilité. Dommage qu'il n'y ait pratiquement pas de builtins pour les matrices, malgré ceux ajoutés récemment. Quant au1|2
(1 2~
dans 05AB1E synthax) résultant en 3, c'est parce que leslogical OR
actes comme unbinary OR
quand des nombres autres que0
/1
sont impliqués (je pense / suppose).+
toute façon, je suppose, donc j'espère qu'il n'y aura aucun problème :)05AB1E (hérité) ,
2726 octetsNe trie ni n'unifie le résultat.
Ne fonctionne que dans l'héritage (pour l'instant), car sum-each semble faire des choses étranges lorsqu'une partie des listes internes sont des entiers et d'autres des listes.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Gelée , 22 octets
Essayez-le en ligne!
-6 octets en utilisant l'approche générale de la réponse 05AB1E de M. Xcoder.
la source
Fusain , 33 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code et inclut la déduplication. Explication:
Aplatissez le premier tableau d'entrée
q
dans la liste prédéfinieu
.Pour chaque élément de la liste, additionnez le tableau, mais si la ligne contient l'élément, utilisez-le à la
0
place de sa somme, et lorsque vous additionnez des lignes qui ne contiennent pas l'élément, si la colonne contient l'élément, utilisez-le à la0
place de la valeur de la colonne . C'est très légèrement plus golfique que de filtrer les éléments car le charbon ne peut pas additionner une liste vide.la source
Nettoyer , 92 octets
Essayez-le en ligne!
Expliqué:
la source
MATLAB - 80 octets
( Corrigé et ) Compacté:
Et dans une version entièrement développée:
Merci aux commentaires pour souligner mon erreur initiale. Notez que cette version ne supprime pas la sortie.
Il est possible de dédupliquer la sortie avec 5 octets supplémentaires:
la source