kei0425tan’s blog

技術的なことを主に

paizaの結果

最近ちょっとはまってたpaizaの受験結果を適当に紹介。

paizaとは

結果

とりあえず、ランクDから解いてみました。

D040:連休の天気 Python2
paiza.jp


その後、勧められたのがこちら

C010:安息の地を求めて JavaScript
paiza.jp

まだまだ簡単

調子にのって、次に勧められた問題がこちら

B012:チェックディジット JavaScript
paiza.jp
結構面倒で時間が掛かってしまいました。。。。。

なので、まとまった時間がないとできないなーと思いつつ、しばらく時間を空けてからやったのがこちら

A003:盤面ゲーム JavaScript
paiza.jp
超有名なゲームの判定でした。

とここまでは、一発合格でランクAまでクリアしたのですが、ここからがちょっと大変でした。

S010:ひとりすごろく Python2
paiza.jp
問題読み間違えて、なかなか正しくコーディングできなかったのと、静的テーブルを用意したのですがそのテーブルの初期値をタイプミスしたりなどでさんざんな出来でした。

気を取り直して連続で挑戦

S002:最短距離を測る Python2
paiza.jp
アルゴリズムをある程度勉強するとでてくる課題。解法はいろいろ知っているのですが、コーディング速度が一番速い系でやってみましたが。。。。。
大規模データでタイムアウトが発生して、痛恨の90点。ジャッジが1回のみなのは結構きついです。

ムキになって再挑戦

S009:辞書順最小 Python2
paiza.jp
問題の読み間違えで時間が結構かかってしまいましたが、終わってみればほんの30行ほどでできました。
念願のランクSにやっとなれました。

ランクSまで解いた感想

paizaにおけるランキングは以下の通り。

  • ランクS 上位2% 上級100点

非常に高いスキルを持っています。
ほぼすべての企業で書類選考なしにカジュアル面談、面接へ進めます。

  • ランクA 上位8% 上級70点

高いスキルを持っています。
非常に多くの企業で書類選考なしにカジュアル面談、面接へ進めます。

  • ランクB 上位30% 中級100点/上級50点

一定基準以上のスキルを持っています。
多くの企業で書類選考なしにカジュアル面談、面接へ進めます。

  • ランクC 上位60% 初級100点/中級60点/上級30点

基本的なスキルは十分、効率的なコードを意識しましょう。
一部の企業で書類選考なしにカジュアル面談、面接へ進めます。

  • ランクD 初級50点/中級30点/上級10点

要努力!基礎的な部分をもう一度見直しましょう。
ポテンシャル求人案件への応募が可能です。

ランクSは50人に一人の逸材のようです。

とはいうものの、母集団によるかと思います。
職業プログラマであれば、ランクSとれる人はもっと多いかと。。。。
当然のことながら、職業プログラマでもランクCどまりの人もたくさんいると思いますが。

感覚的には、ランクS:ランクA:ランクB:ランクC = 1:2:3:2 くらいなのかなあ??

pyExceleratorで作成したファイルをoffice2010で開くと「ファイルエラー:データが失われた可能性があります。」

pythonexcelのxlsファイルの読み書きができるモジュールでpyExceleratorというものがあります。

 

現状ではもうメンテされておらず、python-excelライブラリ(xlrd, xlwt,xlutils)に移行するのが推奨かとは思いますが、何らかの事情で使わなければいけない&office2010でエラーが発生して困っている人向け。

 

原因

ハイパーリンクのヒントの扱いが間違えている。

 

xlsファイルはBIFFフォーマットというもので記述されています。

BIFFフォーマット内では文字列はUNICODE(UTF-16le)で扱い、0x0000の2バイトでターミネイトされます。

ところが、ライブラリではハイパーリンクのヒントのターミネイトが0x00と1バイトでターミネイトされているため、エクセルがオープン時に1文字削除して補正します。

office2010になって、チェックが強化されたため、上記エラーが出力されることがあります。

 

対処

BIFFRecords.py:1750

class QuicktipRecord(BiffRecord):
    """
    This record contains the cell range and text for a tool tip. It occurs in
    conjunction with the HLINK record for hyperlinks (6.53) in the Hyperlink
    Table (5.13). This record is only available in Excel 9.0 (Excel 2000) and
    later.

    Record QUICKTIP, BIFF8:

    Offset Size Contents
    0      2   0800H (repeated record identifier)
    2      8   Cell range address of all cells containing the tool tip (3.13.1)
    10    var. Character array of the tool tip, no Unicode string header, always 16-bit characters, zero-
            terminated

    """
    _REC_ID = 0x0800

    def __init__(self, frow, lrow, fcol, lcol, hint):
        BiffRecord.__init__(self)
        hint = hint.encode('UTF-16le')
        self._rec_data = pack('<5H%dsx'%len(hint), self._REC_ID, frow, lrow, fcol, lcol, hint)

こんなふうに変更すればOK

        self._rec_data = pack('<5H%dsxx'%len(hint), self._REC_ID, frow, lrow, fcol, lcol, hint)