2017:
最新

blog/2008-11-30

halプロコン

疲れるなぁ


お名前:

blog/2008-11-28

奨学金

の返済の説明を聞きに行った.返済免除されないかなー

ハル研プロコン

サークル棟でいろいろやってた.で,帰る前にトイレに行ったら何か思いついたのでちょろろんと実装したら319133点でした.

焼肉

免許取った記念.

halのプロコンの上位の人

名前でぐぐってもhakuさんだけ,どんな方か分からなくて悲しかったのですが
blogにコメントがもらえました!

  • あ、hakuさんは同じ研究室のD2です。俺の隣の席です。でもお互いアルゴリズムは内緒にしてます。 -- taiyou 2008-11-29 15:09:39 (土)
  • ぉぉ.1,2位独占ですか.3,4位の方も同じ大学みたいですよ. -- Naoki 2008-11-29 17:43:38 (土)
  • いつ抜かれるかとひやひやもんです -- haku 2008-11-29 20:29:45 (土)
  • ロボカップにも出てるんですね.楽しそうな研究室でうらやましいです -- Naoki 2008-11-29 22:36:37 (土)

お名前:

blog/2008-11-27

ハル研プロコン初日終わり

もっともりもりスコア増やせるかと思ったけれど,そうでもなかった.あれー
明日は朝早いので,寝ることにします.

半日遊んでの感想は,去年みたいなチューニング対決にならなさそうなところがいいなぁと思いました.
まぁ,後半どうなっているかは分かりませんが^^;

ハル研プロコン2日目

今日は朝から免許を取りに免許センターに行ってました.免許は無事取れました.
で,眠かったので夕方まで寝てからHALのプロコンを考えてみた.


お名前:

blog/2008-11-26

hal研プロコン2008 12時スタート

halプロコン
どんな問題かな.

始まったー

あと,プロコントークで

石村:いやあ、もう敵う気が全然しないですね、ホントに(笑)。実は、去年は強敵となる人たち
が参加できなかったから、狙い目だったんですけど(笑)。今年は勝てるチャンスがないかもしれません。

去年石村さんに負けたしっ! なんてことだ

ブドウ狩り

去年よりも敷居をさげて,めんどくさくした感じかな.
初日は適当に書いて送れば1位取れるのが明らかなので,記念submit.

岩崎直木(safii)さんのランキングデータ

岩崎直木(safii)さんのランキング
    総合 1位 172719点
    学生部門 1位
前後との得点差
    総合  2位との得点差 118835点 
  • 今年もよろしくお願いします。 -- taiyou 2008-11-26 14:31:43 (水)
  • あ、ちなみにですが研究室のHPでは最新の学年が表示されます。今M2です。 -- taiyou 2008-11-26 18:09:02 (水)
  • こんにちは.今年もでるんですね,嬉しいです.今年は優勝をハル研から奪い返せるようがんばりましょう -- Naoki 2008-11-26 20:57:59 (水)
  • 今年はよろしくお願いします -- haku 2008-11-28 23:08:56 (金)
  • hakuさん強いですねー がんばりましょう -- Naoki 2008-11-28 23:46:10 (金)

お名前:

blog/2008-11-25

cStringIO

Pythonでの文字列の連結の速度比較を読んで,おーっとか思ったけれど
今のところcStringIOはunicodeが使えないみたいなので,悲しい感じでした.
で,StringIOだとどうなのか確かめてみたらすごく遅くて悲しかったので
appendとjoinで実装されたwriteとgetvalueだけ使えるStringIOを用意してみた.

生のappendとjoinやcStringIOには負けるけど,seekとかを考慮していない分速いです.
sys.stdoutに突っ込んでprintを止めとくとかに使う予定です.

# -*- coding: utf-8 -*-

import cStringIO
import StringIO
import timeit

class FastStringIO:
  def __init__(self):
    self.buf = []

  def getvalue(self):
    if self.buf:
      return "".join(self.buf)
    return ""

  def write(self, str):
    self.buf.append(str)

