最近、Clojureのとっかかりの部分についての説明が書かれたものをWeb上でよく見かけるようになりましたが、Lispを語る上で欠かせない「評価」という事柄についての記述が無いものがほとんどのようです。
Lispの力の源はevalであって、evalとは「評価」そのものであるので、Lispを知る(=使う)には、「評価」を理解することは必須だと思うのです。
あまりえらそうな事を言えるほどのスキルがあるわけではありませんが、ちまちま書いていたものが形になったので、公開します...
clojure contrib library advent calender に記事を投稿しました。
numeric-tower と memoize です。
numeric-tower は、PEをやっているときに、何度か使っていたのだけれど、中身を見ていなかったので、今回題材にして中身を見てみた。 記事では中身のことは話題にしませんでしたけど、やっぱり参考になりますね。 普段、面倒くさがりなので、あまり他人のコードを読むことは無いのですが、いけないなーと思います。
もう一つはmemoizeです。
こちらは、このブログでも何回か取りあげた、clojureのコアに入っているmemoizeの強化版です。 作者は Joy of Clojureの著者のFogusさんです。 コアのmemoizeに苦戦しているころ、メーリングリストに新しいmemoizeの話題が出...
最近、あまり趣味プログラミンングをしていなくて、めっきり投稿していなかったわけですが、年末になったので、Advent Calenderイベントに参加してみています。
今年、参加しているのは、2つ。
● Clojure Contrib Library Advent Calendar 2013
clojure contribライブラリを説明しまくってやろうというものです。athosさん主宰です。
今日の担当分として、combinatorics の記事を書きました。
● Clojure Advent Calendar 2013
もうひとつはclojure一般ものです。 って、あれ? こっちも担当今日じゃん!
やばいやばい。 書いてあったからいいようなものの、冷や汗ものだった。
...
DDSKKでDvorakJPを使えるようにしてみましたという話です。
ファイル
必要なファイルは以下に置いてあります。
https://gist.github.com/ypsilon-takai/5825262
使うには、EmacsとDDSKKをインストールする必要があります。インストールしてあれば、Emacsのsite-lispディレクトリにskkというディレクトリがあって各種.elファイルが入っているはずです。
skk-dovjp.elファイルを置きます。
skk.elとskk-vars.elをdiffに併せて修正して再コンパイルします。
$HOME/.skkファイル(無ければ作る)に (setq skk-use-dvojp t) という記述
を追加します。
Emacsを再起動すればOK。
...
100個解くのを目標にしていたので、ひとまず目標は達成です。
これにあまり時間を取るのもなんなので、Project Eulerはしばらくお休みにします。
もうちょっと実用的ななにかをしないとということで、作りかけていたツールでも作ろうかと思っております。Herokuでwebアプリです。
あとは、core.logicもちょっとやってみたいと思っとります。...
100番です。
袋から連続で2個のボールを取り出したときに、同じ色のボールが出る確率をちょうど2分の1にするには、何個のポールを入れたらいいでしょうか。という問題です。
初めに思いついた方法は時間がかかりすぎてだめでした。
式を立てていろいろいじっていたら解けました...
99番目の問題です。
ここに来て、問題ごとの難易度の差が激しいですね。
この問題はとても簡単。
思いつきでだーーっと書いたコードなので、あまりきれいではないのですが、直すまでも無いので、このままにしときます。
今回も内容についてのコメントは無し。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode...
99番です。
アナグラムにあてはまる平方数についての問題です。
回答者数を見ると難しそうな問題だったのと、数独を解いた余波と、100達成に向けた勢いで、解説付きにチャレンジしました。
ほぼ、解いた手筋をなぞってます。
gistにソースつきで載せました。
解法としては、10分もかかってしまったので今一つですが、難しい問題ということで、よしとしときま...
数独を解く問題です。
95を2月に解いて、それから取り組んでいたのですが、昼休みとか暇なときにしかやってないとは言え、なかなかタフで時間がかかりました。
結果的には、ネットからのデータの取得も含めて3.4秒ほどで解けたので上々でしょう...
95番です。友愛数の列をみつける問題です。
2月に解いていたのに、なぜかここにエントリを作っていませんでした。 そんなわけで、どんな風に解いたのかうろ覚えなので、コードを読んで解説してみます。...
辺の長さと面積が整数になる、「ほぼ正三角形」を見つける問題です。
始めに総当たりで解くやつを作ったら、10時間かかりました。さすがにこれはだめなので、恒例の逆から考えるパターンです...
4つの数字を加減乗除して作れる数を求める問題です。
しばらく考えてはみたのですが、総当たり以外にやりかたはなさそうなので、それで実装してます。
2分くらいかかってしまっていますが、まあ、よしとします...
数の各桁の数を二乗した和を並べた数が89でループする場合を数える問題です。
操作からすると、345と435と543などの同じ構成の数は同じ結果になるので、それをうまく使えばメモ化で速くなりそうなので、やってみた。
数を数列にしてソートする。0はなくても同じなので除外する。そうしてできた数列で判定する関数を作ってメモ化する。
解けたんだけど、遅い。
ふと、元の数をつくるのにどれくらいかかるか計算してみたら、それだけで2分近くかかってる。こりゃだめだ。 どうしよう。
This file contains bidirectional Unicode text that may be interpreted or...
格子点を使って直角三角形を作る問題です。
まずは、格子から2点を取って、原点合せた3点でできる三角形が直角を含むかどうかをチェックしてみたのですが、10分という想像以上の時間がかかってしまい、別解を考えました。
このとき、「直交するベクトルの内積は0になる」なんていうのを使ったのですが、かなり懐かしい感じでした。...
やっとこさ90番まで来ました。
ダイスの目を使って、2桁までの2乗数を作る問題です。
結果的には総当たりで解いたのですが、うまい方法ほないかなーっとつらつら考えていたりして、そこそこ時間はかかりました。
一番考えたのは、あるダイスがあったときに、題意を満たすもう一方のダイスの目を特定できないかということなのですが、条件を絞ることができずにあきらめました。
...
ローマ数字の正規化?の問題です。
質問は、正規化したときにどれだけ文字数が減るかというものです。
解くにはいろいろ方法がありそうですが、問題の最後の一文に書かれている内容から置換対象が数個に限定されるので、それを数えることで直接減らせる文字数を数えています。
以下コードです。
簡単なので、解説無しです...
久し振りに進めました。
和と積が同じになる数列について、その個数ごとの最小のものをみつける問題。
仕事がいそがしかったせいもありますが、時間がかかりました。
苦労したので長ーい解説です...