2011-04 << 2011-05 >> 2011-06

2011-05-31 (火)

最近,また寒くなったな…

2011-05-29 (日)

秋葉原まで行こうと思って家を出たけど,岩本町の書泉ブックタワーで本を買って帰ってくる.

都営新宿線を使うようになってから,駅を出るとすぐにブックタワーがあるせいで,目的地に着く前に荷物が重くなるので困る.

2011-05-23 (月)

月曜日はとても眠い….最近は生活を昼型になるようにしているので,休みでも昼には起きていたのだけど,月曜日に眠いのは相変わらず.

2011-05-22 (日)

Google code jamに少し手を付けてみたけど,ダメだった.問題自体はそんなに難しくないように見えるのだけど,決まった時間内に解くということが出来なくなってる気がする.あと,C++自体忘れ始めている気が….

*2012年度新卒初任給

就活サイトの2012年度新卒初任給が今更だけど変更されたらしい.もちろん上に変更されたのだけど,入社した2009と比べると初任給8万円上がってる.基本的に最初の一年間は給料変わらないはずなので,今度の新卒からは,1年間でボーナス含めると100万以上多くもらえることになるのでとても羨ましい.

ドワンゴは居心地が良いので多少給料低くてもエンジニアも出て行かないだろうという前提でやってきたみたいだけど,そもそも給料安いと人が入ってこないという問題を無視できなくなってきただろうし,そろそろ他の会社に行ってしまう人も出てくるだろうということなんでしょう.あくまでそんな気がするだけですが.

2011-05-21 (土)

肉食べる日.

瑞江はドンキホーテもあるし,思ったより栄えていて住みやすそうだった.会社から遠いのは難点だけれど.

Portal 2面白いなぁ.

2011-05-20 (金)

今日は調子悪い.

会員数2000万人で四半期純利益が46億のサービスをやってる会社への転職を薦めるメールが会社のメールアドレスに来ていた.と思っていたら,似たようなメールもらった人が社内に結構いた.

一応色々調べて書いてあるように見えるのに,名前間違ってたりするし,なんでそれ知ってて名前間違えるの?と思う内容だった.facebookで本名調べて,後は他の社員のメールアドレスから類推したのかなぁ.

というのはどうでも良くて,「会員数2000万人で四半期純利益が46億のサービス」とまで書いて社名伏せる必要あるのかなぁ.1社しか思い浮かばない.

社内IRCの某チャンネルのオフ会.すでに三回目です.初参加の人もいるので顔とハンドルを一致させるため自己紹介からという,普通のオフ会.今回はオレオだった.コンビニでオレオを買い占める10人以上の集団がいたらたぶん我々です.

2011-05-19 (木)

今週は真面目に仕事してるなぁ.いや,いつも真面目にやってるんですけどね.

今週書いたコードを wc -l したら4000行超えていた.一定速度で書いているわけではないのだけど平均すると1000行/日くらいで,調子が良いときの趣味プログラミングと同じ勢いで書いている.

なるべく 趣味のコーディング量>仕事のコーディング量 になるようにしているのだけど暫く無理そう.

2011-05-11 (水)

とても眠い…というか,なんか熱っぽいな.

最近,少し体調悪くなると異常に眠いのだけど何でかなぁ.睡眠不足なのか.

*歯医者

朝から歯医者.

レントゲン撮ったり,仮歯と歯をけずって形を修正したり.今日は様子見で明日いろいろするらしい.

というわけで明日また行く.

2011-05-10 (火)

今日も会社行く.

2011-05-09 (月)

会社行く.

とても眠い.

2011-05-08 (日)

rubyとJavaScriptで色々書く日.作ってたものがいつの間にかFirefoxで動かなくなっていたので直したり.IEは最初から無視です.

*[GCJ] Google Code Jam 2011 (Qualification Round)

終わったようなので書いておく.

Qualification Roundなので簡単ですが,問題文が面白いのと,意味が分かると笑ってしまうような問題だったので面倒とは感じなかったです.

妙に簡単だなぁと思ったのですが,2009-09-04#A1のやつと比べると,やっぱり簡単な問題ですね.

久しぶりにC++を書きました.C++でコンテストをやっていると,

#include <iostream>
using namespace std;

int main() {
    return 0;
}

