Возьмите квадратную матрицу, содержащую положительные целые числа в качестве входных данных, и вычислите «повернутую сумму» матрицы.
Вращаемая сумма:
Взять сумму исходной матрицы и повернуть ту же матрицу на 90, 180 и 270 градусов.
Предположим, что матрица:
2 5 8
3 12 8
6 6 10
тогда повернутая сумма будет:
2 5 8 8 8 10 10 6 6 6 3 2
3 12 8 + 5 12 6 + 8 12 3 + 6 12 5 =
6 6 10 2 3 6 8 5 2 10 8 8
26 22 26
22 48 22
26 22 26
Тестовые случаи:
Ввод и вывод разделены тире, различные тестовые случаи разделены новой строкой. Тестовые случаи в более удобных форматах можно найти здесь .
1
-------------
4
1 3
2 4
-------------
10 10
10 10
14 6 7 14
6 12 13 13
6 2 3 10
5 1 12 12
-------------
45 37 24 45
24 30 30 37
37 30 30 24
45 24 37 45
14 2 5 10 2
18 9 12 1 9
3 1 5 11 14
13 20 7 19 12
2 1 9 5 6
-------------
24 29 31 41 24
41 49 31 49 29
31 31 20 31 31
29 49 31 49 41
24 41 31 29 24
f=lambda*l:l[3:]and[map(sum,zip(*d))for d in zip(*l)]or f(zip(*l[0][::-1]),*l)
сохраняет два байта с "нормальным" вводом. Попробуйте онлайн!lambda*l
это невозможно в Python 2 по какой-то причине.x,*y=1,2,3
в Python 2.7 или[*x]
в Python 3.4, но звездные выражения могут использоваться для аргументов функций даже в Python 1.6. Попробуйте онлайн!Октава , 29 байт
Попробуйте онлайн!
объяснение
Это добавляет матрицу ввода с повернутой на 90 градусов версией самой себя. Результат затем добавляется с повернутой на 180 градусов версией самого себя.
источник
Чисто , 110 байт
Попробуйте онлайн!
Из матрицы:
X = transpose(reverse M)
: Поворот на 90 градусовY = reverse(map reverse M)
: Поворот на 180 градусовZ = reverse(transpose M)
: Вращение на 270 градусовЭто приводит в действие оператор сложения над
M
иX
, а такжеY
иZ
, а затем над результатами.источник
Wolfram Language (Mathematica) , 28 байт
есть\[Transpose]
.Попробуйте онлайн!
источник
ReplacePart[#,{a_,b_}:>Tr@Extract[#,{{a,b},{b,-a},{-a,-b},{-b,a}}]]&
а такжеPlus@@NestList[Reverse@#&,#,3]&
Юлия 0,6 , 29 байт
Попробуйте онлайн!
Я не мог получить ниже решения LukeS
Но, пытаясь, я придумал это, что я думаю, довольно мило.
Сначала мы переопределяем умножение на операцию поворота, где первый раз - это количество поворотов. Так как Юлия умножается путем сопоставления, тогда:
1x
становитсяrotr90(x,1)
и3x
становитсяrotr90(x,3)
и т. Д.Затем мы выписываем сумму.
источник
Юлия 0,6 ,
2824 байтаПопробуйте онлайн!
источник
[1]
пример на следует делать,~reshape([1], (1,1))
потому что именно так матрица 1x1 объявлена в julia 0.6.Желе , 7 байт
Попробуйте онлайн!
источник
MATL , 9 байт
Попробуйте это на MATL Online
объяснение
источник
Октава , 33 байта
Попробуйте онлайн!
Объяснение:
(r=@rot90)
встроенным способом создания дескриптора функции,r
используемой для поворота матрицы на 90 градусов. Еслиk
задан второй аргумент,r
он будет поворачивать матричныеk*90
градусы. Так что это эквивалентно псевдокоду:источник
Pyth , 13 байт
Попробуйте онлайн!
источник
J ,
1615 байтПопробуйте онлайн!
источник
^:
. Умное решение!MATL , 7 байт
Попробуйте это в MATL Online!
объяснение
Порт моего октавного ответа.
источник
R ,
6964 байтПопробуйте онлайн!
Попытка номер три в Codegolf. От 69 до 64 байтов благодаря Джузеппе!
источник
a
к аргументу функции сохранит байты, позволив вам избавиться от{}
тела функции. Кроме того, портирование октавного подхода Луиса Мендо может сэкономить несколько байтов? Наконец, я не уверен на 100%, ноt(apply(x,2,rev))
эквивалентноapply(x,1,rev)
?n
дляa()
повторить операцию , хотя.APL (Dyalog Classic) , 8 байт
Попробуйте онлайн!
источник
Пари / ГП , 31 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 77 байт
источник
Желе , 7 байт
Попробуйте онлайн!
Сохранено 1 байт благодаря Erik the Outgolfer (также благодаря предложению по исправлению ошибки).
Как?
источник
Python 2 , 76 байт
Попробуйте онлайн!
источник
APL (Dyalog Classic) , 17 байтов
Попробуйте онлайн!
APL NARS 34 байта
2117 символов-2 символа благодаря ngn
-2 символа, потому что составной оператор ∘, кажется, имеет приоритет над +
кажется, что roa повернуть на 90 °, 180a повернуть на 180 °, roa повернуть на 270 ° как ⍉⌽
Если существует оператор p как:
Оператор p выше будет таким, что если g является функцией с 1 аргументом (монадической?), Она должна быть:
решение будет pheraps 15 символов
Но может быть лучше один оператор, «составленный за время» d такой, что «3 df w» равно f (f (f (w))).
Сейчас я написал что-то, но оно слишком хрупкое без проверки типов.
Но мне больше нравится оператор q, который повторяет compose of f с аргументом m (он не завершен, потому что случаи ошибок типов не записываются)
решение будет 17 символов, но я предпочитаю
источник
⍉⌽
и все это подходит для поезда+/⌽∘⍉f 4⍴⊂⍵
? Чтобы получить четыре копии⍵
, сначала вы должны приложить его⊂
. Для того, чтобы иметь в⌽⍉
качестве операндаf
, вы должны составить его в одну функцию , как это:⌽∘⍉
. Таинственнымf
может быть сканирование (обратная косая черта), но есть еще одна деталь, о которой нужно позаботиться -⌽∘⍉
получит левый аргумент, поэтому мы должны сделать так, чтобы он игнорировал его:+/{⌽⍉⍵}\4⍴⊂⍵
или+/⊢∘⌽∘⍉\4⍴⊂⍵
.⊢ + ⌽∘⍉ + ⌽∘⊖ + ⍉∘⌽
. Это может привести к еще более коротким решениям, если вы ловко переставляете загогулины и эффективно используете поезда.K4 / K (ок) ,
238 байтРешение:
Попробуйте онлайн!
Пример:
Объяснение:
Спасибо ngn за упрощенную технику преобразования.
Дополнительно:
В Q это можно записать как
источник
+/{|+x}\
Рубин ,
74 7266 байтПопробуйте онлайн!
Это работает поэтапно, находя связанные элементы математически, а не вращая массив. Ключевая часть
i,j=j,~i
, которая поворачивается (i, j) по часовой стрелке на 90 градусов.-2 байта благодаря мистеру Xcoder
-6 байт из-за
sum
источник
Python 3 ,
105102 байта3 байта благодаря мистеру Xcoder.
Попробуйте онлайн!
источник
Рубин
8979 байт-10 байт благодаря Unihedron
Попробуйте онлайн!
источник
.map &:dup
на,*1
чтобы отрезать много символов.array*length
создает новый массив и является удобным способом мелкого клонирования.n=*m
еще короче.transpose
позаботится05AB1E , 12 байтов
Попробуйте онлайн!
источник
Haskell ,
84 8367 байтПопробуйте онлайн!
Спасибо Лайкони и человеку за то, что он сэкономил много байтов!
источник
Шелуха , 9 байт
Попробуйте онлайн!
объяснение
источник
тинилисп , 132 байта
Давайте возьмем недавно добавленную библиотечную функцию
transpose
для вращения!Последняя строка - это неназванная лямбда-функция, которая выполняет суммирование вращения. Чтобы использовать его на самом деле, вы захотите использовать его
d
для привязки к имени. Попробуйте онлайн!Ungolfed, с комментариями
источник
Атташе , 20 байт
Попробуйте онлайн!
объяснение
MatrixRotate&0:3
расширяется, с входным сигналомx
,MatrixRotate[x, 0:3]
который в свою очередь exapnds к[MatrixRotate[x, 0], MatrixRotate[x, 1], MatrixRotate[x, 2], MatrixRotate[x, 3]]
. То есть он векторизуется над RHS. ЗатемSum
берется сумма всех этих матриц на один уровень. Это дает желаемый результат.источник
Java 8,
135133 байта-2 байта благодаря @ceilingcat .
Объяснение:
Попробуйте онлайн.
источник