トップ «前の日記(2006-06-09) 最新 次の日記(2006-06-11)» 月表示 編集

日々の流転


2006-06-10 [長年日記]

λ. RubyKaigi2006 (1日目)

  • 参加者の1/4くらいは知った顔じゃないかと勝手に思ってたが、ぜんぜんそんなことはなかった。世間は広い(ぉぃ
  • BTSで個人的な案件管理というのは自分でも考えたことはあったが、gotokenさんの発表を聞いて、実践してみたくなった。とりあえず、影舞いれるか。
  • 「お知らせ」のような案件じゃないものもカテゴリとして登録しておいて、一番上に表示するというノウハウが面白い。
  • akrさんの発表の「自発的にライブラリを作ろうと思い立つ人は自分自身の望みを持っているはず。初心忘れるべからず。規格を調べるうちに忘れてしまうことが多い」というのに耳が痛い。
  • Rails の Binding.of_caller の実装が邪悪すぎて感動した。継続とtrace_func との組み合わせなんて良く考えたものだ。
  • Ruby/Tkの 永井 秀利 さんと、Ruby/Tk や Ruby-GNOME2 のことについて話す。
  • gotokenさんと、樋口さんのnonameの話
    • inductiveなデータ型とcoinductiveなデータ型の区別。totalな言語なら当たり前。partialな言語で両者をきちんとサポートしつつ区別している言語は存在するか?
  • 隠蔽代数(Hidden Algebra)とCafeOBJ。勉強しようと思いつつ手を付けられていない。檜山さんが<URL:http://d.hatena.ne.jp/m-hiyama/20060119/1137641539>で紹介していた Joseph Goguen, Grant Malcolm “A Hidden Agenda” (1997) [citeseer,CiteULike] を読むのが良いのかな?
  • その他色々な人にお会いした。
Tags: ruby

λ. x2 + y2 = r であるような (x,y) の列挙

<URL:http://d.hatena.ne.jp/mzp/20060603/1149861488> より。

与えられた自然数 r に対して x2 + y2 = r であるような, (x,y) (ただし x >= y >= 0)の組を全てリストとして列挙する関数 squares r を定義せよ.(検算用資料: r = 48612265 の時 32 個の解があるそうです.)

リンク先の解答では 0 ≦ x ≦ √r の範囲でxを列挙しているが、ここでは 0 ≦ y ≦ √(r/2) ≦ x ≦ √r なので、列挙する範囲をより小さくし、同時にチェックも削ることが出来る。

import Control.Monad

squares :: Integer -> [(Integer, Integer)]
squares r =
    do y <- [0 .. floor (sqrt (fromIntegral r / 2))]
       let x2 = r - y*y
           x  = floor (sqrt (fromIntegral x2))
       guard (x*x == x2)
       return (x,y)
Tags: haskell