という6行を無意識に書けるスキルが身につくのですが,しばらくやってなかったら,手が動きませんでした.

C++を忘れてしまったのではないかという不安に襲われましたが,書き始めてみるとだんだん思い出してきます.良いリハビリになりました.

スコアボード確認すると,Bの英文読むのに疲れて途中で休憩した以外は,綺麗に30分ごとに1問解いてる感じです.半分以上は問題を読んでる時間なので,英語できる人が圧倒的に有利だと思う.

submit後にBのソース見たら酷いバグがあってsmallだけたまたま動く状態だったことに気づいたのだけど,やっぱりB-largeだけ間違っていた.Qualification Roundは1問間違うと一気に順位が下がりますね.

以下ネタバレ含みます.自分で問題読むつもりの人は読まないほうが良いでしょう.そもそも問題読まないと書いてある意味が分からないです.

A

2台のロボットに対して,指定された順番にスイッチを押させる問題.

見たままです.念のためlargeを警戒したけど,1秒ごとに状態を処理していっても良かった気がする.

たぶん誰が書いても同じなので,ソースは省略.

B

まどかではないマギカ.英語の読解問題でした.英語が読めれば問題ない.

ただ,small大丈夫だったしlargeも通るだろうと思ってて失敗した.smallはcombineとopposeが全て1つ以下しか出てこないのは罠.10個が1000個になるとかはアルゴリズムの問題だけど,1個が2個以上になるとかだと普通にバグってる可能性があるので気をつけるべきだった.submit後にソース見て気づいたけど手遅れだった.

ソースは省略.

C

Patrikの頭がやばい.頭の悪い弟からキャンディを騙し取る問題.Seanもひどいな.

酷さを伝えるためにソースを貼っておく.Patrikの頭さえ理解できれば一瞬で終わる.

#include <iostream>
using namespace std;

int main() {
    int t,n;
    cin >> t;
    
    for (int i=0;i<t;i++) {
        cin >> n;
        int sean = 0, pat_min = 0x7fffffff, pat_xor = 0;

        for (int j=0;j<n;j++) {
            int c;
            cin >> c;
            sean += c;
            pat_xor ^= c;
            if (c < pat_min) pat_min = c;
        }
        sean -= pat_min;

        if (pat_xor) {
            cout << "Case #" << (i+1) << ": NO"  << endl;
        } else {
            cout << "Case #" << (i+1) << ": " << sean << endl;
        }
    }
    return 0;
}

提出したソースでは,vectorをソートしてpat_min を求めてたけど,O(n)にするために書き換えた.

Patrikの頭のやばさが分かる例が問題に書いてあります.

5 + 4 = 1
7 + 9 = 14
50 + 10 = 56

Patrikがやっているのはキャリーの無い2進の加算,つまり排他的論理和(XOR)ですね.

2つに分けた袋の値がParrikから見て等しいということは,全体のXORを取った時に0にならないといけないわけです.0にならないなら,Patrikから見て等しく分割することは不可能です.

全体が0なので,全体からひとつを除いたもののXOR値は,除いた値と等しい.よって,Seanは最小値を持つCandyをひとつだけPatrikに渡せば,Patrikから見た値は同じにしつつ,他はすべて自分で取れることになります.

Seanは弟に対して酷すぎますね….

D

ゴローひどい.腕が4本あるとか問題に何も影響が無い.

問題を理解したとき,解法がひどすぎて自分の頭を疑ったのだけど,合っていたっぽい.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int t,n;
    cin >> t;
    
    for (int i=0;i<t;i++) {
        cin >> n;

        vector<int> array1;
        vector<int> array2;
        for (int j=0;j<n;j++) {
            int d;
            cin >> d;
            array1.push_back(d);
            array2.push_back(d);
        }
        std::sort(array2.begin(),array2.end());
        int p = 0;
        for (int j=0;j<n;j++) {
            if (array1[j] != array2[j]) p++;
        }

        cout << "Case #" << (i+1) << ": " << p << ".000000" << endl;
    }

    return 0;
}

結果の誤差の話とか問題に書いてあるけど,ただのintなので誤差とか出ません.ランダムにやってる割には優秀なソートアルゴリズムだな,と一瞬思ってしまったけど,五郎がソート結果を知っていないと出来ないソートだったり.

