O desafio
Dada uma grade de números (10 <= N <= 99) Retorne o número com a soma mais alta dos quatro números adjacentes a ele; esses são os números acima, abaixo, direita e esquerda do número, mas não ele próprio.
- O número em si não conta, apenas seus quatro vizinhos.
- Um número na borda deve ser tratado como se o número ausente fosse um 0.
- Vou projetar o teste para evitar laços.
- Os números não se repetem.
- Isso é código-golfe .
Exemplo
Dado
56 98 32 96
12 64 45 31
94 18 83 71
Retorna
18
Um teste real
Dado
98 95 67 66 57 16 40 94 84 37
87 14 19 34 83 99 97 78 50 36
18 44 29 47 21 86 24 15 91 61
60 41 51 26 10 58 11 62 55 71
42 85 56 12 46 81 93 65 49 77
89 13 74 39 54 76 92 33 82 90
96 88 70 79 80 28 25 20 75 68
38 63 17 72 53 48 73 30 45 69
64 35 32 31 23 43 22 52 27 59
Retorna
13
Dado
82 43 79 81 94 36 17 64 58
24 52 13 87 70 18 28 61 69
16 99 75 21 50 44 89 90 51
49 80 63 31 54 65 41 55 38
67 91 76 78 23 86 83 14 73
46 68 62 77 34 48 20 74 10
33 35 26 97 59 66 25 37 32
12 92 84 27 85 56 22 40 45
96 15 98 53 39 30 88 71 29
60 42 11 57 95 19 93 72 47
Retorna
15
Respostas:
MATL ,
20151312 bytesEconomizou 5 bytes graças a Emigna, 2 graças a Giuseppe e outro obrigado a Luis Mendo.
Experimente online!
Explicação
fonte
APL (Dyalog Unicode) ,
3127262423 bytes SBCS-2 graças ao vacas charlatão. -1 graças a ngn.
Função de prefixo tácito anônimo. Toma uma matriz como argumento. Assume
⎕IO
( I ndex O rigin)0
que é o padrão em muitos sistemas.Experimente online!
,
percorrer (achatar) a entrada{
…}⊃
Escolha um elemento a partir dele de acordo com o resultado da seguinte função:⊢⍵
produzir o argumento (separa3 3
de⍵
)…
⌺3 3
Aplique a seguinte função a cada bairro 3 por 3:⊢∘,
ignorar as informações de ponta em favor do bairro desarrumado (achatado)(
…)
Aplique a seguinte função tácita àqueles-/
a soma alternada (lit. associativo direito menos redução)+/-
subtraia isso da soma (isso dá a soma de todos os outros elementos),
passear (achatar) que (o bairro soma)⍒
produzir os índices que classificariam isso⊃
escolha a primeira (ou seja, o índice da soma mais alta)fonte
{⊃⍒,{+/1↓⍉4 2⍴⍵}⌺3 3⊢⍵}⊃,
? Edit: or even{⊃⍒,{⊢/+⌿4 2⍴⍵}⌺3 3⊢⍵}⊃,
{⊃⍒,(+/--/)⊢∘,⌺3 3⊢⍵}⊃,
Gelatina , 22 bytes
Experimente online!
Não ter built-ins de convolução como MATL e DyalogEsquecer que seu idioma tem embutidos de convolução (obrigado @dylnan) dói, mas podemos ficar bem sem eles, parcialmente graças aŒM
eœị
. Primeiro, uma função auxiliar para calcular vizinhos em apenas uma direção, que acidentalmente transpõe a entrada:Visualmente, o cálculo é:
Interpretação: a célula (x, y) deste resultado é a soma dos vizinhos horizontais da célula (y, x). (Por exemplo, aqui vemos que f (A) [2,3] = 16 = 7 + 9 = A [3,1] + A [3,3] .)
Então, a principal função:
fonte
æc
?Gelatina , 18 bytes
Experimente online!
A função auxiliar encontra os vizinhos de cada elemento em cada linha. A função principal faz isso nas linhas e as colunas encontram o elemento que possui a soma máxima da vizinhança.
fonte
Wolfram Language (Mathematica) , 58 bytes
Experimente online!
fonte
Python 2 , 127 bytes
Experimente online!
fonte
Estêncil , 1 + 10 = 11 bytes (não concorrente)
Opção de linha de comando:
1
computação 1 geraçãoExperimente online!
y
da entrada original nivelada,⊃⍨
escolha⊃
a primeira⍒
em ordem decrescente,
da+/
somas dosN
bairros de von neumanN sem serfonte
y
ao idioma quando vi que ele precisava de acesso mais fácil à entrada original. Antes disso, você tinha que escrever em(,⍎'input')
vez dey
.JavaScript (ES6), 94 bytes
Experimente online!
Quão?
Em vez de procurar o máximo da soma dos 4 vizinhos, procuramos o m mínimo da soma s dos seus complementos únicos. Isso nos permite processar valores indefinidos como zeros, porque:
O mapa interno () é escrito de tal forma que não altera o conteúdo da linha r . Portanto, podemos salvar seu resultado em p para testar os principais vizinhos na próxima iteração.
Nós usamos:
~r[x-1]
para a célula esquerda~r[x+1]
para a célula certa~p[x]
para a célula superior~(a[y+1]||0)[x]
para a célula inferiorfonte
K (ngn / k) ,
4340 bytesExperimente online!
fonte
Java 8, 187 bytes
Experimente online.
Explicação:
fonte
Javascript ES6, 170 bytes
fonte