旅の途中。

ここは歩き始めた旅の途中

2019, Jan "Shine of Stella."

はじめに

 あけましておめでとうございます。(喪中の方がいらっしゃったらすみません)いよいよ2019年が幕を開けました。てっきり2019は素数だと思っていたのですが、念の為ググったら2019=3*673でした。次の素数年は2027年らしいです。何かを主張する前にきちんとソースを確保するのを今後とも継続していけたらと思っています。本年もよろしくお願いします。

 程度の差こそあれオタクというのは兎に角斜に構えてしまう人種である気がしていて、自分もその例に漏れずに、*1「三ヶ月後に新年度始まったらまた気分一新するんだから年またぐくらいで騒ぐなや」という心持だったのですが、忘年会に参加しているうちに2018お疲れ様〜みたいな雰囲気になったのもあり、はたまた2018年下半期は自分にとり激動の一年であったように思われたのもあり、このタイミングで一度リフレッシュしておこうみたいな気持ちになったので筆をとりました。

 みかんでも剥きながら少々お付き合いください。

2A前半を振り返って(学科について)

 万が一「生物情報科学科がどんな学科か気になるけど実態がよく分からん」みたいな方がこのブログを訪れた際に備えて、学科の雰囲気とか2Aの授業でどんなことをしたか記していきたいと思います。(自分が調べた時はそういったブログが出てこなくて困ったので)

 まず、学科には大別して生物勢とその他勢がいるように見えます。生物勢になぜこの学科に来たか聞いたところ「ウェットの実験は時間がかかりすぎてアカーンとなったので情報的なアプローチ・技術が必要だと思った」と言っていました。*2彼らは生物オリンピック出場者とかなので強いでんな〜という感じです。その他勢はなぜこの学科にきたんでしょう。怖いのであまり話を聞いていません。

 さて、授業内容ですが、弊学科は2Aで最低10コマ分の単位を取得すれば良いのでかなり緩いと思います。必修は以下の五つです。

  • 生物情報学基礎論I(情報よりのバイオインフォのお話)
  • 生物情報学基礎論II(生物よりのバイオインフォのお話)
  • アルゴリズムとデータ構造(そのまんま。理情と合同)
  • 計算機システム(CPUの内部動作とかプロセスがどうとかネットワークがどうとか。理情と合同)
  • 情報科学基礎実験(CとSchemeアセンブリを書く。理情と合同)

 情報科学基礎実験ではいきなりCやSchemeを独学させられて課題の提出を要求されます。Cもlispも書いた経験があったので正直これは余裕でしたが、経験が無い人にとっては少々大変なようです。アセンブリ(人間に読めるようにした機械語のようなもの)もそこまで深くはやらないので身構える必要は無いと思います。しかも、この授業は出席が無いので家から課題を提出することもできます。そうすると実質週8コマです。ゆとりですね。

 生物情報学基礎論では生情の教授が持ち回りで研究内容に関連する授業を展開するのですが、バリバリ生物(RNA解析とか)やってるところもあれば、扱ってるのはゲノム/遺伝子だったりするけど内容としてはアルゴリズム/確率モデルですという研究室もあって結構多様です。

 あとこれは必修ではないのですが、理情の形式言語理論を履修しています。これはとても良い授業なので履修してよかったと感じています。(大学入ってから一番面白い授業だと個人的には感じています。)決定性有限オートマトン正規表現の表現力は同じだね!みたいな話をお気持ちレベルから説明してくれるのでとてもわかりやすいです。

 必修に生物系がないので、"生物なんも分からん"な自分は選択で遺伝学や生物科学概論IIを履修しました。ぶっちゃけ最初は何言ってるかチンプンカンプンでしたが、今では授業の三割くらいは理解できるようになりました。(多分)

 もし自分と同じように「生物とか高校以来だけどこの学科に来ちゃったわ〜」な方でも、かなり基本的な内容(メンデルの法則辺り(自分はここも怪しかったけど))から始まり、同じ内容が何回も出てくるので自然と覚えていけると思います。なのでそこまで不安がることはないと思います。

 逆に、「プログラミング未経験だけど生情でやってけるかなぁ」という人も大丈夫だと思います。周りの学科民を見てるとセグフォに呪詛吐きながらもTAとかに質問しまくって乗り切ってい(るように見え)ます。(時間は持ってかれてるようですが...)

 不本意ながら内定した学科ですが、当初の予想より情報の割合が大きかったので頑張れそうな気がしています。生物勢と刺激し合いながら研鑽を積んでいきたいと思います。

