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

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

C++

Fiddle を掻き鳴らしてみる

library fiddle (Ruby 2.3.0) *.dllや*.soなど、ダイナミックリンクライブラリを扱うためのライブラリです。 Ruby は痒い所に手が届く便利な言語だと知ってはいましたが、こんなに便利になっているとは思いませんでした。と、いうわけで。 Fibonacci Number …

libRSVG と Cairo を使って SVG から PDF を生成しためも

それぞれのサイト。 Projects/LibRsvg - GNOME Wiki! cairographics.org 今回参照したドキュメント。 Cairo: A Vector Graphics Library: cairo_t Cairo: A Vector Graphics Library: PDF Surfaces RsvgHandle: RSVG Libary Reference Manual Error Reportin…

QRコードを生成したときのめも

QRencode で QR コードを生成し、Magick++(ImageMagick の C++ API)で画像ファイルに保存してみた、ときのめも。 QRencode: Main Page Magick++, C++ API @ ImageMagick この二つのライブラリは、Mac の場合、 Homebrew でインストールできます。 ソースコ…

かっこで括られたトークンを取り出す

これ とか これ の入力になっている (A)(BC)(DEF)のような文字列から括弧の中にある文字列を取り出したい、というのが動機。 まわせ! Bouwkamp!! 横へな2016.2.6 問題 ESM オフラインリアルタイムどう書く 拡大版 · GitHub Ruby def tokenize(s, left, right…

diff を清書する、加えて gem にする

気がつけば。diff を実装してから7年も経っていました。 diffをつくる(3) -後編 - エンジニアのソフトウェア的愛情 案の定、考え方がかなり頭から抜けて行ってしまっているのですが、当時 diff について詳しい記事を書かれていた方がいらっしゃって、加えて…

駒の移動できる位置をビット演算で求める

C++

King's Vallery というゲームがあります。 キングスバレー「King's Valley」公式ページ これの駒の移動できる位置をビット演算で求めてみようと思います。細かくは、一手目は家臣駒を動かさないといけないとか、家臣駒は King's Vallery に入れないとかあり…

修練がてら DFA をいろんな言語で書いてみた

アンダースタンディング コンピュテーションを読んでいます。アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで作者: Tom Stuart,笹田耕一,笹井崇司出版社/メーカー: オライリージャパン発売日: 2014/09/18メディア: 大型本…

型システム入門

型システム入門 −プログラミング言語と型の理論−作者: Benjamin C. Pierce,住井英二郎,遠藤侑介,酒井政裕,今井敬吾,黒木裕介,今井宜洋,才川隆文,今井健男出版社/メーカー: オーム社発売日: 2013/03/26メディア: 単行本(ソフトカバー) クリック: 68回この商…

いかにして表計算の列名をつくるか・補遺

先日Rubyで書いたものをRuby以外のメジャーどころの言語でも実装してみます。 桁上がりで1文字戻す Ruby 再掲。 def column_names(n) result = '' begin result = (n % 26 + 65).chr + result n = n / 26 - 1 end while n >= 0 result end C++ #include <string> st</string>…

Lispを作ってみる、ただしC++テンプレートで

なんか、こじらせた。 これだけではLispになりませんが、もだった材料はそろうみたいなので、できそうな気がします。たぶん。 #include <iostream> // 等値 template<typename T, typename U> struct Eq { static const bool condition = false; }; template<typename T> struct Eq<T, T> { static const bool con</t,></typename></typename></iostream>…

文字列をリンクトリストにする、ただしC++テンプレートで

C++でテンプレートを使っていると、ときどき、文字列をテンプレートに渡したくなるときがあります。 ですが残念なことに、文字列をテンプレート引数にすることはできません。 // こういうことをやってみたい! (けど、できない) template<const char* S> struct Str { // </const>…

畳み込み、ただしC++テンプレートで

// リンクの終端 struct Nil {}; // 左畳み込みテンプレート template<template<typename, typename> class Operator, typename N, typename Sequence> struct Foldl { static const int value = Foldl< Operator, Operator<N, typename Sequence::head>, typename Sequence::tail >::value; }; // 左畳み込みテンプレ</n,></template<typename,>…

遅延評価if

C++のテンプレートで。 Haskellのばあい 基本に立ち返って、まずはHaskellのばあい。 Haskellは基本的に遅延評価なので、不適切な式が含まれていても評価されないのであれば全体としては正しく評価してくれます。 ここでinfinityを評価してしまうと無限再帰…

会議の時間

c++

第20回 先日、「オフラインリアルタイムどう書く」が開催されました。今回で20回目でした。コンスタントに優良なお題と、みんなで集まって解くという場を提供され続けていることに尊敬と感謝の念を抱くばかりです。…。とはいえ、いまだにオフラインリアルタ…

Steinhaus–Johnson–Trotter algorithm の実装

Steinhaus–Johnson–Trotter algorithm - Wikipedia, the free encyclopedia Permutation.h #ifndef PERMUTATION_H #define PERMUTATION_H #include <vector> class Permutation { public: Permutation(int* begin, int* end); bool isIdentity() const; Permutation&</vector>…

8x8のビット行列を転置する

C++

@Nabetani さんが主催されてい「オフラインリアルタイムどう書く」のシリーズ。 3月まではオンラインで投稿させてもらっていたのですが、4月以降いろいろと余裕がなくなってしまい、すっかり遠のいてしまっていました。なのですが。なにやら参加のラブコール…

N個の要素に分割する

C++

文字列とか配列とかを指定した個数に分割するもの。 あとで使う予定。まずは道具を研ぐのが主義。 最後の要素は端数になります。 まずはC++で。 イテレータのヴェクタを返します。分割したあとのm番目の要素の開始位置と終了位置がヴェクタの要素のm番目とm+…

エントロピー符号をステートマシンで解く

お題。 オフラインリアルタイムどう書く第8回の参考問題 - Qiita この問題は、名前が示す通り、エントロピー符号で符号化されています。 エントロピー符号 - Wikipedia と、いうことは。一定の手順を踏むことで復号が可能ということになります。 と、いうこ…

プログラミングの攻めと守り

周回遅れ。すでに第9回の参考問題が出題されているという状況で第8回の参考問題を解くという。 オフラインリアルタイムどう書く第8回の参考問題 - Qiita 以下、コード。コードの全体はGitHubに格納しています。 #include <iostream> #include <sstream> #include <string> static const </string></sstream></iostream>…

バックトラッキング、C++で、Prologも、Haskellでも

「第7回オフラインリアルタイムどう書くの問題」を解いていて気がついたこと、学んだことを明日のじぶんのために、記録。 のんびり座りたい 〜 横へな 2013.2.2 いろいろ問題をコネているうちに、この問題はパタンマッチングで解けることに気がつきました。…

2点を対角の頂点とする矩形の内側の点を判別せよ

「オフラインリアルタイムどう書く第6回の参考問題 - Qiita」は前回一度解いていますが、別の方法――対象となる点をすべて数え上げるという方法で解く場合のお話。この問題では判定が必要な点の個数は10×10のたかだか100とわかっているので、こういう力技法で…

プログラムコードの、ひとつ上の視点で

今年の後半は、鍋谷さんが主催されている「オフラインリアルタイムどう書く」にオンラインで非リアルタイムで参加させてもらいました(参加というか、勝手にコード書いてアップしてただけですが)。以前にも書きましたが、鍋谷さんが出題される問題の難易度…

組み合わせ(combination)と部分列(subsequence)

備忘録。 Combination - Wikipedia Subsequence - Wikipedia C++で vector以外でキチンと動作するか、まだ確かめてないです。 combination #ifndef COMBINATION_H #define COMBINATION_H #include <vector> #include <iterator> template<typename iterator_t> void combination(iterator_t begin, i</typename></iterator></vector>…

組み合わせ(数学の) 〜 combination

C++で ベクタから指定した個数の要素を持つ部分集合のベクタを生成します。 #include <vector> template<typename T> struct Combination { typedef std::vector<T> source_type; typedef std::vector<source_type> values_type; Combination(const source_type& source, int n) { std::vector<int> v(</int></source_type></t></typename></vector>…

ビットテトリス

Bit Tetris 〜 横へな 2012.7.25 今度もオンライン上だけでの参加になりました。 ネタのリサイクルになりますが、Qiitaに投稿したものをブログにも投下しときます。 第二回 オフラインリアルタイムどう書く その1 - Qiita 第二回 オフラインリアルタイムどう…

ビット演算で解く 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>…