2011年03月02日

connect the dots

Pythonchallenge 9 【connect the dots】
ネタバレ注意








































































































































connect the dots というタイトル通り、点を線でつないでいきたいけどどうやって繋いだらいいのか分からないしさすがにTSP問題をPythonchallengeで出すとは思えない




ページのソースを見てみると、firstとsecond、そしてそれぞれカンマで区切られた数字




数字の数を数えてみてもfirstとsecondで違うし、firstがx座標でsecondがy座標という線も消える




どうしたらいいのかボーッと見てるとどうも奇数番目にある数字と偶数番目にある数字がそれぞれ数字が近いことに気づく




ということで、奇数番目の数字をx座標、偶数番目の座標をyとして線を繋いでみる




今回も前の問題と同様に、PIL(Python Image Library)を使って線を繋いで絵を描く



PILについてはこちら




vimメモ
firstとsecondのソースが改行入りで数字の並びが書かれてるけど改行を削除して行を全て連結させるには
ビジュアルモードで改行削除→連結させたい行を全て選択→「J」



firstとsecondは省略

import Image,ImageDraw
#first+second=?

first='''(ここは省略)'''

second='''(ここは省略)'''

first_str=first.split(',')
second_str=second.split(',')
im=Image.new("RGB",(600,600))
draw=ImageDraw.Draw(im)
first_i=[]
second_i=[]

for x in first_str:
first_i.append(int(x))

for x in second_str:
second_i.append(int(x))

draw.line(first_i)
draw.line(second_i)
im.show()



私的メモ

str.split(x) returns list
文字列strを文字列xで分割し、分割された文字列をリストの要素としてリストlistに格納して返す
--------------------
import Image

Image.new("RGB",(width,height)) returns im
モード"RGB"で幅width、高さheightのImageオブジェクトimを生成
----------
import ImageDraw

ImageDraw.Draw(im) returns draw
Imageオブジェクトimと描画できるImageDrawオブジェクトdrawを対応させる

draw.line(list)
ImageDrawオブジェクトdrawに二次元平面座標情報の入ったlistをもとに直線を描く
ex) list=[0,0,5,10,10,5] :(x,y)=(0,0),(5,10),(10,5)の順に線を繋ぐ
----------
im.show()
Imageオブジェクトimを描画する
--------------------
x.append(a) returns y
リストxの末尾に要素aを追加したリストyを返す



こんな感じになった
cow

im.show()で画像が表示されない方(ubuntu)はimagemagickなんか入れると幸せになれるかもしれません

$ sudo apt-get install imagemagick






この記事へのコメント

name:

mail:

HP:

comment:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/188463087

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。