Computar minimax de uma matriz
Considere uma matriz xcomo [1 5 3 4]e um número n, por exemplo 2. Escreve todas Length- nsubarrays deslizantes: [1 5], [5 3], [3 4]. Permita que o minimax da matriz seja definido como o mínimo dos máximos dos blocos deslizantes. Portanto, neste caso, seria o mínimo de 5, 5, 4, o que é 4.
Dada uma matriz xe um número inteiro positivo n, produza o minimax conforme definido acima.
A matriz xconterá apenas números inteiros positivos. nsempre será no mínimo 1e no máximo o comprimento de x.
A computação pode ser feita por qualquer procedimento, não necessariamente como definido acima.
Código de golfe, menos bytes ganha.
x, nresultado
Este é um trem de função monádico que espera matriz e número inteiro como argumentos da direita e da esquerda, respectivamente.
Experimente com o TryAPL .
Um trem de duas funções é o topo , o que significa que a correta é chamada primeiro (com os dois argumentos) e a esquerda é chamada em cima (com o resultado como argumento único).
Uma monádica f/simplesmente reduz seu argumento em f. No entanto, se chamado de forma diádica, f/é n-wise reduz e leva o tamanho da fatia como argumento à esquerda.
Espere ... Como você reduz algo que já foi reduzido? Não é apenas um elemento singular?
— Cyoce 15/02
@Cyoce A redução N-wise produz uma matriz de máximos. Por exemplo, 2 ⌈/ 1 2 3 4calcula o máximo de (1 2) (2 3) (3 4), então ele retorna 2 3 4.
— Dennis15 /
Está bem. Eu pensei que isso significava que um N-wise reduzir deu os primeiros N elementos e reduzi-los com a função, por exemplo, um 2-wise reduzir é apenas um normal, reduzir
Quantos bytes devem ⌊ser contados como? 1 ou 2?
@njpipeorgan Isso depende da codificação. APL tem a sua própria página de código legado (que antecede Unicode por várias décadas), e codifica ⌊e ⌈como um único byte cada.
Um programa completo seria q~ew::e>:e<, que é também 11 bytes
Onde x é a matriz en é o número pelo qual ela deve ser dividida.
Não quer dizer each_cons?
— Não que Charles
Recebe entrada no formulário list newline int
Ou execute um conjunto de testes!
Ou também 10 bytes
Gelatina, 6 bytes
Agradecimentos a user81655 por ajudar a eliminar 11 bytes
Sendo tudo positivo:(x,y,M=Math.max)=>-M(...x.slice(y-1).map((a,i)=>-M(...x.slice(i,i+y))))
— edc65 15/02
Nada muito inovador. Esta é uma função que aceita uma matriz e um número inteiro e retorna um número inteiro. Ele apenas usa o algoritmo básico. Seria muito mais curto se, mine maxnão exigisse, dividir matrizes em argumentos.
Obtemos cada sub-matriz sobreposta, obtemos o máximo e o mínimo do resultado.
Perl 6 , 32 bytes
Requer que o zoo seja instalado.
editar - 6 bytes por zoo::rollmaxexistir!
Semelhante à resposta da APL. >./\aplica-se >./(máximo) aos conjuntos (arg esquerdo) do arg direito. Em seguida, <./encontra o mínimo disso, pois está limitado [:.
Calcula recursivamente o mínimo de duas coisas: o máximo das primeiras nentradas e a função recursiva na lista com o primeiro elemento removido. Para um caso base da lista com menos de nelementos, fornece a lista vazia, que serve como infinito porque o Python 2 coloca as listas como maiores que os números.