イベントなど

  • きらら展
    • まんがタイムきららというコンテンツの偉大さ、素晴らしさを再確認するイベントでした。
    • 歴代きららアニメ放映コーナーで何とも言えない感情になった。これ全部原作きららかぁ...という謎の感情で満たされました。
    • キャラットの重大発表が話題になっていますが、下馬評通りまちカドまぞくアニメ化ですかね。だとしたら嬉しい。次点恋アス、大穴でキルミー。
  • ゆゆ式
    • よかった。情報処理部部室再現が特によかった。カーテンに砂肝うま太郎が隠れているのを見逃しはしなかった。
    • この時購入した縁のTシャツ、とても気に入ってる。
    • アカデミアを諦めたら芳文社に就職するか〜みたいな話を某教授にしたところ、「出版業界はねぇ...(苦笑」みたいな返事が帰ってきました。データサイエンティストになればワンチャン無いですかね。なさそうですね。
  • いのりまち町民集会(水瀬いのりファンクラブイベント)
    • 東京国際フォーラム前から二列目中央でした。今まで参加したイベントで一番良い席だった。(えくぼも肉眼で見えて大満足)
    • コーナーでは笑いっぱなしだしライブでは圧倒されたし神だった...
    • 水瀬いのりさんが白い衣装を着ていたんですけど、白い衣装っていいですよね...
    • Wander Caravan!、The best song of Inori Minase for meであるところのアイマイモコを超えそうな予感がしている。アニメ「えんどろ〜」にも期待。


水瀬いのり「Wonder Caravan!」試聴動画

新年の抱負など

 去年色々あったおかげで今年は「特にこれをやりたい!」というのがいくつか出てきたのでそれを掲げて宣言してケツに火をつけていきたいと思います。

  1. AtCoder:1600↑
    • 研究する上でアルゴはやっておいて損なさそうだなぁという気がしてきました。頑張ります。
    • 具体的には500〜700の問題を解いていきつつAOJ-ICPCも埋めていく(のが良いと勝手に思っている)。
  2. Rosalind AC count: Japan top10入り
    • 惰性。(現在15位)
  3. 毎月こんな感じの記事を書く
    • この記事を書くにあたっても学科外のイベントがたくさんあったので、月1ペースの方が網羅できて良いかなという気がしてきました。ペースメーカーにしていきます。
  4. ぷよぷよで折り返しからの7連鎖↑を安定させる

 いつぞや言っていたバイオインフォの資格に関しては、学科のみんなで一緒にとるか〜という話になったのでそういうことです。

その他

  • イ先の上司の修論に目を通したのだが、最後のページに載っていた著者近影がボン太くんだった。修論にオタク画像を載っけて"著者近影"ってやるやつ良さげだなぁと思った。その頃までにどびじゅがアニメ化していてアニメ版酒井桃音を載せられるといいなぁ
  • 抱負として挙げるには漠然としすぎているが、C++をきちんと勉強して第一言語にしたいという気持ちが最近強い。STLもきちんと把握してないし(この前mulitisetって何だよってなった)、Template周りは雰囲気しか理解してないので。

2018秋アニメ

  • リリス
    • 一話二話で期待しすぎたせいもあり、ところどころ設定の甘さが気になって感動できなかった。題材としては面白いと思うんだけどなぁ...*3
  • となりの吸血鬼さん
    • ぎんいろモザイクと評されるのも納得のどこかで見た感じのキャラ構成をシャッフルして配り直した感。特に印象に残るシーンはなかった。強いて挙げるならOPのベースが好き。
    • かおす先生とか灯みたいな"おっさん内蔵型美少女"が最近のトレンドな気がしている。
  • ウザメイド
    • 最終話の一つ前の回でこれどうなんね〜んって感じだったけどハッピーエンドで良かった。心臓に良くない。
    • 森川さんがいいキャラをしていて良かった。お釈迦話。
    • EDのエレキギター二枚がバケモン。
  • 青ブタ
    • 覇権。
    • 牧之原翔子のキャストは水瀬いのり以外ありえなかったな...という気持ちになった。
  • SAO
    • レ●プ回以降見ている。やはり胸を熱くさせてくれる何かがこの作品にはある。

来季は今のところ「えんどろ〜」しかチェックしてない。

終わりに

 まんがタイムきららMAXで連載中の「ステラのまほう」という作品があります。(唐突)

簡単に説明すると、女子高生達が同人ゲームを作る部活(SNS*4)で成長していく様子を描いた作品です。

そのアニメ主題歌であるGod Save The Girlsのなかで、こんな歌詞が出てきます。*5

誰もみんな星になれるんだ

気づいていないけど輝けるんだ

こころの熱 燃やしつづけたなら

いつの日か光を放つことができるよ きっと

(歌手:下地紫野、作詞:岩里祐穂、作曲・編曲:kz)

これは字義通り受け取るなら「ポテンシャルは誰にでもあるので努力すればきっと成功できますよ」ということを言ってると思います。

しかし、ステラのまほう原作7巻で藤川歌夜はこう言い放ちます。

どこの空も明るくて その中で輝けるのは___ほんの一握り

テマワリ先生に姉さんに...私のすぐ近くで目がくらむぐらい輝いているのに

空に浮かべたらかすんで見えないって......なんか寂しいよね

ステラのまほう(著者:くろば・U、発行所:株式会社芳文社)7巻89pより)

