2010-07-01から1ヶ月間の記事一覧

行列式を掃き出し法で計算する関数

そういえば行列計算は基本中の基本なのにやってなかったな、というわけで、行列式を計算する関数を作ってみた。 計算方法は、線型代数の入門で学ぶものをそのまま使っている。行列式の絶対値を変えない基本変形(ここでは行のみの変形、つまり基本行列を左か…

後置演算マクロを定義するマクロ

後置インクリメントのような演算をマクロとして手軽に定義できるようにする、メタ・マクロ。 使い方は、3つの引数(定義するマクロ名、使用する演算名、第2オペランドのデフォルト値)を渡すだけ。演算名は単に貼り付けられるだけなので、マクロやラムダ式…

宣教師と人食い人の川渡りパズル

宣教師と人食い人の集団が川を渡ろうとしている。定員の決まっている舟を一艘だけ使える。岸でも舟の上でも、人食い人の数が宣教師の数を上回ってはいけない。さて、どうするか。 (cross m c b) で、m 人の宣教師と c 人の人食い人が定員 b 人の舟で渡る場合…

文字列をラクダ記法に変える関数と、そのためのユーティリティ

正規表現を使わないで書いたので、楽をするため、区切り文字列の判定は1文字のみ対応。デフォルトで lowerCamelCase になるのは私の都合。 position-all で区切り文字の位置をすべて求め、sequence-parts で部分列に分け、nstring-capitalize でそれぞれの…

麻雀の手牌が入力として与えられたとき、「待ち」を出力するプログラム

あなたのスキルで飯は食えるか? 史上最大のコーディングスキル判定 ↑で出題されていた問題を Common Lisp で解いてみた。 最初の関数3つはユーティリティ。名前の通りで、条件を満たす要素すべての位置をリストにしたり、添字リストで nth して集めたり、…