Meu chefe agora quer que eu implemente um mecanismo que permita que ele procure por um item em uma matriz e forneça a ele os índices / índices onde esse valor ocorre.
Sua tarefa:
Escreva um programa ou função que receba uma matriz e um valor (String, Inteiro, Flutuante ou Booleano) e retorne os índices da matriz na qual o valor ocorre (0 ou 1 indexado, o que você preferir). Se o valor não estiver na matriz, retorne uma matriz vazia.
Entrada:
Uma matriz A e um valor V, que podem ou não estar presentes em A.
Saída:
Uma matriz contendo o (s) índice (s) no qual o V ocorre em A ou, se V não ocorrer em A, uma matriz vazia.
Casos de teste:
Observe que os casos de teste são baseados em 0.
12, [12,14,14,2,"Hello World!",3,12,12] -> [0,6,7]
"Hello World", ["Hi", "Hi World!", 12,2,3,True] -> []
"a", ["A",True,False,"aa","a"] -> [4]
12, [12,"12",12] -> [0,2]
Pontuação:
Isso é código-golfe , então a pontuação mais baixa em bytes vence.
code-golf
array-manipulation
Gryphon - Restabelecer Monica
fonte
fonte
Respostas:
Pitão , 2 bytes
Indexado a 0.
Experimente online! ou Verifique todos os casos de teste
Explicação
fonte
MATL , 2 bytes
Ele
m
consome dois argumentos e verifica se cada elemento da matriz é igual ao outro argumento,f
retorna os índices das entradas verdadeiras de uma matriz.Experimente online!
fonte
ismember
vez de=
manipular adequadamente matrizes de seqüências de caracteres.mf
Python 3 , 45 bytes
-3 bytes graças a @EriktheOutgolfer e @Chris_Rands
Suíte de teste.
Hoje eu aprendi
enumerate(x) == zip(range(len(x)),x)
.Python 3 , 47 bytes
Experimente online! ou Verifique todos os casos de teste
fonte
enumerate()
para derrubá-lo um par de byteslambda n,l:[x for x,y in enumerate(l)if y==n]
R (+ pryr), 20 bytes
Que avalia a função
Onde qualquer um
a
pode ser o valor a ser procurado eb
o vetor, ou o contrário. Quando apresentado com dois vetores de comprimentos desiguais (um valor único conta como um vetor de comprimento 1 em R), R envolverá o menor com o comprimento do maior. Então a igualdade é verificada. Isso gera um vetor lógico.which
fornece os índices onde esse vetor é verdadeiro.Experimente online!
fonte
JavaScript, 39 bytes
O snippet acima pode não funcionar em todos os navegadores, então aqui está um link TIO .
fonte
JavaScript (ES6),
4443 bytesO riscado 44 ainda é regular 44;
Guardado 1 bytes graças a @Arnauld
fonte
===
normal==
por um byte a menos? Eu inventei literalmente a mesma coisa, nomes de variáveis e tudo haha.===
é necessário distinguir12
de"12"
05AB1E , 4 bytes
Experimente online!
1 indexado.
fonte
12
e[12,'12']
, a menos que ele diga que é frio para linguagens que não são realmente concretas, não se importam com os tipos.12
≠'12'
em 05AB1E porque às vezes eles se comportam de maneira diferente ... não tenho certeza se há algum teste de igualdade que pode suportar tal coisa embora.is_alpha (a)
eis_number (d)
, mas acho que podemos assumir que as nossas são válidas até que seja dito o contrário.C #,
8872 bytesEconomizou 16 bytes graças a @LiefdeWen.
Experimente online!
fonte
i==o
que não funciona.using System.Linq;a=>b=>a.Select((x,i)=>x.Equals(b)?i:-1).Where(x=>x>=0)
Gelatina , 3 bytes
Experimente online!
-1 graças ao Sr. Xcoder . (cadeias diádicas)
fonte
Haskell ,
4139 bytesExperimente online!
Salvou dois bytes graças a @flawr
Haskell é digitado estaticamente, então tive que usar um pouco de solução alternativa para executar os casos de teste.
fonte
v#l=...
em vez def v l=...
, você vai economizar dois bytes :)v!l=...
, mas não sabia se foi aceito. Vou editar a resposta. Obrigado!map
em algumafilter
expressão é muitas vezes um indicador de que uma compreensão da lista pode ser mais curto:v!l=[i|(i,x)<-zip[1..]l,x==v]
.Casca , 5 bytes
Experimente online! 1 indexado.
Explicação
fonte
Ruby,
46 4039 bytesSalvo 7 bytes !!! graças a Eric Duminil.
Experimente online.
fonte
!1
forfalse
.Ruby, 38 bytes
Experimente online!
fonte
Planilhas Google, 101 bytes
Valor
V
emA1
e matrizA
noB1
com cada entrada separadas por uma vírgula. Entradas nulas não são permitidas (a linha 5 abaixo mostra o que acontece).Explicação:
Offset(A1,0,0,1,Counta(Split(B1,",")))
retorna um intervalo com uma linha de altura e tantas colunas de largura quanto entradasA1
.=IfError(Join(",",Filter(Column(~),Exact(Split(B1,","),A1))),"")
filtra os números de coluna desse intervalo com base em se o valor inA1
é exatamente cada um dos valoresB1
e concatena todos eles em uma lista delimitada por vírgulas.fonte
Clojure , 40 bytes
Primeira tentativa de código de golfe.
keep-indexed
mapeia uma função sobre uma coleção aqui, passando o índice atual para o retorno de chamada e produzindo valores de retorno diferentes de zero.Experimente online!
fonte
APL (Dyalog Unicode) , SBCS de 2 bytes
Leva o item a ser procurado como argumento à esquerda (deve ser escalar para localizar um item da matriz de pesquisa em vez de uma sub-matriz) e a matriz de pesquisa (que pode ter até 15 dimensões) como argumento correto. Retorna a lista de índices, cada um dos quais pode ter tantos elementos quanto o número de dimensões na matriz de pesquisa.
Experimente online!
⍸
descobre onde⍷
encontradofonte
⍸
não está no conjunto de caracteres. Ainda assim, como o Dyalog usa muito menos que 256 caracteres únicos, poderia ter sido um único byte. Quando adicionamos novos glifos, evitamos alterar o conjunto de caracteres para manter a compatibilidade com versões anteriores.Lote, 86 bytes
Recebe a entrada como parâmetros da linha de comando (valor e os elementos da matriz como parâmetros separados). Nota: A citação de string é considerada parte da correspondência, por exemplo
"1"
, não será igual1
(custaria 6 bytes).fonte
Python 2 , 49 bytes
Experimente online!
Não é curto o suficiente, mas achei legal. ¯ \ _ (ツ) _ / ¯
fonte
Perl 5 , 28 bytes
Experimente online!
A saída é indexada em 1.
Uma função anônima é bastante incomum para Perl, mas é a mais curta possível.
grep ..., 1 .. @_
itera sobre os índices da matriz de entrada (na verdade, vai uma célula além da última, mas não importa), mantendo apenas o índice que satisfaz$_[$_]eq$_[0]
, ou seja. aqueles em que o valor do elemento ($_[$_]
) é igual ao valor que precisamos manter ($_[0]
).Um pouco mais (31 bytes (30 +
-l
sinalizador)), mas como um programa completo:Experimente online!
fonte
Haskell ,
3733 bytesObrigado @Laikoni por -4 bytes!
Experimente online!
fonte
findIndices.(==)
elemIndices
?Java 8,
146113112111110108 bytes-2 bytes graças a @TAsk usando em
Vector
vez deArrayList
.-1 byte usando em
Stack
vez deVector
.-2 bytes graças a @Jakob inserindo um
ArrayList
vez de uma matriz.Indexado a 0
Explicação:
Experimente aqui.
fonte
Vector
pode economizar alguns bytes. :)List
+ comArrayList
bastante frequência.List r=new Vector();
vai funcionar também.null
, mas tudo bem.05AB1E , 4 bytes
Experimente online!
É indexado 1, como mostrado abaixo:
fonte
Mathematica, 12 bytes
1-Indexado
entrada [Matriz, Valor]
saída
fonte
Position
?Haskell, 29 bytes
Experimente online!
fonte
Japonês , 9 bytes
1 indexado.
A entrada Japt não suporta booleanos; portanto, eles foram substituídos por
0
e1
nos casos de teste.Experimente online! com o
-Q
sinalizador para formatar a saída da matriz.Solução indexada em 0, 11 bytes
Experimente online!
fonte
¶
em que não¥
é útil: o PI estava pensando em fazer algo do tipom@Y*(X¶V} f
, mas eu não tinha percebido que isso não funcionaria para o índice0
. A indexação 1 é inteligente ...Perl 6 , 21 bytes
Experimente online!
O
:k
advérbio paragrep
diz para retornar as chaves (índices) correspondentes da sequência de entrada que correspondem ao predicado* === $^v
.Se seqüências de caracteres e números forem considerados equivalentes, pode-se usar um predicado grep de apenas em
$^v
vez de* === $^v
.fonte
eqv
pode ser melhor do que===
depender do que você deseja considerar valores equivalentes.Lisp comum, 66 bytes
Experimente online!
fonte
TXR Lisp , 26 bytes
Em outras palavras, "Onde o argumento 2 é igual ao argumento 1?"
Corre:
fonte
Clojure,
3938 bytesUm pouco obscuro :) O primeiro argumento de entrada é um
vec
dos valores e o segundo é o valor pesquisado.%
mapeia os índices para valores e o conjunto#{%2}
retorna verdade (o argumento de entrada%2
) ou falsonil
para esse valor. comp os compõe juntos.fonte
C
340362166115 bytesOlá a todos. Minha primeira vez aqui. Eu percebi que, como eu gosto (tentando) de escrever código otimizado, também posso tentar.
@Rodney - ~ 39 bytes das inclusões
@ Zacharý - 7 bytes com digitação implícita
Indexado a 0 .
Como executar:
Conforme sugestão do @Arnolds, o programa aceita argumentos de uma maneira muito mais amigável em C. Isso me permite reduzir o tamanho do arquivo em pouco mais da metade.
Os argumentos devem ser passados na seguinte ordem
value [element1 ...]
que chaves indicam argumentos opcionaisVocê pode ou não ter que adicionar aspas escapadas a quaisquer strings fornecidas para satisfazer a condição de
12 != "12"
. No meu sistema, isso pode ser feito da seguinte maneiragolfed
destroçado
fonte
i = 0
. Estes podem ser removidos. Sugiro brincar um pouco com o espaço em branco.,12
e um segundo argumento de[12,14,14,2,"Hello World!",3,12,12]
impressões[5,6]
tecnicamente incorretos.#include
instruções,strstr(h+i,n)-h ==i
tem um espaço extra e pode fazê-lo emreturn-1
vez dereturn -1
.#include
declarações