summer_tree_home

Check iOでPython3をマスターするぜっ

Transposed Matrix (Scientific Expedition) - 転置行列

さて、Library 2.0 の次は Scientific Expedition にやってきた。
ざっと眺めた感じだと、ゲームプログラムっぽい問題が多いような感じ。

どんな問題?

Transposed Matrix
http://www.checkio.org/mission/matrix-transpose/

転置行列を求めよ。

転置行列って何だっけ?問題文を見ると、行列の縦と横をひっくり返したようなものか。
転置行列(Wikipedia)

例題:

checkio([[1, 2, 3],
         [4, 5, 6],
         [7, 8, 9]]) == [[1, 4, 7],
                         [2, 5, 8],
                         [3, 6, 9]]
checkio([[1, 4, 3],
         [8, 2, 6],
         [7, 8, 3],
         [4, 9, 6],
         [7, 8, 1]]) == [[1, 8, 7, 4, 7],
                         [4, 2, 8, 9, 8],
                         [3, 6, 3, 6, 1]]

問題を解くのは、それほど難しくなさそうだが、それよりも大きな問題が…。

数学記号がわからなーい

前提条件(Precondition)に書いてある意味がさっぱりわからん。何語?

0 < |A| < 10

|A| って行列式だよね?行列式が0~10の範囲ってどういう意味??
(追記)どうやら、|A|で、要素数という意味にもなるらしい。行列の幅と高さが0~10の範囲ってことかな?

∀ x ∈ A : 0 ≤ x < 10

知らない記号がいっぱい(泣)Google先生∈って何ですか?

∈ に一致する情報は見つかりませんでした。

Google先生は記号に弱いらしい。しかし、Wikipedia先生は、∈を知ってました

例えば、x が集合 X を構成する元(要素)である場合には、x ∈ X と表記

なるほど。
次は∀、これってガンダムにあったような?顔文字でもよく見るけど。
Wikipediaをさまよってたら、いいページを見つけた。
数学記号の表(Wikipedia)

∀ 全称限量記号
しばしば ∀x ∈ S; P(x) のように書かれ、集合 S の任意の元 x に対して命題 P(x) が成立することを表す。

なるほど、つまり、

∀ x ∈ A : 0 ≤ x < 10

なら、行列Aの要素xのすべてについて、0≦x<10が成り立つと。ほうほう。

どうやって解く?

さて、やっと問題に取りかかれる。
numpy使えよ。……ってのはさておき、

行と列をひっくり返すわけだから、こんな感じかな。

def checkio(data):
    row_size = len(data)
    col_size = len(data[0])
    return [[data[i][j] for i in range(row_size)] for j in range(col_size)]

簡単だ。

他の人の答え

def checkio(data):
    return [list(e) for e in zip(*data)]

http://www.checkio.org/mission/matrix-transpose/publications/ciel/python-3/first/

あー、zipを使えばよかったのか。orz


おまけ
( ∀ )←胸の谷間に見えてくる