2014年2月26日水曜日

Check IO Xs and Os Referee

Xs and Os Referee
○×ゲームの勝敗を返す。縦と横3列と斜め1列づつをすべて調べれば簡単にできる。
どうやって調べるかが重要になると思う。

Check IO Speech Module

Speech Module

与えられた数値を英単語に変換する問題。
100の位、10の位、1の位それぞれで英単語に変換すればいい。

Check IO Feed Pigeons

Feed Pigeons

餌がなくなるまで鳥を増やしながらループをすれば簡単に解ける問題。

Check IO The Most Wanted Letter

The Most Wanted Letter

渡された文字列から一番使われているアルファベットの小文字を返す。
一番多く使われている文字数が複数ある場合は、アルファベット順が割きのアルファベットを返す。

気をつけないといけないのはcollectionsのCounterを使う場合、most_commmonを使うと文字数が同じ場合にアルファベット順にならない。

2014年2月25日火曜日

Check IO House password

House password

10文字以上で、大文字、小文字、数値をすべて含む文字列の場合、Trueを返す。
この問題は正規表現を使っても解けると思う。

Check IO Median

Median

リストの中の中央値を返す。
リスト長が奇数の場合は中央値を返し、偶数の場合は中央値が2つあるので2つの平均を返す。

Check IO Non-unique Elements

Non-unique Elements

uniqueの逆で重複していない要素をリストから削除する。
リストの中に同じデータが何個あるか調べて、1個しかなかったらリストから削除すればいい。

2014年2月11日火曜日

geventとlxmlを同時に使うとフリーズする

import gevent.monkey
gevent.monkey.patch_socket()
import urllib2
from lxml import html

r = urllib2.urlopen('http://www.yahoo.co.jp')
et = html.parse(r)
上記のようなコードを実行するとhtml.parseで処理が帰ってこずフリーズすることがある。
import gevent.monkey
gevent.monkey.patch_socket()
import urllib2
from lxml import html
from io import StringIO

r = r = StringIO(urllib2.urlopen('http://www.yahoo.co.jp').read().decode('utf-8','replace'))
et = html.parse(r)
urlopenの戻り値を直接使わずにいったんStringIOにデータを格納してからhtml.parseを実行すると、理由はよくわからないがフリーズしなくなる。

2014年2月9日日曜日

web2pyのクエリー

web2pyでtypeがdatetimeなフィールドのyearなどでクエリーを作成する方法でハマった。
#モデル
#db.py
db.define_table('post',
    Field('title'),
    Field('pub_date', 'datetime'),
    format = '%(title)s')

#コントローラー
#default.py
def date():
    rows = db(db.post.pub_date.year == 2014).select()
    return dict(rows=rows)
このようなコードを書いて実行するとdb.post.pub_date.year == 2014がQueryを返さずboolを返していてエラーになっていた。
正しくは
#モデル
#db.py
db.define_table('post',
    Field('title'),
    Field('pub_date', 'datetime'),
    format = '%(title)s')

#コントローラー
#default.py
def date():
    rows = db(db.post.pub_date.year() == 2014).select()
    return dict(rows=rows)
yearではなくyear()にしないとQueryにならなかった。
web2pyは使いやすいがこのへんのドキュメントがないととても困る。