Desafio
A tarefa é simples. Dada uma matriz e um primeiro e último valor: Retorne o primeiro do último após o primeiro e o último do primeiro antes do último.
Ou simplesmente: dada uma matriz, var1, var2.
Matriz de exemplo:
[var2,, var1,, var2,, var2, var1, var2,]
Retorna:
- O índice do primeiro var2 no lado direito do primeiro var1 que aparece na matriz.
[Var2,, primeiro var1 ,, primeiro var2 ,, segundo var2, var1, terceiro var2,]
- O índice da primeira var1 no lado esquerdo da última var2 que aparece na matriz.
[var2,, segundo var1,, var2,, var2, primeiro var1 , último var2 ,]
Entrada
Dois números inteiros positivos distintos
Matriz de números inteiros positivos
Resultado
Índice de respostas, em ordem
Regras
A matriz conterá pelo menos uma de cada variável (tamanho mínimo de 2)
Suponha que as entradas funcionem
Exemplo:
0, 1 [1, 0]
ou similar falharia
Exemplos
Input
First = 2; Last = 4; [0, 2, 4, 2, 3, 1, 4, 0, 1, 2, 4, 9]
Output
2, 9
Input
First = 4; Last = 2; [0, 2, 4, 2, 3, 1, 4, 0, 1, 2, 4, 9]
Output
3, 6
Input
First = 0; Last = 1; [0, 1]
Output
1, 0
code-golf
array-manipulation
WretchedLout
fonte
fonte
var1
ser igual avar2
?9, 2
,6, 3
e0, 1
respectivamente (ou mais um, se a saída for indexada em 1).Respostas:
Gelatina , 17 bytes
Experimente online!
fonte
Python 2 , 72 bytes
Experimente online!
fonte
APL (Dyalog Classic) ,
2927 bytesExperimente online!
solicita a matriz e, em seguida, var1, var2
fonte
JavaScript (ES6), 63 bytes
Experimente online!
Comentado
Versões alternativas
Usando JS embutidos, uma resposta mais direta é de 79 bytes:
que pode ser ligeiramente compactado para 75 bytes:
Experimente online!
Edit : @Neil conseguiu reduzi-lo para um muito bom 67 bytes :
Experimente online!
fonte
lastIndexOf
tem dois parâmetros, de modo que reduz a resposta clara a 70 bytes, e eu era capaz de chegar com a seguinte versão 67-byte:(x,y,a,f=s=>a[z=y,y=x,x=z,s+=`ndexOf`](x,a[s](y)))=>[f`i`,f`lastI`]
Python 3 ,
9793 bytes-4 bytes graças a ovs
Experimente online!
fonte
a-1-b == a + (-b-1) == a + ~b
pode ser usado para -1 byte, atribuir aindex
função a um nome obtém isso para 93 bytesJaponês ,
272524 bytesInspirado na resposta @Arnauld
Obrigado @Shaggy -2 bytes e @ETHproductions -1 byte
Comecei com japt, então deve ser uma maneira melhor. \
Experimente online!
fonte
)
por iniciantes para salvar 2 bytes.X=WbU)...+X
: Experimente online! Eu também estou lutando para encontrar um método mais curto embora ...APL (Dyalog Unicode) , SBCS de 42 bytes
Função de infixo tácito anônimo. Pega var1, var2 como argumento à esquerda e a matriz como argumento à direita.
Experimente online!
fonte
R , 81 bytes
Experimente online!
(Indexado 1)
fonte
MATL , 27 bytes
Experimente online!
Como alternativa para o mesmo bytecount:
27 bytes
Experimente online!
O segundo é mais fácil de explicar:
A segunda parte do código faz a mesma coisa, exceto pelas seguintes alterações:
2G
para segunda entrada (var1) e3G
primeira 3ª entrada (var2) em vez de entrada implícita oui
, uma vez que essas foram consumidasPY>P
(flip array da esquerda para a direita, obtenha o máximo cumulativo, volte) em vez deY>
, para obter 1s antes da última ocorrência e não após a primeira ocorrênciaf0)
para obter o último lugar onde ambas as condições são verdadeiras, em vez do primeiro (funciona porque o MATL usa indexação modular, portanto, 0 é usado para se referir ao último índice da matriz)fonte
MATLAB (80 bytes)
A entrada é
x
,y
ea
. Como o MATLAB é indexado em 1, você deve adicionar 1 aos casos de teste.Caso de teste:
fonte
Java 8, 114 bytes
Um lambda obtendo a
java.util.List<Integer>
e doisint
s (var1, var2) e retornando um par separado por vírgula.Experimente Online
fonte
Kotlin , 132 bytes
Experimente online!
fonte
Julia ,
7164 bytesgraças ao sundar e ao
find(A.==x)[]
invés delefindfirst(A,x))
..
fonte
find(A.==x)[]
vez defindfirst(A,x)
.