私の行列のデルタを合計する

バックグラウンド

The deltas of an array of integers is the array formed
by getting the differences of consecutive elements. For example,
[1, 2, 4, 7, 3, 9, 6] has the following deltas:
[1, 2, 3, -4, 6, -3].

ここで、整数の行列のデルタを、各行とそれに含まれる各列のデルタとして定義します。

例として:

Row deltas:

1 2 3 4 │ => [1, 1, 1]
4 5 6 7 │ => [1, 1, 1]
7 1 8 2 │ => [-6, 7, -6]

Column deltas (the matrix' columns have been rotated into rows for simplicity):

1 4 7 │ => [3, 3] 
2 5 1 │ => [3, -4]
3 6 8 │ => [3, 2]
4 7 2 │ => [3, -5]

これは、マトリックスデルタの以下のリストを私たちに与える:

[[1, 1, 1], [1, 1, 1], [-6, 7, -6], [3, 3], [3, -4], [3, 2], [3, -5]]

そして、それらを入れ子にしたくないので、私たちはそのリストを平坦化しました:

[1, 1, 1, 1, 1, 1, -6, 7, -6, 3, 3, 3, -4, 3, 2, 3, -5]

仕事

Your 仕事 is to sum all the deltas of a matrix given as
input. Note that the matrix will only consist of non-negative
integers.

ルール

  • All standard ルール apply.

  • You may assume the matrix contains at least two values on each
    row and column, so the minimum size will be
    2×2.

  • You may take the matrix in any reasonable format, as long as you
    specify it.

  • You may not assume that the matrix is square.

  • If it might help you reduce your byte count, you may
    optionally take the number of rows and the number of columns as
    input as well (Looking at you C!).

  • This is code-golf, so the shortest code (in bytes), in each
    language
    wins!

テストケース

Input  =>  Output

[[1, 2], [1, 2]]                                    => 2
[[8, 7, 1], [4, 1, 3], [5, 5, 5]]                   => -9
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]                   => 24
[[9, 9, 9, 9, 9], [9, 9, 9, 9, 9]]                  => 0
[[1, 3, 14], [56, 89, 20], [99, 99, 99]]            => 256
[[1, 2, 3, 4], [4, 5, 6, 7], [7, 1, 8, 2]]          => 9
[[13, 19, 478], [0, 12, 4], [45, 3, 6], [1, 2, 3]]  => -72
ベストアンサー

Python
2
, 42 bytes

lambda m:sum(r[-1]-r[0]for r in m+zip(*m))

名前のない関数がリストのリストを取得し、 m し、結果の数値を返します。

Try it
online!

どうやって?

The sum of the deltas of a list is the last element minus the
first, everything else just cancels:
(r[n]-r[n-1])+(r[n-1]-r[n-2])+…+(r[2]-r[1]) =
r[n]-r[1]

m の行を別々の引数として渡すには m のアンパック(
* )を使用します zip (インターリーブ)して、マトリックスを転置します。
Python 2では、これはタプルのリストを生成するので、それを m
に追加(連結)し、すべての行と列を処理し、 r を実行して、それぞれについて上記のトリックを実行し、結果(
sum(...))を追加します。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です