Uma sequela para esta pergunta .
Tarefa
Dada uma matriz de números inteiros positivos, encontre o maior elemento k para o qual:
Existe alguma distância inteira positiva n , de modo que o elemento na matriz localizado n é posicionado à esquerda ou à direita de k igual a n .
A matriz é garantida para conter pelo menos um elemento que atenda a essa condição.
O código mais curto (em bytes) vence. Você pode escolher o formato de E / S que desejar.
Exemplo
Dada a entrada
[4, 6, 7, 9, 3, 6, 5, 7, 2]
Os valores elegíveis são:
- O
4
, como há7
7 posições localizadas à sua direita - A primeira
6
, como existem3
3 posições localizadas à sua direita - O
3
, como há4
4 posições localizadas à sua esquerda - O
5
, como existem2
2 posições localizadas à sua direita - A segunda
7
, como há3
3 posições localizadas à sua esquerda.
Desses valores, o maior é 7
.
Casos de teste
[1, 13] → 13
[2, 9, 8, 3, 72, 2] → 8
[5, 28, 14, 5, 6, 3, 4, 7] → 14
[1, 3, 5, 15, 4, 1, 2, 6, 7, 7] → 7
[5, 1, 3, 5, 2, 5, 5, 8, 5, 1, 5, 1, 2, 3] → 5
[5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5] → 10
Respostas:
Geléia , 9 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
05AB1E , 21 bytes
Explicação
Experimente online!
fonte
Haskell,
615755 bytesExemplo de uso:
(f.zip[0..]) [5,28,14,5,6,3,4,7]
->14
.(Mais ou menos) a execução directa da definição: para cada índice
n
da lista de entradax
keepa := x!!n
se há um índicei
ondeb := x!!i
iguaisabs(n-i)
. Encontre o máximo.Edit: @xnor salvou dois bytes. Obrigado!
fonte
x
, deve ser mais curto definir uma funçãoz
e comporzip[0..]
.Gelatina , 10 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Python 3,
858072 bytesEdit: -8 Bytes graças a @Dennis
fonte
EXCEL:
3230 bytes=MAX(IF(A:A-ROW(A:A)<0,A:A,0))
Ainda não consigo acreditar que consegui ser tão curto ...
Como usar:
cole-o em QUALQUER célula, EXCETO as células da coluna A. Após colar, enquanto ainda edita, pressione
control
+shift
+enter
para inseri-lo corretamente.coloque seus valores na coluna A, 1 valor por célula (conforme entrada de CSV).
Se você quiser descobrir como isso funciona, postamos uma dica adicional nas minhas perguntas sobre Dicas para jogar golfe no Excel .
fonte
JavaScript (ES6), 61 bytes
fonte
Perl, 45 bytes
Inclui +2 para
-ap
Dê números em uma linha no STDIN:
largest.pl
:Mais um byte pode ser obtido com a substituição
^P
do caractere de controle literal, mas isso leva a um aviso no STDERR sobre os perls recentes.Assume
largest number + array length < 2^32
fonte
Pitão,
1917 bytesObrigado a @ Pietu1998 por -2 bytes
Um programa que recebe a entrada de uma lista no STDIN e imprime o resultado.
Experimente online
Como funciona
fonte
}#
é o mesmo que@
. Além disso, se você reorganizar o último bit,,-kb+bk
poderá removêk
-lo, pois o Pyth o insere automaticamente.MATL, 13 bytes
A entrada deve ser um vetor de coluna. Ou seja, a entrada é separada por ponto-e-vírgula como [1; 2; 3] ou vírgula separada com uma marca de transposição no final como [1,2,3] '.
Experimente online!
Todos os casos de teste: (A) , (B) , (C) , (D) , (E) , (F)
Agradecemos a Suever pelas sugestões na sala de bate - papo do MATL para salvar 2 caracteres.
Explicação:
A estratégia geral é a mesma da minha resposta Octave / MATLAB, onde o conceito básico é explicado: https://codegolf.stackexchange.com/a/94161/42247
O código específico nesta resposta MATL é criado da seguinte maneira:
O núcleo do método é a construção da matriz de Toeplitz, cuja i-ésima entrada é abs (ij). Primeiro construímos a matriz Toeplitz com as entradas abs (i-1) +1 com o comando toeplitz YL do MATL, da seguinte maneira:
Para ver como isso funciona, vamos chamar o vetor de entrada para esse trecho de código 'v'. O 'n' encontra o comprimento de v, então ':' constrói o vetor 1: length (v). Em seguida, o 't' faz outra cópia de 1: length (v) na pilha; essa cópia extra é necessária devido a um bug bem conhecido na função YT em MATL (o equivalente MATL de toeplitz ()), em que espera duas cópias da entrada em vez de 1. Então YT pega as duas cópias desse vetor 1 : length (v) da pilha e faz com que a matriz abs (ij) +1 Toeplitz a partir delas.
Agora, precisamos subtrair 1 dessa matriz para obter a matriz Toeplitz com as entradas abs (ij) e encontrar os locais ij em que essa matriz abs (ij) Toeplitz é igual à matriz de todos os vetores de coluna que contêm cópias de coluna da entrada vetor v. Isso é feito da seguinte maneira:
O primeiro 't' faz uma cópia extra da entrada e a armazena na pilha. O 'n: tYT' cria a matriz toeplitz como descrito anteriormente e a envia para a pilha. Então 'q' subtrai 1 da matriz Toeplitz e '=' faz a comparação de igualdade elementar entre a matriz abs (ij) e o vetor cujas colunas são cópias da entrada. Observe que, ao comparar um vetor de coluna a uma matriz, estamos tirando proveito implícito das regras de transmissão do operador do MATLAB / MATL (o vetor da coluna na comparação é copiado para criar uma matriz sem emitir nenhum comando).
Finalmente, precisamos encontrar os índices de linha i onde existe uma coluna j, de modo que a i-ésima entrada na diferença de matriz construída acima seja igual a 1, depois obtenha o valor do vetor de entrada correspondente a esses índices e, em seguida, tome o máximo. Isso nas três etapas a seguir:
1) Encontre os índices para qualquer linha que contenha um valor diferente de zero:
2) Extraia os elementos do vetor de entrada correspondentes a esses índices:
3) Encontre e retorne o elemento máximo:
fonte
YT
mudou na liberação 20.2.2 . Agora, ele usa 1 entrada por padrão (o que é mais útil em geral). Embora isso economize 1 byte aqui (removat
antesYT
), ele não pode ser explorado porque a alteração no idioma pós o desafio. Mas tem o efeito de que a sua resposta não será mais válida na nova versão, que agora é ao vivo no TIO én:
porf
Ruby, 66 bytes
fonte
Octave / MATLAB, 40 bytes
A entrada deve ser um vetor de coluna.
Obrigado a Luis Mendo pelas sugestões de salvar 3 bytes (ver comentário)
Agradecemos a Suever pelas sugestões de salvar mais 4 bytes (substituindo ~~ (sum ()) por any ())
Explicação:
Dado um vetor de entrada v, esse problema é equivalente a encontrar todas as soluções i, j da seguinte equação discreta,
onde abs () é a função de valor absoluto. Cada v (i) para o qual esta equação é resolvida é uma das soluções candidatas que podemos maximizar.
Como uma função discreta de iej, todas as possibilidades para o lado esquerdo podem ser organizadas na matriz toeplitz que se parece com isso:
E como o lado direito não depende de i, todas as possibilidades podem ser organizadas em uma matriz onde as colunas são todas cópias da entrada,
Para encontrar todas as soluções para a equação, subtraímos essas duas matrizes e localizamos onde há um zero. As linhas onde existe um zero correspondem aos índices desejados i e onde há aj tal que abs (ij) = v (i).
Outros truques:
fonte
v
como vetor de coluna, apenas afirme isso na resposta. Além disso, você substituifind
por~~
para salvar mais dois bytestoeplitz
(YT
), ele usa duas entradas (não um) por padrãoMathematica, 69 bytes
Função anônima. Pega uma lista de números inteiros como entrada e retorna um número inteiro como saída. Ignore todas as mensagens geradas.
fonte
Scala, 94 bytes
fonte
PHP, 128 bytes
fonte
Java 7,
125123 bytes2 bytes salvos graças a @mrco .
Ungolfed (tipo de) e código de teste:
Experimente aqui.
Saída:
fonte
,y
. E, de fato, cheguei à mesma conclusão em relação ao ternário único se. Claro que é possível, mas você fará a verificação duas vezes, tornando-a muito mais longa.Java, 118 bytes
fonte
Python, 58 bytes
Com base na resposta de Tony S. rubi . Esta resposta funciona em Python 2 e 3. Sugestões de golfe são bem-vindas.
Ungolfing
fonte
Ruby 56 bytes
Minha menor solução de rubi.
Muito fácil de testar no console de trilhos
Isso começou em 63 bytes, obrigado pelas sugestões para ajudar a reduzi-lo!
fonte
.map
vez de.each
(x) if (y)
pode ser substituído por(y)&&(x)
a<<b
em vez dea+=[b]
Na verdade , 17 bytes
Esta resposta é realmente uma porta da minha resposta Python . Sugestões de golfe são bem-vindas. Experimente online!
Ungolfing
fonte
T-SQL (sqlserver 2016), 132 bytes
Golfe:
Ungolfed:
Violino
fonte
JavaScript (ES6),
5654 bytesfonte
Clojure, 68 bytes
Por exemplo,
(map-indexed (juxt - +) [3 4 1 2])
é([-3 3] [-3 5] [1 3] [1 5])
(indexe+/-
seu valor), eles são usados para pesquisar valores do vetor original (fora do intervalo padrão0
) e o valor máximo é encontrado. Ainda parece um pouco detalhado, mas pelo menos eu tenho que usarjuxt
:)fonte