def add():
  global n
  ret = []
  for n in xrange(n):
    ret += u'ほげ\nふが'
  return ret

def append():
  global n
  str = []
  for n in xrange(n):
    str.append(u'ほげ\nふが')
  return "".join(str)

def stringIO():
  global n
  io = StringIO.StringIO()
  for n in xrange(n):
    io.write(u'ほげ\nふが')
  return io.getvalue()

def cstringIO():
  global n
  io = cStringIO.StringIO()
  for n in xrange(n):
    io.write(u'hoge\nhuga')
  return io.getvalue()

def faststringIO():
  global n
  io = FastStringIO()
  for n in xrange(n):
    io.write(u'ほげ\nふが')
  return io.getvalue()

n=10000
print "n==10000"
print "add         ",timeit.Timer(setup='from __main__ import add', stmt='add()').timeit(1)
print "StringIO    ",timeit.Timer(setup='from __main__ import stringIO', stmt='stringIO()').timeit(1)
print "fastStringIO",timeit.Timer(setup='from __main__ import faststringIO', stmt='faststringIO()').timeit(1)
print "cStringIO   ",timeit.Timer(setup='from __main__ import cstringIO', stmt='cstringIO()').timeit(1)
print "append      ",timeit.Timer(setup='from __main__ import append', stmt='append()').timeit(1)

n=1000000
print "n=1000000"
print "add         ",timeit.Timer(setup='from __main__ import add', stmt='add()').timeit(1)
print "StringIO    ",timeit.Timer(setup='from __main__ import stringIO', stmt='stringIO()').timeit(1)
print "fastStringIO",timeit.Timer(setup='from __main__ import faststringIO', stmt='faststringIO()').timeit(1)
print "cStringIO   ",timeit.Timer(setup='from __main__ import cstringIO', stmt='cstringIO()').timeit(1)
print "append      ",timeit.Timer(setup='from __main__ import append', stmt='append()').timeit(1)
n==10000
add          0.0460000038147
StringIO     0.0249998569489
fastStringIO 0.00799989700317
cStringIO    0.00500011444092
append       0.00399994850159
n=1000000
add          4.79400014877
StringIO     2.5529999733
fastStringIO 0.826999902725
cStringIO    0.503999948502
append       0.386000156403

appendとfastStringIOで倍違うのは謎.getattrとかが遅いのかな.


お名前:

blog/2008-11-23

hal プロコン

去年提出したコードを読んでみたけれどひどいなぁ...
去年上位の人で関数使っていたのは僕だけでしたが,今年はどうしよ

去年学生2位だった人発見

http://www.kishii.ss.is.nagoya-u.ac.jp/index.php?mode=paper&paper_id=69
去年M2だったようなので,今年はでれなさそうです.


お名前:

blog/2008-11-22

メニューの位置

右側だと見にくいと言われちゃいました.どうしよ


お名前:

blog/2008-11-21

ブログの個別の記事にリンクを追加しました

RSSとかで飛んでくると不便だったので,最新と月毎のリンクを追加しました.
あと,携帯のブラウザみたいな解像度の低いブラウザで開くとメニューが邪魔だったので右側に移したり
広告を増やして,adsenseのチャネルとか言う機能を試してみたりしています.

pukiwiki

日記の個別の記事に共通のコードを挟むのをどうやろうかなーとか一瞬色々面倒な方法を考えたのですが
pukiwikiのスキンでページタイトルをチェックすればあっさりすむ事に気付いたので試してみました.

ただ,pukiwikiをいじって使うのもそろそろ疲れたので,何か適当なものをこしらえたくなってきました.
javascript wikiはpukiwikiよりも軽くていいのですが, 色々と間違ってると思うので却下.

何か困るとしたら

最近更新のほげほげ〜に,ぼーっと読んでると気付かないことかな

リダイレクト

旧URLへのリンクも,ちょっとまえのURL表記も全部今の表現にリダイレクトするようにしました.

mod_rewrite

