Soma de índice e tira minha matriz
Dada uma matriz / matriz 2D em seu idioma preferido
Entrada:
- A matriz sempre terá um comprimento ímpar
- A matriz sempre será perfeitamente quadrada
- Os valores da matriz podem ser qualquer número inteiro no seu idioma (positivo ou negativo)
Exemplo:
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 50 6 7 8 9
4 5 6 100 8 9 10
5 6 7 8 -9 10 11
6 7 8 9 10 11 12
7 8 900 10 11 12 0
Definições:
- O "número central" é definido como o número que tem a mesma quantidade de números à esquerda, direita, para cima e para baixo
Neste caso, o seu meio intermediário 100
- O "invólucro externo" é a coleção de números cujo índice x e y é ou 0 ou o tamanho da matriz
1 2 3 4 5 6 7
2 8
3 9
4 10
5 11
6 12
7 8 900 10 11 12 0
Sua tarefa:
Adicione ao número central a soma de cada linha e coluna após multiplicar os valores em cada um pelo índice baseado em 1
Uma única linha, por exemplo
4 5 6 7 8
para cada número
number * index + number * index.....
4*1 + 5*2 + 6*3 + 7*4 + 8*5 => 100
exemplo:
2 -3 -9 4 7 1 5 => 61
-2 0 -2 -7 -7 -7 -4 => -141
6 -3 -2 -2 -3 2 1 => -10
8 -8 4 1 -8 2 0 => -20
-5 6 7 -1 8 4 8 => 144
1 5 7 8 7 -9 -5 => 10
7 7 -2 2 -7 -8 0 => -60
|
78 65 60 45 -15 -89 10 => 154
|
=> -16
- Para todas as linhas e colunas, você combina esses valores.
- Agora você soma isso também => 154-16 = 138
- Você adiciona esse número ao "número central" e remove a "casca externa" da matriz
0 -2 -7 -7 -7 => -88
-3 -2 -2 -3 2 => -15
-8 4 1+138 -8 2 => 395
6 7 -1 8 4 => 69
5 7 8 7 -9 => 26
19 69 442 30 -26
faça isso até você terminar com um único número
-2 -2 -3 => -15
4 1060 -8 => 2100
7 -1 8 => 29
27 2115 5
- Adicione 2114 + 2147 a 1060
- Remova o "escudo externo" e obtenha 5321
- Agora temos um único número restante
esta é a saída!
casos de teste:
-6
-6
-7 -1 8
-4 -6 7
-3 -6 6
2
6 7 -2 5 1
-2 6 -4 -2 3
-1 -4 0 -2 -7
0 1 4 -4 8
-8 -6 -5 0 2
-365
8 3 5 6 6 -7 5
6 2 4 -2 -1 8 3
2 1 -5 3 8 2 -3
3 -1 0 7 -6 7 -5
0 -8 -4 -9 -4 2 -8
8 -9 -3 5 7 8 5
8 -1 4 5 1 -4 8
17611
-9 -7 2 1 1 -2 3 -7 -3 6 7 1 0
-7 -8 -9 -2 7 -2 5 4 7 -7 8 -9 8
-4 4 -1 0 1 5 -3 7 1 -2 -9 4 8
4 8 1 -1 0 7 4 6 -9 3 -9 3 -9
-6 -8 -4 -8 -9 2 1 1 -8 8 2 6 -4
-8 -5 1 1 2 -9 3 7 2 5 -6 -1 2
-8 -5 -7 -4 -9 -2 5 0 2 -4 2 0 -2
-3 -6 -3 2 -9 8 1 -5 5 0 -4 -1 -9
-9 -9 -8 0 -5 -7 1 -2 1 -4 -1 5 7
-6 -9 4 -2 8 7 -9 -5 3 -1 1 8 4
-6 6 -3 -4 3 5 6 8 -2 5 -1 -7 -9
-1 7 -9 4 6 7 6 -8 5 1 0 -3 0
-3 -2 5 -4 0 0 0 -1 7 4 -9 -4 2
-28473770
Respostas:
MATL ,
3634 bytesInput é uma matriz 2D com
;
como separador de linhasExperimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Python 2.7, 229 bytes
Esta é a minha primeira tentativa de algo assim, então espero ter seguido todas as regras com este envio. Esta é apenas uma função que recebe uma lista de listas como parâmetro. Eu sinto que as somas e a compreensão da lista provavelmente poderiam ser reduzidas um pouco, mas foi muito difícil para mim. : D
Agradecemos a Easterly Irk por me ajudar a eliminar alguns bytes.
fonte
...) + sum([i*j...
->...)+sum([i*j...
), mas no geral, ótimo primeiro post !!!!...]for ...
funciona. Você pode remover pelo menos 2 espaços assim. (fim da lista atinge o loop)C #, 257 bytes
aqui está uma resposta não esolang
ungolfed:
fonte
using System.Linq
eusing System
. Não tenho certeza se é exigido pelas regras.System.Linq
. Outras linguagens que exigem importação para usar certos recursos passam pelo mesmo processo, por isso acho injusto supor que todos os módulos estejam carregados na memória em C #.J, 66 bytes
Abordagem direta com base no processo descrito no desafio.
[:+/^:2#\*]+|:
recebe a soma.]+(i.@,~=](]+*)<.@-:)@#*
é uma maneira particularmente feia de aumentar o centro pela soma.[:}:@}."1@}:@}.
remove a casca externa. Provavelmente existe uma maneira melhor de fazer isso.Uso
fonte
Braquilog , 114 bytes
Estou surpreso que isso funcione para ser honesto. Pelo menos eu percebi que o Brachylog realmente precisa de um "valor de alteração desse elemento" como um recurso interno…
Exemplo de uso:
Explicação
Versão mais legível (e mais longa):
Eu só vou explicar mais ou menos o que cada predicado (ou seja, cada linha, exceto a primeira que é predicado principal + predicado 1) faz:
Predicado principal + predicado 1
{l1,?hh.|:2f:7a$\:7a&.}.
: se a entrada tiver apenas uma linha, encerre o algoritmo e retorne o único valor. Caso contrário, encontre todas as linhas que satisfazem o predicado 2, aplique o predicado 7 na matriz resultante, depois o predicado 7 na transposição e chame recursivamente.Predicado 2
:Im:I:?:3f.
: Pegue aI
quinta linha da matriz, encontre todos os valores dessa linha que satisfaçam o predicado 3I
e a matriz como entradas adicionais.Predicado 3
[L:I:M]h:JmN,Ll:2/D(IJ,M:4&:N+.;'(DIJ),N.)
:L
é a linha,I
é o índice da linha,M
é a matriz.N
é oJ
th elemento deL
. Se o comprimento deL
dividido por 2 for igual a ambosI
eJ
, a saída será a soma deN
com o resultado do predicado 4 na matriz. Caso contrário, a saída é justaN
. Esse predicado recria essencialmente a matriz, com a exceção de que o elemento central é adicionado à soma.Predicado 4
$\:?c:5a+.
: aplique o predicado 5 em cada linha e coluna da matriz, unifique a saída com a soma dos resultados.Predicado 5
:6f+.
: encontre todas as saídas válidas do predicado 6 na linha, unifique a saída com a soma da lista resultante.Predicado 6
:ImN,I:1+:N*.
:N
é oI
valor th da linha, unifique a saída comN * (I+1)
.Predicado 7
brbr.
: Remova a primeira e a última linha da matriz.fonte
APL, 56 caracteres
Em inglês:
⍣(⌊.5×≢⍵)
repita "metade do tamanho de uma dimensão arredondada" - vezes(⍵⍪⍉⍵)+.×⍳≢⍵
produto interno da matriz e sua transposição com o vetor de índice(-⍴⍵)↑(⌈.5×⍴⍵)↑
transformar resultado em matriz acolchoada com 0s1 1↓¯1 ¯1↓
remove casca externafonte