データセット見て気づいたけど,もしかして,要素は1~Nでよかったのかな?それならvectorに入れておく必要すらなかった.

n個の要素をシャッフルした場合に,正しい位置に来るのはnに影響されず常に平均1個であることに気づけば,初期状態で間違った位置にある要素をカウントするだけの問題です.

2011-05-07 (土)

プログラム書いたりアニメ見たりする日.

*[GCJ] Google Code Jam

プログラミングの息抜き(?)にCode JamのQualification Roundをやってみた.

途中アニメに気を取られていたり,C++書くの久しぶりだったり,英語を理解できていなかったりで,3時間弱かかりました.

まだ,終わって無い気がするので中身は明日書く.

2011-05-06 (金)

今日は会社行く.フロアが変わったのだけど,移動先の席を良く覚えてなくて自分の荷物がある場所を探してしまった.

長野土産買ってくるべきだったな.

歯は固いものを食べなければ大丈夫そうになった.歯医者の予約しないと….

ただ,噛み方を気を付けないと痛いので食事が毎回大変.

2011-05-05 (木)

*[kstm.org] ハッカソン4日目(最終日)

歯の痛みは少し良くなった.

起きて少しだけ開発して,あとは片付け.

IMG_20110505_131909.jpg

ノートにはステッカーとか貼らないでいたのだけど,みんな貼っていたので,AndroidとNiftyクラウドのシールを貼ってみました.

2011-05-04 (水)

*[kstm.org] ハッカソン3日目

歯はまだ痛い.

一日中プログラム書く.

夕食は久しぶりに大学近くの洋麺亭に.

本格的に開発できるのは今日が最後なので発表して,互いに作ったものを見せ合う.

IMG_20110504_220434.jpg

2011-05-03 (火)

*[kstm.org] ハッカソン2日目

歯がかなり痛い.

とりあえず動き始めた.作ったものは,そのうちkstm.orgのサイトで公開するかも.

IMG_20110503_201322.jpg

2011-05-02 (月)

*[kstm.org] ハッカソン初日

新幹線で長野へ.上野でgazyuとkoumaに合流.

13時前に長野駅に到着.駅で蕎麦食べてからバスで信大工学部に.バスから降りるときに荷物を引っ掛けて転んだ上に,コンクリートにぶつかって前歯折れた….

近くに学生時代に行った事ある歯医者があったので,診てもらう.痛くて仕方なかったので,予約も無かったけど急いで見て貰って,神経抜いて,歯っぽいのを接着剤でつけて,東京戻ってからちゃんとした治療をすることに.

麻酔が切れるのが怖かったけど,意外と大丈夫だった.ただ,歯に何か触れると痛いので,しばらく食事に苦労しそう.

IMG_20110502_193855.jpg

夕食は寿司を頼みました.何か作るときはとりあえず寿司食べたいです.

IMG_20110502_195757.jpg

PCを見渡すと,ThinkPadが8割近くを占めていました.

2011-05-01 (日)

明日からは長野.

*[Android] AndroidでMetasequoiaのモデルを表示してみる.

ずいぶん前に途中まで書いて放り投げてた,Javaでメタセコイアのファイルを読み込みライブラリをいじる.

読み込み部分は書いたのだけど,何が面倒ってJavaでベクトルや座標の計算をするのが恐ろしくだるい.頂点オブジェクトとか大量に作ると重いので,素の配列にデータを入れるとかやってるのが酷いです.

久しぶりにメタセコイア起動したので,モデリングしたり.前に作ったモデルを元にいわゆるローポリっぽく作り直す.よく分からないけど,四角形で約500ポリゴンなので,読み込み時に三角形に変換すると1000くらい.許せる範囲かな.

mqo01.png

さらに数年前に自作したモーションエディタを発掘して久しぶりに遊んでみる.mikotoとかのデータがよく分からなかったので自分で作ってしまったのだけど,mikotoが吐き出すファイルが今なら分かる気がする….

mqo02.png

まだ材質やテクスチャ読み込めない.体に刺さっている三角形とかはボーンを設定するためのオブジェクトです.

とりあえずテクスチャくらいは読めるようにするか.モーションデータも何か読めるようにしたいけど,面倒だなぁ.