2007-09-01から1ヶ月間の記事一覧

cutっぽい何か

30分プログラム、その147。cutっぽいものを作ってみよう。 cutは前につくったid:mzp:20070902:pasteの逆。こんな感じで使う。 $ paste [a-c] | cut -f 1 a a a ... $ paste [a-c] | cut -f 2-3 b c b c b c .... 使い方 Perlで作ったので、デリミタに正規表…

ダブル完全数(3倍完全数)

30分プログラム、その146。 ダブル完全数。 ここで「自分以外の約数の和が自分自身の2倍と等しいような整数」を「ダブル完全数」と呼ぶことにします。10000以下のダブル完全数をすべて求めるコードを書いてください。 Perlの文法を忘れてそうだったので、Per…

Builder.dumpがめっさ便利

id:Gemma:20070730のBulider.dumpが実に便利。だって、 Builder.dump(); var div = P({},[A({href:"http://d.hatena.ne.jp/mzp/"},["id:mzp"])]); って書けるんだよ。これで書いてたら、id:selvaggioから「まるで関数型言語だな」って言われたけど、実にその…

隣り合う二項の差

30分プログラム、その145。隣り合う二項の差。ちょっと指が痛いので、簡単に。 使い方 *Main> diff [3,1,4,1,5,9,2,6,5] [-2,3,-3,4,4,-7,4,-1] ソースコード diff :: Num a=>[a]->[a] diff [] = [] diff [_] = [] diff (x:xs@(y:_)) = (y-x):diff xs 参考 …

Rotate Log

30分プログラム、その144。Rotate Logをやってみよう。Apacheとかでよくあるログの形式。ログが一定数を越えると、最初のやつから順番に消えていくアレ。脳内プログラムによると、3行ぐらいのシェルスクリプトでできる気がしてる。けどまあ、Pythonで。 使い…

ラマヌジャン数

ラマヌジャンは療養所に入っており、見舞いに来たハーディーは次のようなことを言った。 「乗ってきたタクシーのナンバーが1729だった。特に特徴のない、つまらない数字だったよ」 これを聞いたラマヌジャンは、すぐさま次のように言った。 「そんなことはあ…

分数計算

