Node.js + Socket.IOでチャットシステム (第2回)

Tatsuya Yatagawa
さて、前回の記事では、node.js (+ express)の環境構築と、チャット画面の出力を行いました。 前回の記事はこちらからご覧になれます。 さて、今回はいよいよSocket.IOにご登場いただき、インタラクティブ・ウェブのドアを叩きたいと思います。 Step 4: socket.ioのテスト まずはローカル環境にSocket.IOのインストールを行います。前回同様に $ npm install --save socket.io とコマンドを打ってpackage.jso ...

Node.js + Socket.IOでチャットシステム (第1回)

Tatsuya Yatagawa
こんにちはtatsyです。 つい最近まで6年くらいWebまわりの技術はご無沙汰だったのですが、6年前にはなかった面白い技術が出てきていてるなぁと感じていて、手始めにNode.js+Socket.IOでチャットシステムを作ったのでまとめて記事にしておきます。 第1回の今回はSocket.IOの公式ページにあるChatのでもサンプルをいじってみます。元の記事はこちらです。 Socket.IO — Chat (2014年12月28日閲覧 ...

TopCoder SRM 642 Div1

Tatsuya Yatagawa
今回もSRM 642の解説行きます。今回からソースコードのヘッダ部分は切ります(一応マクロは残します)。 今回の問題は Easy: メモ化 / 確率 Medium: 最小費用流 となっております。 Easy (250点) 問題 ある町にはバスがN本あり、それぞれのバスは駅を出発してtime[i]分で駅に戻ってくる。一度に運行できるバスは1本だけであるため、ひとたびバスが出発するとtime[i]分はバスがでない。出発するバスはそれぞれprob[i] % ...

TopCoder SRM 641 Div1

Tatsuya Yatagawa
SRM641の解説です。 Easy (250点) 問題 2次元座標上に最大2500個の点が与えられる。これらの点のいずれの3点も同一直線状にないことが保証されており、また原点は含まれない。この点の中から3点を選んで三角形を作った時に原点が内部に含まれるようなものの個数を求めよ。 解法 普通に考えるとO(N^3)になってしまうので、工夫する方法がないかを考えます。 定数の2500という条件からO(N^2)か、O(N^2 ...

OpenCV 2系から3系への変更点

Tatsuya Yatagawa
OpenCVが2系になりIplImageという負の遺産がなくなって早数年、OpenCVがついにver.3になりましたね。 まだbeta版ですが、ver.3になり、よりC++っぽい書き方に近づきつつある気がします。 2系から3系への変更点を気づいたところから備忘録的にまとめておきます。 cv::imread cv::cvtColor cv::TermCriteria cv::VideoCapture::get cv::PCA その他の変更点 cv::imread 2系 cv::Mat img = cv::imread("image.jpg", CV_LOAD_IMAGE_COLOR); 3系 cv::Mat img = cv::imread("image.jpg", cv::IMREAD_COLOR); 変更点 グローバルのenumだったCV_LOAD_IMAGE_XXX ...

Codeforces #281 (Div.2 only)

Tatsuya Yatagawa
昨日のCodeforcesはめずらしく良くできた気がするのでざっくり解説しておきます。 A. Vasya and Football 問題 サッカーのようなゲームが行われていて、90分間の間にホーム側の選手、アウェイ側の選手でどの番号の選手がイエローカード、レッドカードをもらったのかが与えられる。なお、イエローカードを2枚もらうと自動的にレッドカードとなる。このとき、各選手が初めてレッドカードをもらった時間を出力せよ。 解法 どうやら、問題の ...

templateでクラスの大きさを指定する方法

Tatsuya Yatagawa
C++でクラスを作るときにsizeofで帰ってくる大きさを自由に決められるようにしたいなぁと思ったのでやり方を調べてみました。 まず、普通のint型みたいなものの大きさを変更する方法からです。これには__declspec(align(#))装飾子を使います。 // sizeof(Int4) == 4 struct Int4 { int n; }; // sizeof(Int8) == 8 (Visual C++) __declspec(align(8)) struct Int8 { int n }; // sizeof(Int8) == 8 (g++) __attribute__((aligned(8))) struct Int8 { int n }; で、このalignサイズをtemplateで指定できないかな、と考えるわけ ...

TopCoder SRM 639 Div1

Tatsuya Yatagawa
今回はSRM639の解説です。 問題は Easy: 数学っぽい分析 Medium: 組み合わせ となっております。 Easy (250点) 問題 AとBのプレイヤーが交互にあるゲームで戦っている。ゲームはターン1からスタートし、ターンiで勝利した方には2i-1点入る。このときAとBが得た点数がそれぞれx, yと与えられる。これを実現するためにはAは最小何回勝たなければいけないか?もし条件を満たすものが存在しないときは-1を返せ。 制約条件 0 <= x, y ...

TopCoder SRM 637 Div1

Tatsuya Yatagawa
今回はSRM637の解説です。問題内容は Easy: 確率(?) Medium: Grandy数 となっております。それでは行きます。 Easy (250点) 問題 1から2Nまでの整数がある。この整数を2人でN個ずつに分けて、1つずつ出して勝負していく。数が大きい方が1ポイントを獲得する。あなたは相手が数を出す順番が部分的にわかっていて、それが数列で与えられる。分からない箇所は-1になっている。あなたはそれを見て最適な数字を出す順番を決め ...

POJ 3378: Crazy Thairs

Tatsuya Yatagawa
問題 長さがNの数列が与えられる。その数列の長さ5の部分列で狭義単調増加するものの個数を答えよ。 制約条件 1 <= N <= 50000 解法 まず、答えがどのくらい大きくなるかを考えます。答えが一番大きくなるのは1, 2, 3, …, 50000の時で、その時の解は$_{50000} C_5 \approx 2 \times 10^{31}$になるので、64bit整数でも収まりません。 なのでおとなしく多倍長演算を書きます。今回は足し算だけあればいいと思います。 つづいて、 ...