En cas de doute: Nan = Non-numeric datatype
aux fins de ce défi.
Écrivez un programme ou une fonction qui prend une matrice / un tableau en entrée, ainsi qu'une liste d'index de colonnes.
Le défi consiste à supprimer les lignes où se trouvent tous les éléments des colonnes spécifiées Nan
. Peu importe que les autres éléments de la ligne soient numériques ou non. Nous espérons que les exemples suivants clarifieront cela (c'est un index):
Input array:
16 NaN 3 13
5 11 NaN 8
NaN 7 NaN 12
4 14 -15 1
Input column index: [1 3]
Output array:
16 NaN 3 13
5 11 NaN 8
4 14 -15 1
----
Input array:
16 NaN 3 13
5 11 NaN 8
NaN 7 NaN 12
4 14 -15 1
Input column index: 3
Output array =
16 NaN 3 13
4 14 -15 1
----
Input array:
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
Input column index: 1 2 4
Output array:
[]
Règles et clarifications:
- La matrice sera toujours non vide
- Les valeurs numériques seront finies, mais pas nécessairement des entiers ou des valeurs positives
- Le vecteur d'index de colonne peut être vide (auquel cas aucune ligne ne sera supprimée)
- L'index de colonne n'aura jamais de valeurs dépassant les dimensions de la matrice
- Vous pouvez supposer qu'il n'y aura pas de doublons dans la liste d'index des colonnes
- Vous pouvez choisir si vous souhaitez utiliser des valeurs nulles ou indexées (veuillez préciser)
- Vous pouvez prendre l'entrée sur n'importe quel format pratique
- Le tableau comme liste de listes est OK. Les indices de colonne peuvent être des arguments séparés
ans =
et similaire est accepté en sortie- Vous êtes libre de choisir le type de type de données non numérique que vous souhaitez utiliser
- Il devrait être impossible d'effectuer des opérations arithmétiques avec ce type de données, ou de le convertir en un nombre fini à l'aide de fonctions telles que
float(x)
.
- Il devrait être impossible d'effectuer des opérations arithmétiques avec ce type de données, ou de le convertir en un nombre fini à l'aide de fonctions telles que
C'est le code golf, donc le code le plus court en octets gagne.
la source
J
parvz
etK
parQ
.z
est initialisé en entrée,Q
en entrée évaluée.?KEfnmklKm@TdKQQ
les listes vides sont fausses en Pyth, et les instructions d'affectation renvoient la valeur qui a été affectée, ce qui économise quelques octets. J'espère que vous apprécierez le golf Pyth! :)L
->fnks@LTQE
JavaScript (ES6),
4846 octetsExplication
Attend un tableau de lignes en tant que tableaux et un tableau de nombres indexés 0 pour les colonnes à vérifier. Renvoie un tableau de tableaux.
Simple
filter
etsome
. VérifieNaN
en utilisantn < Infinity
(true
pour les nombres finis,false
pourNaN
s).la source
CJam, 18 octets
Un bloc (fonction) sans nom qui attend la matrice et les indices de colonne de base zéro sur la pile (la matrice en haut), qui laisse la matrice filtrée sur la pile. J'utilise le tableau vide
""
comme valeur non numérique.Testez-le ici.
Explication
la source
The column index vector can be empty (in which case no rows will be removed)
""
" Vouliez-vous dire "la chaîne vide"?[]
et""
sont identiques et la représentation canonique est""
(par exemple , il est ce que vous obtenez lorsque vous stringify un tableau vide).APL, 19 octets
L'argument de gauche doit être une liste d'indices (et ce doit être une liste, pas un scalaire), l'argument de droite est la matrice. APL a deux types de données, des nombres et des caractères, donc cela filtre les types de caractères.
Tests:
Explication:
⍵[;⍺]
: sélectionnez les colonnes données dans la matrice0↑¨
: prendre les premiers0
éléments depuis le début de chaque élément⍬∘≡¨
: comparer à la liste vide numérique∨/
: voir dans laquelle des lignes au moins un élément correspond⍵⌿⍨
: sélectionnez ces lignes dans la matricela source
MATLAB,
3228 octetsJe vais répondre à ma propre question pour une fois. Le mieux que je puisse faire dans MATLAB est de 28 octets.
J'espérais éviter d'utiliser les deuxall
et d'uneisnan
manière ou d'une autre, mais je n'ai pas encore trouvé de moyen.Tester:
Il s'agit d'une fonction anonyme sans nom qui prend la matrice d'entrée comme première variable d'entrée et une liste d'index de colonne comme seconde.
Dans MATLAB, est
NaN < Inf
évalué à faux. On peut supposer que toutes les valeurs sont finies, vérifiant ainsi si les valeurs sont inférieures àinf
est équivalent à vérifier si elles ne sont pas numériques.any(...,2)
vérifie s'il existe des valeurs vraies le long de la deuxième dimension (lignes). Si tel est le cas, ces lignes seront retournées.Ancienne version:
isnan(A(:,c))
renvoie un tableau avec des booléens pour les colonnes spécifiées.~all(isnan(A(:,c)),2)
vérifie si toutes les valeurs le long de la deuxième dimension (lignes) ne sont pas numériques et la nie. Il en résulte un vecteur booléen avec ceux dans les positions que nous voulons conserver.A(~all(isnan(A(:,c)),2),:)
utilise l'indexation logique pour extraire les lignes entières pourA
.La solution suivante de 24 octets fonctionnerait si les valeurs étaient garanties non nulles:
la source
Rubis, 48 octets
L'entrée est basée sur des indices 0 1 .
Assez explicite, en fait.
select
éléments du tableau oùany?
des indicesmap
pédent sur la ligne sontFixnum
s.Exemple d'exécution:
1: J'ai finalement épelé ce mot correctement du premier coup! \ o /
la source
K5, 15 octets
Celui-ci utilise des colonnes indexées 0 et la représentation matricielle de liste de listes naturelle de K:
Indexez dans la matrice (
x@
) les lignes où (&
) tous ( ) ne sont pas tous~&/'
nuls (^
).En action:
la source
MATL , 15
16octetsNaN
est représenté dans l'entrée commeN
. L'indexation est basée sur 1. Par exemple, dans le premier cas de test, l'entrée estEssayez-le en ligne!
Explication
la source
R, 49 octets
L'entrée est basée sur 1. La fonction prend une matrice (
m
) et un vecteur d'indices de colonne (j
) qui peuvent être manquants.Deux cas de test:
la source
Lua, 148 octets
Une fonction qui prend une matrice et un tableau en entrée et génère une matrice avec les lignes correspondantes à
nil
. Comme les tableaux sont assez similaires aux tableaux de C, nihiler est commefree()
le faire car le garbage collector n'est pas loin.Les tableaux sont indexés en 1 dans Lua, et j'utilise la chaîne
"NaN"
comme élément non nomber.Vous pouvez essayer Lua en ligne et copier / coller l'exemple de code suivant pour essayer cette soumission:
la source
Mathematica,
52514946 octetsL'entrée est [matrice sous forme de liste de listes, vecteur de colonnes]
la source
Haskell, 39 octets
Cela utilise des indices basés sur 0. Exemple d'utilisation (j'utilise
sqrt(-1)
pour créer desNaN
s):C'est juste un simple filtre comme on le voit dans d'autres réponses via la compréhension de la liste. Le cas particulier d'une liste d'index vide est intercepté séparément.
la source