
前の投稿に引き続き、Clojureの勉強会のコメント用の投稿です。
問題24を解の解き方の解説図です。
詳細は、gistのコメントで。
gistを貼っておきます。
解説
実際に数列を作るときに、樹形図を描いたのですが、それを見ていて思いつい
た方法です。
図を作りました。
。
樹形図を描いてX番目の数を求めるときには、全部描いて、端から数えればい
いわけですが、図のようにあるノードの下にある葉の数は計算で求めることが
できるので、労力を減らせます。
図は、0-3の4つの数で、4ケタの数を作るときの図です。このとき全体では、
4!=24通りありますが、この15番目の数が何であるか考えます。
1桁目の数は0,1,2,3のいずれかですが、それぞれで始まる数は3!=6つあります。
求めるのは15番目ですから、0と1の下には無いことがわかります。1桁目の数は、2で決まり
です。さて、残りは15-(6*2)=3こです。2の次の数は、0,1,3のいずれかですが、
それぞれの下には、2!=2こずつの数があります。残りは3こなので、2番目
の数は、1で決まりです。のこりの数は、0,3で残り1こなので、最後は03となり
ます。...

最近、Clojureの勉強会に出ていて、Project Euler の4番の高速版を作ってみました。
説明の画像を作ったので、貼ります。
コードも貼っときます。
説明はgistのコメントで。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears...
最近、更新していないのは、仕事でちょっとしたログ監視の仕組みを作ることになって、自分しかメンテできないことを覚悟の上で、Clojureを使って構築していたから。
キーワードだけ並べてみる。
サーバー
clojure
compojure
hiccup (テスト用)
commons.io.input.Tailer
データベース
mongodb
mongoika
クライアント
dojo
maqetta
調べながらだったので、1ヶ月ぐらいかかったけれど、初めての割に早くできた。
順調に動いているようだし、とてもいい。
広げていけるといいなぁ。むりかな。
逆に、本格的に運用で...とか言われたら困る...
ClojureScriptに手を出したのですが、lein depsがエラーを吐いてしまったので、ここで一つ、leiningen 2(lein2)に移行してみようと思ったわけです。
1から2へのアップグレード方法が本家のここのページにあるので、これに沿ってやってみた作業のログです。
ちなみに、環境はWindows7で、ファイル操作はEmacsのeshellでやっています。...
素数を2乗,3乗,4乗した数の和についての問題です。
とりあえずfor(内包表記)を使ってやってみるかな、と思ってたらできちゃいました。...
モノポリーの各マスに止まる確率を求める問題です。
純粋に計算で出るんじゃないかと思ったけど、だめっぽい。計算のしかたからしてわからない。どうしよう。どうしよう。
で、実際にやってみることにした。 シミュレーションです。
サイコロ振って、マス目を移動して、そこの指示に従う、ってのをたくさん繰り返して、それぞれのマスに止った数を数えて確率を計算します。
最終的に百万回で答を出してます。
ソースは長めですけど、パキパキとできあがって、たのしかったな。
ここのところ、見つけてきた公式にあてはめてっていうパターンが多かったのでさおさらかな。
そういえば、今回から1.4でやってます。mapvとかvecter系の関数はちょっと便利そう。まだ使ってないけど。...
升目のルートの問題の最後です。
これは全探索しかないんじゃないかなぁ。
速度向上のために、枝刈りを2つ入れてみたけど、やっぱり時間がかかる。
15分以上かかった。 根本的に考え直さないとだめかなぁ。
...
四角に並んだ数の角から角まで行くときの最小コストの計算
これは動的計画法ですね。
67の問題とほぼ同じなので、同じやりかたで解いてます。 ...
80は、数の開平の問題です。
初めは、数値解析のやりかたでやろうと思って、やってはみたものの、時間が掛りすぎてだめ。
で、結局、一番最初に思った、筆算の開平の方法を実装して解決。...
ここのところ、ブログに載せるのをさぼっていたので、連投です。
79は、暗唱番号の問題です。
よくある、手元の表から何番目と何番目と何番目を答えてみたいなやつの問題。
答の列から元の表を推測します。
とりあえず、と、思って「答の列で最も左にあるやつが元の表でも左にあるでしょう」っていう方式で解いてみたら解けちゃった。...
ここのところ続いている、分割数の問題です。
前までの漸化式で解こうとしたら、時間がかかってだめ。
Wikipediaを見なおしてみると、別の漸化式があったのでこっちでやってみたら、まあ、なんとか。...
最近、Herokuでのアプリ作りで苦闘していたり、仕事が忙しかったりして、更新してなかったけど、久しぶりにPEを解いた。
数を素数で分割する問題です。...

この間デスクトップアプリで作ったSKKIMEのレジストリ作成ツールをWebアプリに仕立てて、Herokuに上げました。
ソースはGithubにあります。
使ったライブラリは、
Compojure
Ring
hiccup
です。
レジストリの変換のモジュールは、デスクトップアプリで使ったものそのままです。
作るとき、ファイルのダウンロードのところに手間どってしまった。
わかってしまえば、書いてあるとおりなのだけれども、Compojure/Ringの変化が速いせいか、Webで見つかる情報が古くて、そのままでは使えなかっりした。
やっぱり...

MS IMEは突然変な変換をしてくれたり(今はよくなってるのかもしれないけど)するので好きじゃないし、ATOKにするのも癪だし、今の仕事の環境でcannaが使えなかったこともあり、だいぶ前に両方SKK(とSKKIME)に以降した。
さらに、そのころからDvorak配列に移行したこともあり、日本語の入力はDvorakJPを使っている。
さて、DvorakJPを使うためには、ローマ字とかなの変換テーブルに情報を追加する必要があるのだけれど、UNIX版であれば、それは単にテキストファイルの設定ファイルを修正すれば済むのだけれど、SKKIMEでは、なんと、設定がレジストリになってしまっており、ちまちまとGUIで設定しなくてはならないのだ。
ちょっとした修正ならなんとかするが、10を超えると苦痛でしかない。
というわけで、ずっと一部の対応だけ(k->cと拗音のところ)だけで来たのだれど、clojureのGUIの練習がてら作ってみた。
ということでこれです。
ツールはここです。
使いかたもここにありますです。
これで、二重母音が2打鍵で打てて、「かんたん」なら4打鍵で打てるはずなんだけれど、やっぱり普通に打ってしまう。...
100を自然数の和に分割する問題です。
初めは動的計画法のつもりで、1から積み上げていく方法をやってみたのですが、あえなく時間切れ。
Wikipediaでこれが自然数の分割というのだということを知り、とりあえずそこに出ていた式を実装してみたら解けた。...