Индекс суммы и лишить мою матрицу
Учитывая матрицу / 2d массив на вашем предпочтительном языке
Входные данные:
- Матрица всегда будет иметь нечетную длину
- Матрица всегда будет идеально квадратной
- Значения матрицы могут быть любым целым числом на вашем языке (положительным или отрицательным)
Пример:
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
Определения:
- «Центральный номер» определяется как число с одинаковым количеством цифр слева, справа, вверх и вниз
В этом случае его середина 100
- «Внешняя оболочка» - это набор чисел, индекс которых x или y равен 0 или размер матрицы
1 2 3 4 5 6 7
2 8
3 9
4 10
5 11
6 12
7 8 900 10 11 12 0
Твое задание:
Добавьте к центральному числу сумму каждой строки и столбца после умножения значений в каждом на их основанный на 1 индекс
Например, одна строка
4 5 6 7 8
за каждый номер
number * index + number * index.....
4*1 + 5*2 + 6*3 + 7*4 + 8*5 => 100
пример:
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
- Для всех строк и столбцов вы объединяете эти значения.
- Теперь вы тоже суммируете => 154-16 = 138
- Вы добавляете этот номер к «центральному номеру» и удаляете «внешнюю оболочку» матрицы
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
делайте это, пока не получите один номер
-2 -2 -3 => -15
4 1060 -8 => 2100
7 -1 8 => 29
27 2115 5
- Добавьте 2114 + 2147 к 1060
- Снимите «внешнюю оболочку» и получите 5321
- Теперь у нас осталось одно число
это выход!
контрольные примеры:
-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
Ответы:
MATL ,
3634 байтаВвод - это двумерный массив с
;
разделителем строкПопробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
Python 2,7, 229 байт
Это моя первая попытка чего-то подобного, так что, надеюсь, я следовал всем правилам с этим представлением. Это просто функция, которая принимает список списков в качестве параметра. Я чувствую, что суммы и списки могут быть немного сокращены, но это было слишком сложно для меня. : D
Спасибо Истерли Ирку за помощь в сборе нескольких байтов.
источник
...) + sum([i*j...
->...)+sum([i*j...
), но в целом, отличный первый пост !!!!...]for ...
работает. Вы можете удалить как минимум 2 пробела. (конец списка попадает в цикл for)C #, 257 байт
вот ответ не esolang
ungolfed:
источник
using System.Linq
иusing System
. Я не уверен, если это требуется по правилам, хотя.System.Linq
. Другие языки, которые требуют импорта для использования определенных функций, проходят через тот же процесс, поэтому я считаю несправедливым предполагать, что каждый модуль загружается в память в C #.J, 66 байт
Прямой подход, основанный на процессе, описанном в задаче.
[:+/^:2#\*]+|:
получает сумму.]+(i.@,~=](]+*)<.@-:)@#*
особенно уродливый способ увеличить центр на сумму.[:}:@}."1@}:@}.
удаляет внешнюю оболочку Вероятно, есть лучший способ сделать это.Применение
источник
Брахилог , 114 байт
Я удивлен, что это даже работает, если честно. По крайней мере, я понял, что Brachylog действительно нуждается в «изменении значения этого элемента» в качестве встроенного ...
Пример использования:
объяснение
Более читаемая (и более длинная) версия:
Я просто объясню примерно, что делает каждый предикат (т.е. каждая строка, кроме первой, которая является Главным Предикатом + предикатом 1):
Основной предикат + предикат 1
{l1,?hh.|:2f:7a$\:7a&.}.
: если вход имеет только одну строку, завершите алгоритм и верните единственное значение. В противном случае найдите все строки, которые удовлетворяют предикату 2, затем примените предикат 7 к результирующей матрице, затем предикат 7 для транспонирования, затем вызовите рекурсивно.Предикат 2
:Im:I:?:3f.
: возьмитеI
строку матрицы, найдите все значения этой строки, которые удовлетворяют предикату 3 с,I
и матрицу в качестве дополнительных входных данных.Предикат 3
[L:I:M]h:JmN,Ll:2/D(IJ,M:4&:N+.;'(DIJ),N.)
:L
это строка,I
это индекс строки,M
это матрица.N
этоJ
элементL
. Если длина,L
деленная на 2, равна обоимI
иJ
, то на выходе получается суммаN
с результатом предиката 4 в матрице. В противном случае выход простоN
. Этот предикат существенно воссоздает матрицу за исключением того, что центральный элемент добавляется к сумме.Предикат 4
$\:?c:5a+.
: примените предикат 5 к каждой строке и столбцу матрицы, объедините выходные данные с суммой результатов.Предикат 5
:6f+.
: Найдите все действительные выходные данные предиката 6 в строке, объедините выходные данные с суммой результирующего списка.Предикатное 6
:ImN,I:1+:N*.
:N
этоI
ое значение строки, унифицировать выход сN * (I+1)
.Предикат 7
brbr.
: Удалить первый и последний ряд матрицы.источник
APL, 56 символов
На английском:
⍣(⌊.5×≢⍵)
повторить "половину размера округленного размера"(⍵⍪⍉⍵)+.×⍳≢⍵
внутреннее произведение матрицы и его транспонирование с индексным вектором(-⍴⍵)↑(⌈.5×⍴⍵)↑
преобразовать результат в матрицу, дополненную нулями1 1↓¯1 ¯1↓
удаляет внешнюю оболочкуисточник