こんばんは、水野です。趣味は再発明です。 30分プログラム、その142。分数計算を再発明してみる。いくつかの関数名とすべての機能が標準ライブラリと被ってるけど気にしない。 使い方 gosh> (define half (make-ratio 1 2)) half gosh> (define one-third (…

再帰的にmake clean

30分プログラム、その141。カレントディレクトリ以下を再帰的にmake cleanするプログラム。本当はRubyかPerlあたりでやるつもりだったけれども、よくよく考えてみればシェルクリプトで十分なことに気がついたので。 使い方 $ make-clean ./code/atomduce rm …

4つの素数の和

30分プログラム、その140。4つの素数の和 与えられた整数 N (N素数の和で表せというもの。もしNは4つの素数の和で表現できなければ、"Impossible."で答えろという。 また、4つの素数について、条件は一切なく、好きな組み合わせで良いという。 いったんSc…

古いファイルの削除

30分プログラム、その139。Loading...をマネしてみる。削除はシェルでやればいいので、二週間前のファイルを出力することだけに注力している。まあ、実際はzshで rm **/*(m-14)とやれば、2週間より前のファイルを削除できるわけですけどね。 使い方 $ ruby o…

exp(pi * sqrt(n))が整数に近くなるnを探す(失敗)

30分プログラム、その138。http://ja.doukaku.org/60/をやってみる。浮動小数点の誤差のために、うまくいかなかった。世の中には、任意精度の浮動小数点ライブラリが存在するらしいですよ。 使い方 gosh> (main) (0 37 58 117 128 129 130 131 132 133 134 1…

AquaSKKの辞書をSubversionで管理

30分プログラム、その137。AquaSKKの辞書をSubversionで管理できるようにしてみる。単純にユーザ辞書(~/Library/AquaSKK/skk-jisyo.utf8)をSubversionで管理すると、コミット忘れとかでコンフリクトしたとき対処するのが非常に面倒。 なので、Subversionで管…

MovableTypeに投稿

30分プログラム、その136。MovableTypeに投稿するRubyプログラム。はてダラのMovableType版を作りたいので、それの基本となる部分。コマンドラインオプションが多すぎて使いずらいので、これを使ったラッパをそのうち書こう。 使い方 次のようなsample.txtを…

仲間外れの判別

30分プログラム、その135。予告通り仲間はずれの判定。 まとめて判定するステキな方法が思いつかなかったので、個別に判断するようにした。 使い方 *Main> classify [1,1,1] Just ("homo",1) *Main> classify [1,1,2] Just ("onlyOne",2) *Main> classify [1…

仲間はずれの判定

30分プログラム、その134。仲間はずれの判定。眠いので、あまり調子がよくない。明日、別の言語でやりなおす。 とりあえず動いてるけど、なにか漏れがある気がする。 使い方 $ ruby class.rb [1, 1, 1, 1, 1] = homo [1, 1, 2, 1, 1] = quasi_homo [2, 1, 1,…

==を定義するモジュール

30分プログラム、その133。毎回、似た==メソッドが面倒なので、モジュールを作ってみた。例えば、次のようなクラスの場合、 class Hoge def initialize(a,b) @a = a @b = b end end こんな感じの==メソッドを定義する。 class Hoge attr_reader :a,:b def ==…

RUBY_PLATFORM

Wiki系過去ログ - あさあさ.tkによるとRubyでの判定方法は、 RUBY_PLATFORM.include?("win") でも、これだとDarwinにひっかかってしまう。るびまによると、 /mswin(?!ce)|mingw|cygwin|bccwin/という正規表現を使えばいい。

whichコマンドをWindowsに

30分プログラム、その133。whichコマンドをさくっと再実装。Windowsでwhichがつかえないのが嫌だったので実装してみた。でも、よく考えたらWindowsでRubyは一般的じゃないっ!しかも、手元にWindowsマシンがないから試せないっ。 使い方 $ ruby which.rb ruby…

重複の削除

30分プログラム、その131。重複する要素の削除。重複した要素が、すべて削除されるところがnubと違う。 > nub [1,1] *Main> nub [1,1] [1] *Main> uniq [1,1] [] 使い方 普通につくったuniqと、ちょっと工夫したuniq2がある。 たぶん、uniqはO(N*N)で、uniq2…

環境構築

30分プログラム、その130。ちょっと趣向を変えて、環境を整備するのに30分使ってみる。シェルの関数や、EmacsLispをちょっと書いたから許して。 screen まずは、screenのステートライン(一番下のやつ)にカレントディレクリを表示するようにしてみる。今まで…

CSSアップローダ

30分プログラム、その129。ローカルにあるスタイルシートを、はてなダイアリーのスタイルシートとして書き込むツール。はてダラにインスパイアされました。 使い方 $ perl hcss.pl style.css ソースコード #! /usr/bin/perl # -*- mode:perl; coding:utf-8 -…

日記のテスト

sedでNGワードを置き換えるようにしたので、テスト。 --- はてダラのconfig.txtに次のように書けばいい。 filter: sed 's/foo/---/g' %s

Maven2感想

アルバイトでJavaを使うので、Maven2を試してみました。結構気にいった。MavenはAntに替わるJavaのビルドツール。ただAntと違って、デフォルトのフォルダ構成などが決められているので、がりがり設定を書く必要ないところがいい。Convention over Configurat…

.historyの解析

30分プログラム、その128。.historyファイルを解析して、よく使うコマンドを調べてみる。 使い方 $ perl cmd_hist.pl ~/.history ls: ***************************************** cd: *********************************** perl: **************************…

強度チェック付きパスワードジェネレータ(シェルスクリプト版)

シェルスクリプトでも書けることに後から気がついた。 ああ、修行が足りない。 passwd=/tmp/mkpwd-pwd.$$ strength=/tmp/mkpwd-strength.$$ apg "$@" > $passwd cut -d ' ' -f 1 $passwd | cracklib-check | cut -d ' ' -f 2- > $strength paste $passwd $st…

cracklib

MacPortsのcracklibだとヘッダファイルなどがはいらない ワードファイルは別途ダウンロードが必要。ダウンロード後creat-cracklib-dictコマンドで辞書を作る /usr/local/sbin/にcracklib-*等がインストールされる

強度チェック付きパスワードジェネレータ

30分プログラム、その127。強度チェック付きのパスワードジェネレータ。自分で作るのは面倒というか不安だったので、apgとcracklibを使っている。apgなのは、こいつが生成するPronounceable Password(発音可能なパスワード,英単語っぽいけど英単語じゃないパ…

デスクトップフォルダの復旧方法

Mac

MacOS Xで誤ってデスクトップフォルダ(~/Desktop)を削除してしまった場合は、再ログインすれば復活する。

form#serialize

http://www.imgsrc.co.jp/~kuriyama/prototype/prototype.js.htmlを眺めてて気がついたけど、form#serializeがちょっとおもしろい。 フィールド名とその値のリストをURLエンコードして返す。 例:'field1=value1&field2=value2&field3=value3' これは、昔id:G…

prototype.jsでクラス定義

30分プログラム、その125。prototype.js風のクラス定義を勉強してみる。prototype.jsだと Hoge = Class.create(); Hoge.prototype = { initialize: function(){ // ... }, f: function(){ // ... }, g: function(){ // ... } }; といった書き方ができる。普…