Caso haja alguma dúvida: Nan = Non-numeric datatype
para os propósitos deste desafio.
Escreva um programa ou função que use uma matriz / matriz como entrada, bem como uma lista de índices de coluna.
O desafio é remover as linhas onde estão todos os elementos nas colunas especificadas Nan
. Não importa se outros elementos na linha são numéricos ou não. Esperamos que os exemplos a seguir tornem isso mais claro (é um indexado):
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:
[]
Regras e esclarecimentos:
- A matriz sempre estará vazia
- Os valores numéricos serão finitos, mas não necessariamente inteiros ou valores positivos
- O vetor de índice da coluna pode estar vazio (nesse caso, nenhuma linha será removida)
- O índice da coluna nunca terá valores que excedam as dimensões da matriz
- Você pode assumir que não haverá duplicatas na lista de índices da coluna
- Você pode escolher se deseja usar valores indexados com zero ou um (especifique)
- Você pode levar a entrada em qualquer formato conveniente
- A matriz como lista de listas está OK. Os índices da coluna podem ser argumentos separados
ans =
e similar é aceito na saída- Você é livre para escolher que tipo de tipo de dados não numérico deseja usar
- Deve ser impossível executar operações aritméticas com esse tipo de dados ou convertê-lo em um número finito usando funções como
float(x)
.
- Deve ser impossível executar operações aritméticas com esse tipo de dados ou convertê-lo em um número finito usando funções como
Este é o código golf, pelo que o código mais curto em bytes vence.
fonte
J
porvz
eK
comQ
.z
é inicializado para entrada,Q
para entrada avaliada.?KEfnmklKm@TdKQQ
listas vazias são falsas em Pyth, e as instruções de atribuição retornam o valor que foi atribuído, o que economiza alguns bytes. Espero que você goste de jogar Pyth! :)L
->fnks@LTQE
JavaScript (ES6),
4846 bytesExplicação
Espera uma matriz de linhas como matrizes e uma matriz de números indexados 0 para as colunas verificarem. Retorna uma matriz de matrizes.
Direto
filter
esome
. VerificaNaN
usandon < Infinity
(true
para números finitos,false
paraNaN
s).fonte
CJam, 18 bytes
Um bloco sem nome (função) esperando a matriz e os índices da coluna com base em zero na pilha (a matriz na parte superior), que deixa a matriz filtrada na pilha. Estou usando a matriz vazia
""
como o valor não numérico.Teste aqui.
Explicação
fonte
The column index vector can be empty (in which case no rows will be removed)
""
" Você quis dizer "a cadeia vazia"?[]
e""
são idênticos e a representação canônica é""
(por exemplo, é o que você começa quando você stringify um array vazio).APL, 19 bytes
O argumento da esquerda deve ser uma lista de índices (e deve ser uma lista, não uma escalar), o argumento da direita é a matriz. A APL possui dois tipos de dados, números e caracteres, portanto, isso filtra os tipos de caracteres.
Testes:
Explicação:
⍵[;⍺]
: selecione as colunas fornecidas na matriz0↑¨
: pegue os primeiros0
elementos desde o início de cada item⍬∘≡¨
: compare com a lista vazia numérica∨/
: veja em qual das linhas pelo menos um item corresponde⍵⌿⍨
: selecione essas linhas da matrizfonte
MATLAB,
3228 bytesVou responder minha própria pergunta pela primeira vez. O melhor que posso fazer no MATLAB é de 28 bytes.
Eu esperava evitar usar os doisall
e deisnan
alguma forma, mas ainda não encontrei uma maneira.Teste:
Essa é uma função anônima sem nome que leva a matriz de entrada como a primeira variável de entrada e uma lista de índices de coluna como a segunda.
No MATLAB,
NaN < Inf
avalia como falso. Pode-se supor que todos os valores sejam finitos, verificando se os valores são menores que oinf
equivalente a verificar se são não numéricos.any(...,2)
verifica se existem valores verdadeiros ao longo da segunda dimensão (linhas). Se for esse o caso, essas linhas serão retornadas.Versão antiga:
isnan(A(:,c))
retorna uma matriz com booleanos para as colunas especificadas.~all(isnan(A(:,c)),2)
verifica se todos os valores da segunda dimensão (linhas) são não numéricos e a nega. Isso resulta em um vetor booleano com aqueles nas posições que queremos manter.A(~all(isnan(A(:,c)),2),:)
usa indexação lógica para extrair as linhas inteirasA
.A seguinte solução de 24 bytes funcionaria se fosse garantido que os valores fossem diferentes de zero:
fonte
Ruby, 48 bytes
A entrada é índices baseados em 0 1 .
Bastante auto-explicativo, na verdade.
select
elementos da matriz ondeany?
os índicesmap
ped sobre a linha sãoFixnum
s.Exemplo de execução:
1: Eu finalmente escrevi essa palavra corretamente na primeira tentativa! \ o /
fonte
K5, 15 bytes
Isso usa colunas indexadas em 0 e a representação natural da matriz da lista de listas de K:
Indique na matriz (
x@
) as linhas em que (&
) nem todos (~&/'
) são nulos (^
).Em ação:
fonte
MATL , 15
16bytesNaN
é representado na entrada comoN
. A indexação é baseada em 1. Por exemplo, no primeiro caso de teste, a entrada éExperimente online!
Explicação
fonte
R, 49 bytes
A entrada é baseada em 1. A função pega uma matriz (
m
) e um vetor de índices de coluna (j
) que podem estar ausentes.Dois casos de teste:
fonte
Lua, 148 bytes
Uma função que recebe uma matriz e uma matriz como entrada e produz uma matriz com as linhas correspondentes em
nil
. Como matrizes são exatamente iguais às matrizes de C, nihilating é como ingêfree()
-lo, pois o coletor de lixo não está longe.As matrizes são indexadas em 1 em Lua, e eu uso a string
"NaN"
como um elemento não nomeador.Você pode experimentar o Lua online e copiar / colar o seguinte exemplo de código para tentar este envio:
fonte
Mathematica,
52514946 bytesEntrada é [matriz como lista de listas, vetor de colunas]
fonte
Haskell, 39 bytes
Isso usa índices baseados em 0. Exemplo de uso (estou usando
sqrt(-1)
para criarNaN
s):É apenas um filtro simples, como visto em outras respostas, através da compreensão da lista. O caso especial de uma lista de índices vazia é capturado separadamente.
fonte