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

呼んだのは誰?

cf. どう書く?.org - 呼んだのは誰?Kernel#caller なんて初めて使った。 def foo /.*`(.+)'/ =~ caller(1)[0] $1 end def bar; foo; end def baz; foo; end p bar p baz ^o^ >ruby caller.rb "bar" "baz"

ダブル完全数

cf. どう書く?.org - ダブル完全数HaskellのほうがRubyよりすっきりしてるな。 divisors n = filter ((==0).mod n) [1..(n `div` 2 + 1)] isDoublePerfectNumber n = (sum.divisors) n == (n*2) main = mapM_ (putStrLn.show) $ filter isDoublePerfectNumb…

長方形の交差判定

cf. どう書く?.org - 長方形の交差判定 問題文中の top 判定方法は,要するに一方の長方形の4つある頂点のどれかか,もう一方の長方形の内部にあれば重なってると判定していいわけだ。 今日はRubyで書いた。 class Rect def initialize(left, top, right, …

アルファベットの繰り上がり

cf. どう書く?.org - アルファベットの繰り上がりsucc でいいじゃん,と思ったらダメだった。 Prelude> succ 'A' 'B' Prelude> succ 'Z' '['Ruby の String#succ はうまくやってくれるのに。 なら,26進数だと考えて素直に繰り上がりを処理すればいいか……と…

倍数になる13進数

cf. どう書く?.org - 倍数になる13進数 module Main (main) where fromDecimal :: (Integral a) => a -> a -> a fromDecimal n x = f 0 x 1 where f r 0 _ = r f r y z = f (r + (y `mod` 10) * z) (y `div` 10) (z * n) main :: IO () main = putStr $ sho…

/*コメント*/を取り除く

cf. どう書く?.org - /*コメント*/を取り除く正規表現の最短一致を使ってこれでいいはず……だと思うんだけど。 def remove_comment(str) str.gsub(/\/\*.*?(\*\/|\z)/,"") end samples = %w( AAA AAA/*BBB*/ AAA/*BBB AAA/*BBB*/CCC AAA/*BBB/*CCC*/DDD*/EEE…

アレイのuniq

cf. どう書く?.org - アレイのuniq再帰で uniq [] = [] uniq (x:xs) = x:uniq (filter (/=x) xs) と書いてから,こんな関数ありそうだなぁと思ったらやっぱりあった。 Data.List nub 高階関数版: uniq2 :: (Eq a) => [a] -> [a] uniq2 = foldl (\a e -> if…

delete blank lines

現実逃避的にアナーキーゴルフ。 cf. anarchy golf - delete blank linesこれで26バイト。どうやったら12バイトでできるんだ? $><<$<.read.gsub(/^\n/,"")

はてなダイアリーライター Version 1.4.1 を試してみた

以前に試したときにはどういうわけだかうまくいかなかってけど,今度はうまくいったので(ちょっとはまったけど),メモ。 はてなダイアリーライター本体はここから(Version 1.4.1)。マニュアルもここ。 http://www.hyuki.com/techinfo/hatena_diary_write…

はてなダイアリーライター Version 1.4.1 を試してみた(その2)

id:takatoh:20070708:hw のつづき。Crypt::SSLeayをインストールしたらエラーになった件。いろいろ試した結果,クッキーファイル(cookie.txt)の有無と関係が有ることがわかった。表にするとこんな感じ。 cookie.txtあり cookie.txtなし Crypt::SSLeayなし …

指定された日の存在する週

cf. どう書く?org - 指定された日の存在する週こんどは Ruby で。 require 'date' y, m, d = ARGV.map{|arg| arg.to_i } date = Date.new(y, m, d) sunday = (date - date.wday) (1..5).each do |d| puts((sunday + d).strftime("%Y-%m-%d %a")) end 実行。…

条件を満たす行を取り除く

条件を満たす行を取り除く via http://d.hatena.ne.jp/gan2/20070706/1183708048'#'で始まる行を取り除く問題。すげーひさしぶりに Haskell で書いてみる。 module Main where import System f :: String -> Bool f (h:tl) | h == '#' = False | otherwise =…

ピラミッドを作る

どう書く?org - ピラミッドを作る与えられた高さのピラミッドを作る module Main where import System cjust :: Int -> String -> String cjust w s | w <= length s = s | otherwise = margin ++ s ++ margin where margin = replicate ((w - (length s)) …