先の歌詞の対して見事なカウンターが決まっています。このセリフには、能力がある人でも挫折をする世界で自分が闘えるのかという藤川歌夜の不安が表れていると思います。

自分は将来アルゴリズムでバイオインフォに携わる研究をしたいと思っていますが、水色止まりで才能のない自分が、本当に研究なんかやっていけるのかと、劣等感というよりは不安に苛まれる事があります。自分より賢い人間は無限にいるので。

しかし、考えてみても他にやりたい事なんかないんですよね。

アルゴリズムは唯一と言ってもいいくらいの、自分が興味を持てた学問分野なので、簡単に諦めたくないという気持ちが強いです。しかも希望の学科にいけなかったにも関わらず、それを研究できるチャンスが巡ってきた。

加えて、自分の場合はきちんと勉強を初めてまだ一年も経っていないので、今年一年様子をみてからでも遅くはないと考えました。諦めるのはいつでもできると思うので。

藤川歌夜も似たような感じなんだと思います。音楽が好きだから作曲をしている。一方で憧れの場所までたどり着きたい。そのためには曲を作るしかない。好きだから頑張れる。でも届かない。辛い。でも音楽が好きだ。

自分は「一番星になれなければ無意味か?」という問いに正面から答えられるほどまだ大人じゃないので、とりあえずは好奇心の赴くままに生きていきたいと思います。(毎回言ってる気もしますが)

2019年を振り返った時に「今年は良かった...」と言えるようにしたいですね。

決意を固めたところで筆を置きたいと思います。 次回は2月頭ごろに1月の振り返りを書きたいと思っています。

ここまでお付き合いいただきありがとうございました。 それではまた。

God Save The Girls

God Save The Girls

*1:実はオタクじゃないという説もある

*2:当然ですが一言一句同じという事はなく、多少脚色しています

*3:あと最後に半蔵門先輩が微笑んだ理由がわかる方はぜひ教えて下さい...

*4:死んだ魚の目日照不足シャトルラン部の略称。詳しくは本編を読んでください。

*5:Cメロなのでpreviewでは聴けないです...

Popcount

はじめに

typedef unsigned long long u64int;
//符号なし64bit整数,こいつの立っているbit数を求める
u64int x;
//bit countを返す関数(たかだか64なのでintで十分)
int popcnt(u64int);

1.愚直

int popcnt(u64int x)
{
    int cnt = 0;
    while(x) cnt+=x&1, x>>=1;
    return cnt;
}

時間計算量O(log(x)).

2.メモリで殴る

int mp[1<<64];
void prepro(void)
{
    for (u64int i = 0; i < (1<<64); i++)
    {
        u64int x = i, cnt = 0;
        while(x) cnt+=x&1, x>>=1;
        mp[i] = cnt;
    }
}
int popcnt(u64int x)
{
    return mp[x];
}

時間計算量O(1),空間計算量O(x)(無理).

3.畳み込み

int popcnt(u64int x)
{
    //0x5555555555555555 = 0b01010101...
    //2bitに纏める
    x = (x&0x5555555555555555) + ((x>>1)&0x5555555555555555);
    //0x3333333333333333 = 0b00110011...
    //4bitに纏める
    x = (x&0x3333333333333333) + ((x>>2)&0x3333333333333333);
    //8bitに纏める
    x = (x&0x0f0f0f0f0f0f0f0f) + ((x>>4)&0x0f0f0f0f0f0f0f0f);
    //16bit
    x = (x&0x00ff00ff00ff00ff) + ((x>>8)&0x00ff00ff00ff00ff);
    //32bit
    x = (x&0x0000ffff0000ffff) + ((x>>16)&0x0000ffff0000ffff);
    //64bit
    x = (x&0x00000000ffffffff) + ((x>>32)&0x00000000ffffffff);
    
    return x;
}

時間・空間計算量O(log(log(x))).以下同様.

4.畳み込み8bit積

  • 出典
  • 以下のコードでは最後にshiftしている
int popcnt(u64int x)
{
    //&演算してからshift
    x = (x & 0x5555555555555555ULL) + ((x & 0xAAAAAAAAAAAAAAAAULL)>>1);
    x = (x & 0x3333333333333333ULL) + ((x & 0xCCCCCCCCCCCCCCCCULL)>>2);
    x = (x & 0x0F0F0F0F0F0F0F0FULL) + ((x & 0xF0F0F0F0F0F0F0F0ULL)>>4);

    //8bitまで纏めれば結果は64以下なので収まる
    //x = x<<56 + x<<48 + ... + x<<8 + x<<0
    //の上位8bitに結果が入っている
    x *= 0x0101010101010101ULL;

    return x >> 56;
}

5.畳み込み8bit積ちょい高速化

int popcnt(u64int x)
{
    /*
   x = 0b00 -> x>>1 == 0, x - x>>1 == 0
   x = 0b01 -> x>>1 == 0, x - x>>1 == 1
   x = 0b10 -> x>>1 == 1, x - x>>1 == 1
   x = 0b11 -> x>>1 == 1, x - x>>1 == 2
   よって 
   (x&0x5555555555555555) + (x>>1&0x5555555555555555) = x-((x>>1)&0x5555555555555555ULL)
   */
    x -= ((x>>1)&0x5555555555555555ULL);
    x = (x&0x3333333333333333ULL) + ((x&0xCCCCCCCCCCCCCCCCULL)>>2);
    x = (x&0x0F0F0F0F0F0F0F0FULL) + ((x&0xF0F0F0F0F0F0F0F0ULL)>>4);
    
    x *= 0x0101010101010101ULL;

    return x >> 56;
}

おわりに

  • Qiitaに書くまでもないな、と思ったらここに書いていこうかなというお気持ち
  • 疑問、指摘等あればコメントまたはtwitterによろしくお願いします
  • bit演算、奥が深い(小並感)