おばふろ

C++

こういうコード書いたらコンパイラに警告出させたいとかよく思う. int a, b; ... long long c = a * b; 整数オーバーフローが起こりそうな箇所をおおざっぱに検出してくれるツールとかないんかな.

コンパイルが止まらない

C++

なんか珍しいものを見た.TopCoderではコンパイルに30秒以上かかっちゃダメらしい. コンパイルができないと何の情報も無いまま目だけでデバッグしなくちゃならないので精神的にとても辛い.どうやら原因はでかいメンバ変数のようです. #include<vector> class C { </vector>…

カリー化デコレータ

Python のデコレータはなかなか面白い機能だと思ったので、試しにカリー化を実装してみました。 @curry def f(x,y,z): ... などと書くと、カリー化されたfが定義されます。まぁ functools.partial があれば全然必要無いシロモノではあるのですが。 複数まと…

考えてみてくださいとかいいつつ

コレ result = HogeX.invoke(x, "methodName", param1, param2); 自分でてきとうに書いてみました。 Class.getDeclaredMethod() が微妙に使えない子だった(シグネチャが引数に完全一致するメソッドしか取ってこれない)。一応実行時に型チェックしつつ、prote…

関数ポインタ

全部わかったらえらいです。 #include <stdio.h> void f(){} int main() { void (*p)() = f; printf("%x, %d\n%x, %d\n%x, %d\n%x, %d\n%x, %d\n", &f, sizeof(&f), f , sizeof f, *f, sizeof(*f), p , sizeof p, *p, sizeof(*p)); return 0; } 実行結果: C C++ =f は</stdio.h>…

アクセス制御の抜け穴 (C++/Java ; protected編)

Python/Ruby編 OCaml編 さて C++ と Java です。 privateへのアクセスはひとまず後回しにするとして、まずは protected なところから考えていきましょう。 C++ の場合 (protected) 欲しいメソッドがサブクラスからアクセス可能なので、自分でサブクラスを定…

アクセス制御の抜け穴 (OCaml編)

Obj.magic 最強、で終わらそうと思ったのですがそう単純な話でもないらしい。 まず OCaml の private メソッドは、Javaなどのprotected相当で、継承した先のクラスからアクセスすることができます。 しかし呼び出せるのは自分に対してだけで、引数として受け…

アクセス制御の抜け穴 (Python/Ruby編)

ある既存クラスの private なメソッドを外から使えるかどうかという話。他人の触れてはならないプライベートな領域に踏み入りたい! なんていう不埒な欲望が首をもたげて現れた時点で9割9分どっか不健全なわけで、すぐに首を洗って出直すか首を括って死ぬべき…

エラーモナド in Ruby

PHPの@演算子っぽいものをいじってたら Ruby でエラーモナドっぽいものができました。こんな感じで使えます。 result = try { parseint("hoge") }. catch(ArgumentError){ -1 }. catch{|e| puts e; -2 } res_value = result.value if result.good? begin/res…

PHPの@演算子的なもの

http://d.hatena.ne.jp/gnarl/20080820/1219226223例外かどうかを判断するのが誰であるべきかという話はおいといて、try-catch系の構文は、成功/失敗の二値が知りたいだけの場合でもあの長ったらしい構文を使わないといけないのがうざいなーとは常々思ってい…

Two Envelopes

最近パズル系の本を読み漁っているのですが、以前からどうにも腑に落ちなかったものを一つ紹介します。 わりと有名なパズルですがググってもすっきりした解説が見あたらない、というかこれ系の解説が全然理解できないので。。 分かりやすい説明ができる方が…

SRM414 Div1

久々のTopCoder。すっかり感覚を忘れててダメダメだった。 Easy 書類をn枚書かなきゃいけなくて、各書類の順番と書くのにかかる時間が与えられる。完成した書類を提出しないと次の書類がもらえない。しかも受付時間が制限されている。全部提出するのにどんだ…

Names in Boxes

100人の囚人パズルの正解戦略の確率を計算してみました。 ネタバレ含むので自分で考えたい人は見ないでください。

えんしゅうりつ

pi は alias であって訳語とは違うと思うんだ。

正∞角形と円

一般に、正n角形の各頂点は円周上の θ = 2π * k/n (0≦k<n) の点として表せます。 逆に単位円上の点を列挙しようと思ったら、上の式で n→∞ としてやればよさそうです。Haskell で書くとこんなかんじ。zeroToOne は区間[0,1)の全ての有理数を列挙する無限リス…

Kanasan.JS JavaScript 第5版読書会#5