mod_rewrite使うよりも,pukiwikiのpukiwiki.phpいじる方が楽だなぁと思った.


お名前:

blog/2008-11-19

HAL研プロコン2008

HAL研プロコン2008のページが公開されました.
プレエントリー完了.今年は石村さんに負けたくないなぁ


お名前:

blog/2008-11-18

出身小学校

ウェブサイトあるのか.
http://www.city-okayama.ed.jp/~momos/
プールがきれいな学校でした.


お名前:

blog/2008-11-14

やきいも

焼き芋をした.


お名前:

blog/2008-11-12

昨日はバイナリーの日だったらしい

http://slashdot.jp/sp/binary2008/
shinhさんの7つのキーワードの内4つはすぐに見つかった.
あと1つは見つけないと...(http://shinh.skr.jp/m/?date=20081111#p08 )

たぶん,7つ見つけると
Y* w* b* a*. R* i* f*.
かな.

5つ

あと b*とR*かな.


お名前:

blog/2008-11-11

別に返り値を教える構造体を用意するくらいなら

template<typename T>
struct IntDouble
{};

template<>
struct IntDouble<int>
{
    typedef double ReturnT;
    static ReturnT call(int d)
    {
        return (double)d;
    }
};
template<>
struct IntDouble<double>
{
    typedef int ReturnT;
    static ReturnT call(double d)
    {
        return (int)d;
    }
};

template <typename ArgT>
typename IntDouble<ArgT>::ReturnT wrapper(ArgT arg)
{
    return IntDouble<ArgT>::call(arg);
}

int main()
{
    double d = wrapper(0);
    int    i = wrapper(0.0);

    return 0;
}

かな.あきらかにタイプ数が増えててうーんですが.


お名前:

blog/2008-11-10

テンプレートの特殊化と返り値の判断とか

double int_double(int d)
{
    return (double)d;
}
int int_double(double d)
{
    return (int)d;
}

template <typename RetT, typename ArgT>
RetT wrapper(ArgT arg)
{
    return int_double(arg);
}

int main()
{
    double d = wrapper(0);   // error
    int    i = wrapper(0.0); // error
    return 0;
}

(実際のコードは,int_doubleの部分がクラスで,テンプレート引数の入力を省略したくてwrapperを書いた)
こんな感じのコードがあった時に,wrapperのRetTはどっちも明らかなのに
コンパイラはRetTの型が分からんとエラーを吐きます.どうにかならないのかな.

void wrapper(Argt arg, RetT&ret)

とかが一番楽な気がしますが,事情があってこれはできなくて.それで

#define WRAPPER(ARG) int_double(ARG)

とかやると上のコードはOKなんですが

struct Bracket{
    int operator[](int a){ return a;}
};
struct AddOne{
    int operator,(int a){return a+1;}
};
...
WRAPPER( Bracket()[AddOne(),10] );   // error
WRAPPER( (Bracket()[AddOne(),10]) ); // ok

みたいにC++では合法だけど,C的にはうさんくさい式をつっこめなくなって困ります. 何かテンプレートをうまく使うとうまくいかないのかな.
今回は,wrapperをオーバーロードして逃げました.

C:\Users\Naoki\AppData\Roaming\Microsoft\Windows\Network Shortcuts

Windows Vistaでこのフォルダの中にファイルとかフォルダを作ると
マイコンピュータの中に,作ったファイルとかが表示される.何だろこれ.

僕の場合は

rtrace.txtとやらが現れたので気付いたのですが,こんなところに保存しないで欲しいなぁ

返り値の推定

template<typename T>
struct Ret{};
template<>
struct Ret<int>{ typedef double Type;};
template<>
struct Ret<double>{ typedef int Type;};

template <typename ArgT>
typename Ret<ArgT>::Type wrapper(ArgT arg)
{
    return int_double(arg);
}

返り値を教えてあげる構造体を用意したらうまくいった.
元の方のコードはかなりスッキリしたので,まぁOKでしょうか.


お名前:

blog/2008-11-02

銀嶺祭にいってきます


お名前: