エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

C++

ビット演算で解く Tick-Tack-Toe 〜「第一回 オフラインリアルタイムどう書く」より〜

C++

去る7月6日。「第一回 オフラインリアルタイムどう書く」が開催されました。 第一回 オフラインリアルタイムどう書く : ATND 地理的時間的にわたしは参加できなかったのですが、お題が公開されたので解いてみました。 問題 三目並べ( tick-tack-toe )の手を…

手探りでおぼえるmruby その1:クラスを定義する、メソッドを定義する

mrubyをためしています。びっくりするぐらい情報が少ないので、ためしたことおぼえたことをまとめる意味で、ブログに書きつつmrubyの核心に這いよっていきたいと思います。 しかしなんですね。あの名を知ってからおよそ四半世紀、「這いよる混沌」の名をこん…

「どう書く?」とつねに問う姿勢が大事、だと、思う。

第一回 オフラインリアルタイムどう書くの参考問題 - Qiita (via 鍋谷さんの参考問題: へなちょこ解答(Java) - 虎塚) こういう面白そうな話題は、まぜてくださいー。 あ、残念ながらオフラインのほうの参加はちょっと無理。ほんと残念ながら。 先に結果…

標準出力の出力先をすげかえる

Google Testが取り持つ縁で、このようなエントリに出会いました。 GoogleTest で標準出力、標準エラー出力をテストする - 質のないDiary H おぉ。Google Testで標準出力をテストする。ナイス! …。でも。名前空間を「internal」にしてあるように、そこは触れ…

C++のtemplateが問題を解く

昨夜は @emattsan さんのLuaとIOの話から始まり、 @crashpon さん交えてアセンブラに寄り道しつつ、最後 @maccha がPrologについて熱く語り、その全てを @torazuka さんが熱心に聞く、という稀有な展開。オイラはその展開自体をメタに楽しんだw— あまのりょ…

Lua 5.1とLua 5.2の非互換について

Io話を続けるつもりだったのだけれども。ネタを仕込んでいる間にわけあってLuaに手を出すことになり。そういや昨年末に新しいバージョン、Lua 5.2がリリースされたっけ、と思って調べてみたら。気をつけないとならない互換性のない変更があるのを見つけたの…

ローマ数字パーサ、の下書き

C++

本当は正規表現を使うつもりだったものが、どうもうまくいかないので、自力でパーサを書くことにした。で、そのアルゴリズム検証のための下書き。 なんのかんの言ってもC++が一番なじんでいるので、C++で書いた。一応意図どおりに動いているようなので、これ…

Google Testをインストール、しないですませる方法

久々にGoogle Testネタ。 以前ちょっとふれて宿題としておきながら放置していたことを思い出したので、そのフォロー。 fused source files are included. バージョン1.5.0の時点で新機能(?)として「fused source files」が追加されています。先のエントリ…

キーブレイク処理とフィルタの関係について

前回のエントリで「ソースからシンクへとデータを流し続けるような場合」の例として、コンテナからシンクオブジェクトへとデータを流すコードを書きました。よくよく考えてみると、「コンテナそのものを渡すよりもイテレータで範囲を渡す方がよい(STLもこの…

Mapを使わないでSummary

おさらい。 リストを項目ごとに集計する - 日々常々 リストを項目ごとに集計するときのデータオブジェクトの使い方 - 虎塚 キー毎に値を集計する方法 - ひしだまの変更履歴 昨日(日付的には今日ですけど)、最後に「なんかよくわかんないんですけど、なんか…

MapでSummary

リストを項目ごとに集計するときのデータオブジェクトの使い方 - 虎塚 えーと。リンク先の内容に付加するような情報はほとんどないんですが。 ただちょっと。気になるところがあって。自分なりに自分の使える言語で書き下してみた。 C++98 あれ?C++11のひと…

「40 - 32 / 2 = 4!」新実装篇

前々々回、前々回の続きで、 前回考察した結果を元に実装。 C++ #include <iostream> #include <vector> #include <boost/format.hpp> #include <boost/lexical_cast.hpp> void print(int a, int b, int c) { const int m = (a - b) / c; const int n = a - b / c; std::cout << (boost::format("(%1% - %2%) / %3% = %4%"</boost/lexical_cast.hpp></boost/format.hpp></vector></iostream>…

「40 - 32 / 2 = 4!」

Twitterでフォローしてくださった@rbtnnさんのブログ「http://b-rabbit-alice.blogspot.com/」を拝読していたら、面白いものを見つけてしまいました。 http://b-rabbit-alice.blogspot.com/2011/07/40-32-2-41000.html こういうの大好き(笑)。自分なりにど…

隠蔽、多重定義、上書き

C++

気になると深追いしたくなるid:E_Mattsanです。どーも。 基底クラスの関数が呼び出されるんじゃないんですね。ビビりました。 参考: 『C++プログラミング入門』第5章「包含と継承を用いた階層構造」 この章と、同じ本の12章「仮想関数を用いた多態性」を理解…

定期的に書きたくなる演算子のはなし

時間をおいて、ときどき書きたくなる。もう一段階うえにいけそうでいけずにマンネリ化しつつあるところ。C++11だともっといい手があるのかな。勉強せんと…。 #include <iostream> #include <iomanip> class Time { public: static const int SEC_PER_MIN = 60; static const int</iomanip></iostream>…

ストリームの失敗の種類、検出方法および例外の発生のさせ方について

C++

こちらのエントリとコメントを読みながら、「ふだんはgood関数を使ってるけど、どんなときに『good』なんだろう?」と調べはじめたら。予想以上に知らないことが多かった。 ストラウストラップのプログラミング入門(2) 第3章 - 虎塚 >>演算子から始まって、…

TabをSpaceに展開(復刻版)

C++

TabをSpaceに展開 - エンジニアのソフトウェア的愛情 必要に迫られて書き直すなど。 せっかくなのでイテレータで受け付けるようにしてみた。 加えて。前回のはシングルラインしかきちんと処理できなかったのを、マルチラインも処理できるようにした。条件を…

やおら思い出したようにビット操作のプログラムに再び手を着ける

C++

GitHub - mattsan/BitOperation: operating bits classes えーと。ログを見ると。15ヶ月ほど放置していた模様。 今になって思い出したように再開。整数型で扱えるビット数を超えて扱えるようにするために準備中。操作を定義するクラステンプレートとビット列…

templateの引数に関数を

C++

あまりよい例が思い浮かばなかった。 この例だと効果はたかが知れているのだけれども、もっと面倒くさいことをやっている場面を想像してください。で。本題は後ろの方なので、ともかく結論を知りたい方は、後ろの方の「やっと本題」以降へどうぞ。 テンプレ…

派生クラスのコンストラクタが実行される前に派生クラスを操作する

beakmarkさんがブックマークされていたのを何気なく読んでいたら、いつものように自分ならどうするか、と考え出してしまったので、その経緯と結果のメモ*1。 C++で遊ぼう「静的仮想関数」編 まず前半の話。クラス関数やクラス変数へのアクセスであれば型と名…

Google Test 1.6.0 が正式リリース

RC2が公開されたのでブログでコメントしておこうと思いつつ。うかうかしていたら、あっというまに正式リリース。 GitHub - google/googletest: Google Test 最近はC++でまともにプログラミングをしていないのもあって、Google Testもトピックがあったときに…

もしもC++プログラマが((Pythonで) 書く (Lisp) インタプリタ)を読んでC++でLispを実装してみたら

C++

タイトルのことですが。「エンジニアのソフトウェア的愛情」というのは、もちろんキューブリック監督の作品「博士の異常な愛情」のパロディなわけですが。このあいだ、一行紹介の「〜を・愛する・ように〜」のところの点の打ち方が面白いと言われました。こ…

オブジェクト指向における書式付き出力

C++

書式付き出力 - エンジニアのソフトウェア的愛情 このあと書式付き出力について考えて続けていたんですが。ずるずるとやっているうちに先々月のエントリになってしまった。ま、それはそれとして。 C++のiostreamの書式指定のやり方がなんとも居心地がよくな…

C言語の条件演算子で第2オペランドを省略できるのはGNU拡張だった

C++

#include <stdio.h> void putStrLn(const char* s) { printf("[%s]\n", s ? : "null pointer"); /* 条件演算子 ( ? : ) の第2オペランドを省略 */ } int main(int argc, char* argv[]) { putStrLn("hoge"); putStrLn(""); putStrLn(NULL); return 0; } 実行結果。 [ho</stdio.h>…

書式付き出力

C++

某所でC言語のprintfの書式指定って初学者にはけっこうめんどうだよね、というブログのエントリを見て。 たとえば。C言語だとこんな感じ。 #include <stdio.h> int main(int argc, char* argv[]) { const int n = 123; const double r = 123.45; const char s[] = "ho</stdio.h>…

diffをGitHubに

GitHubにアカウントを作る前に書いたので、登録を忘れていたdiffのコード。いまさらながらリポジトリを作成する。 GitHub - mattsan/Diff 関連エントリ: diffをつくる - エンジニアのソフトウェア的愛情 diffをつくる(2) - エンジニアのソフトウェア的愛情 …

googletest1.5.0の使い方・その1:ビルドする

「書く書く詐欺」になりつつあった、googletest 1.5.0の解説。ようやく着手です。 今までは、「./configureしてmakeしてsudo make installすればOK」…という具合にやってきていたんですが、Version1.5.0ではこの方法を正式には採用しない方針に変更したよう…

Fibonacci series by C++ without semicolon

ねたにしても風化しかかってますが。思いついたので。 #include <iostream> int main(int, char* []) { if(int n0 = 0) {} else if(int n1 = 1) if(int n2 = 1) if(int i = 0) {} else while( i < 20 && ( std::cout << n1 << std::endl, n2 = n1 + n0, n0 = n1, n1 = </iostream>…

FizzBuzz by C++ without semicolon

C++でもセミコロン無し - How to disappear completely こういうのはどうでしょう? #include <iostream> int main(int i, char* []) { while( (i % 15) == 0 ? std::cout << "FizzBuzz" << std::endl : (i % 5) == 0 ? std::cout << "Buzz" << std::endl : (i % 3) ==</iostream>…

実装方法についての考察:mixinについて

C++

今回のビット操作を実装していて気付いたことをメモ。おもに明日の自分のために。 今回、勢いで実装をはじめたことで、みごとにコードの重複が発生してしまいました。 古い実装では数値を表すSignedとUnsignedという二つのクラステンプレートを用意していま…