相変わらず素晴らしく勉強になる読書会でした。こういう場は本当に貴重だと思います。 <script> XHTML中に<script>直書きすると&などに実体参照エスケープがかかる。 CDATA の中で ] ]> という文字列を使えないので二回に分ける必要がある。 MIMEタイプは今後 text/javascri…

ICFP コンテスト 2008

去年と同じメンバで二回目の参加。結果もたぶん去年と同じようなもんだろうと思います。つまり全然だめぽ。迷路とか無理すぎます。ようやっとICFPのツケで貯まった仕事が片づき一段落したので、これから参加者のみなさんのブログやコードなどを見て回りつつ…

続続・ゆの in Haskell

自分でもよく飽きないなーと思いますが、またしてもゆのネタです。私のアタマではどう頑張っても正式なゆの式を書くことができなかったので、AAに関しては激しく妥協しつつ、別方向で変態的なコードを作ろうとしてみました。その結果が以下です。 import Pre…

続・ゆの in Haskell

_ が変数として使えないので、パターンマッチの文脈で無理やり使ってみたら、なんだか微妙な表情になってしまいました。私には X が目で / と | は口元のシワにしか見えません。 import Prelude hiding ((<),(/)) import System.IO.Unsafe import qualifed S…

識別子にマルチバイト使ったりテンプレート引数に文字列渡したり型名を文字列にしたりしたい。

C++

びみょう…。 #include <iostream> class SeeYouNextWeek; namespace Yuno {int X = ((std::cout<<"ひだまりスケッチ"),1);} int _ = ((std::cout << "x360 "), 1); template <class T> int X() { std::cout << "来週も見てくださいね!" << std::endl; return 1; } int main() {</class></iostream>…

便乗 ゆの in Haskell

http://d.hatena.ne.jp/ranha/20080709/1215658800まぁ少なくとも片方は #define 使う必要ないですよね。 #define _ X import Prelude hiding((<),(/)) data X = X a / b = X a < b = putStrLn $ "Hidamari Sketch 365 " ++ b main = X / _ / X < "Please se…

eruby 再インストール

原因はよく分からないのですが、なんか突然 mod_rubyで動かしていたページが Internal Server Error を出すようになり、ログを見ると [Sat Jun 28 14:32:04 2008] [error] mod_ruby: error in ruby [Sat Jun 28 14:32:04 2008] [error] mod_ruby: (eval):45:…

無限リストを途中で打ち切りたい

たとえばある関数 f が単調増加することが分かっている場合、 sum [ a | x <- [1..], let a = f x, a < m ] みたいに書いて、m 未満の f(x) の和を計算したいのです。もちろんこのコードは止まりません。処理系は関数が単調増加だなんて知る由もないのですか…

Gauche のソート

現在の実装では、cmpfnが省略された場合はクィックソートとヒープソートを使い、 cmpfnが与えられた場合はマージソートを使っています。 Gauche Users’ Reference: Top へー。何かこの挙動の根拠はあるのかしら? クイックソートとヒープソートをってのはイ…

素数株式会社

Amazon で「素数」を検索したら、なんかいっぱい引っかかったんですが。http://sosu.jp/何を思ってこの社名にしたんだろうか…。http://www.unix.co.jp/ を思い出した。

残り30問!

分からなさすぎて発狂しそうになるw 数や図形がゲシュタルト崩壊しだしたら休憩しませう。 144 レーザー。誤差との戦い。 実装がまずいのか、最初に与える方向ベクトルを正規化(長さ1)しただけで止まらなくなるし。 146 素数テスト…なんだけどあまりにもチ…

div/mod と quot/rem

Haskell は負数の割り算をきちんとサポートしていて、剰余の符号が、割る数と割られる数のどっちに依存するかで2種類ある。 quotRem x y = (q,r) ならば x = qy + r divMod x y = (d,m) ならば x = dy + m 違いは、r の符号は x と同じ (restoring method) m…

加速互除法

数論入門―証明を理解しながら学べる (ブルーバックス) を見て、加速互除法というユークリッドの互助法の高速化ネタを知りました。 剰余を絶対値が最小になる取り方で与えると、パラメータの減りが速くなるとのこと。 なるほどーと思って実装してみたのですが…

ひさびさのEuler充

週末に20問くらい解いた。フォーラム見てたら、数列の階差を取ってみると1個とばしのフィボナッチ数列で一個おきに2倍になってるよ (F[3], 2F[5], F[7], 2F[9], ...) とか普通に気づく人がいたりして笑った。変態すぎるぜ。今まで問題の手のつけ方が汚くてプ…

matrixと整数

整数要素の行列で何も考えず Matrix#inv してたら、中で整数の割り算が使われてバグってた。require 'mathn' しておくと吉。