mixiの課題丸投げをひたすら解く、Pythonで

30分プログラム、その389。mixi(mixi)C/C++の課題丸投げコミュニティにある問題をひたすら解いてみる。ただし、Pythonで。

このコミュニティの趣旨はいかがなものかと思うけど、C言語で解かなければ誰の得にもならないからOKだろう。ボクとしても、こういう課題が集っているのはありがたいし。

連想配列の値でソート

http://mixi.jp/view_bbs.pl?id=35624291&comm_id=602606

mapに格納した値を
map >※まちがった構文
みたいな感じでintの値順にソートしたいのですが・・・・

[e] => 831
[em] => 3
[i] => 191
[p] => 191
[v] => 158
[w] => 386
・・・?

例えばこんな配列です。
とりあえず、大きい順にソートしてprintできればイイです。

dict = { 'e': 831, 'em': 3, 'i': 191, 'p':191,'v':158,'w':386 }

def compare(x,y):
    return 0

xs = dict.items()
xs.sort(lambda x,y: cmp(x[1],y[1]))
for x in xs:
    print x[0]

2進数への変換と表示

http://mixi.jp/view_bbs.pl?id=35842317&comm_id=602606

int型の配列aが以下のように与えられたとき、

int a[5]={16,1,4,7,2}

配列aの各要素の値を2進数に変換し、それを順に並べたものをint型の配列bに格納するプログラムを作成し、配列bを表示をしたときに以下のようになることを確認しなさい。ただし、各要素を2進数にしたときのビット数はファイル(bit.txt)に書き出しておくこと。

・答え
10000110011110

・bit.txtの例
5
1
3
3
2

a = [16,1,4,7,2]

def bin(value):
    if value == 0:
        return '0'
    elif value == 1:
        return '1'
    else:
        x = value / 2
        y = value % 2
        return "%s%d" % (bin(x),y)
b = map(bin,a)

# answer
print ''.join(b)

# bits.txt
print map(len,b)

10進数への変換と表示

http://mixi.jp/view_bbs.pl?id=35846736&comm_id=602606

int型の配列bが以下のように与えられたとき、

int b[]={1,0,0,0,0,1,1,0,0,1,1,1,1,0}

配列bをファイル(bit.txt)(*1)から読み込んだビット数に応じて切り出し、それぞれの2進数を10進数に変換し、int型の配列aに順に格納しなさい。

こちらのトピとは逆の操作です。
http://mixi.jp/view_bbs.pl?id=35842317&comment_count=0&comm_id=602606

(*1)上記のトピにおいてファイルに出力したもの

b = '10000110011110'
bits = [5, 1, 3, 3, 2]

a = []
for l in bits:
    a.append(int(b[0:l],2))
    b = b[l:]
print a

行列式

http://mixi.jp/view_bbs.pl?id=35689031&comm_id=602606

  1. int型変形で構成される2行2列の二次元配列変数を宣言し、全ての要素を0に 初期化せよ
  2. 以下の行列式の計算を行うプログラムを作成せよ。
|a b|  |e f| 
|  |×|   | 
|c d|  |g h| 

ただし、a〜hの各要素はプログラム実行後にキーボードから入力を行い、
計算結果を表示できるようにすること。

説明も頂けるとありがたいです。

a = [[0,0],[0,0]]
b = [[0,0],[0,0]]

a[0][0] = input('a> ')
a[0][1] = input('b> ')
a[1][0] = input('c> ')
a[1][1] = input('d> ')

b[0][0] = input('e> ')
b[0][1] = input('f> ')
b[1][0] = input('g> ')
b[1][1] = input('h> ')

def det(m):
    [[a,b],[c,d]] = m
    return a*d - b * c

print det(a) * det(b)