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
おまけ
( ∀ )←胸の谷間に見えてくる