K.Sasada's Home Page

こめんとのついか

こめんとこめんと!

message

please add long comment :).

_11(Sun)

RHG楽しかったです。

お家に帰って RWiki に書き込むまでが読書会です。

ということらしいんで、飲み会の報告楽しみにしてます。


たむらさんから。

GNome とか KDE が無いのは何故>GUI

GNOMEとかKDEって、プラットホーム非依存って考えてもいいんでしょうか?

GTK+ って前挫折した覚えが・・・(そればっか)。今度頑張ります。


Ramanujan のtaxi数。そういえば、学校そばの中華料理屋にタクシーかけご飯、というのがあったんですが、あれはいったいどういう意味なんでしょうか。

すごいかっこわるいんですが、なんというか、馬鹿正直にやった奴。taxi数を作る4つの自然数を求めるもの、だから、taxi-numbers という名前はいけないんだろうな、きっと。

(define (taxi-numbers)
  (define n 0)
  (define max 100)
  (define cont #f)
  (define (cube x) (expt x 3))
  (define (is-taxi-number a b c d)
    (if (or (= a b) (= a c) (= a d)
            (not (= (+ (cube a) (cube b))
                    (+ (cube c) (cube d)))))
        #f #t))
  (define (taxi-iter a b c d)
    ;(display (list a b c d)) (newline)
    (if (is-taxi-number a b c d)
        (cons (list a b c d) (delay (apply taxi-iter (taxi-next a b c d))))
        (apply taxi-iter (taxi-next a b c d))))
  (define (taxi-next a b c d)
    (if (< (+ c 1) d) (list a b (+ c 1) d)
        (if (< (+ d 1) b) (list a b (+ a 1) (+ d 1))
            (if (< (+ b 1) max) (list a (+ b 1) (+ a 1) (+ a 2))
                (list (+ a 1) (+ a 1) (+ a 2) (+ a 3))))))
  (taxi-iter 1 4 2 3)
  ;(is-taxi-number 2 16 9 15)
  )

(define (display-taxi-numbers lst)
  (display (car lst)) (newline)
  (display '--------------) (newline)
  (display-taxi-numbers (force (cdr lst))))

(display-taxi-numbers (taxi-numbers))
;(taxi-numbers)

結果。

(1 12 9 10)
--------------
(2 16 9 15)
--------------
(2 24 18 20)
--------------
(2 34 15 33)
--------------
(2 89 41 86)
--------------
(3 36 27 30)
--------------
(3 60 22 59)
--------------
(4 32 18 30)
--------------
(4 48 36 40)
--------------
(4 68 30 66)
--------------
(5 60 45 50)
--------------
(5 76 48 69)
--------------
(6 48 27 45)
--------------
(6 72 54 60)
--------------
(7 84 63 70)
--------------
(8 53 29 50)
--------------
(8 64 36 60)
--------------
(8 96 72 80)
--------------
(9 34 16 33)
--------------
(9 58 22 57)
--------------
(10 27 19 24)
--------------
(10 80 45 75)
--------------
(11 93 30 92)
--------------
(12 40 31 33)
--------------
(12 51 38 43)
--------------
(12 96 54 90)
--------------
(15 80 54 71)
--------------
(17 39 26 36)
--------------
(17 55 24 54)
--------------
(17 76 38 73)
--------------
(18 68 32 66)
--------------
(20 54 38 48)
--------------
(20 97 33 96)
--------------
(23 94 63 84)
--------------
(24 80 62 66)
--------------
(24 98 63 89)
--------------
(29 99 60 92)
--------------
(30 67 51 58)
--------------
(30 81 57 72)
--------------
(34 78 52 72)
--------------
(35 98 59 92)
--------------
(42 69 56 61)
--------------
(47 97 66 90)
--------------
(50 96 59 93)
--------------
(51 82 64 75)
--------------
(以下略)

すげーダセー。終了条件とか無いし・・・。しかし、a が小さいならtaxi数も小さい、って考えちゃっていいんだろうか。

さて、これからどうやって綺麗にしていこうか。そもそもアルゴリズム替えないと駄目やなぁ。

(define (taxi-numbers)
  (define n 0)
  (define max 100)
  (define cont #f)
  (define (cube x) (expt x 3))
  (define (is-taxi-number a b c d)
    (if (or (= a b) (= a c) (= a d)
            (not (= (+ (cube a) (cube b))
                    (+ (cube c) (cube d)))))
        #f #t))
  (define (taxi-iter a b c d)
    ;(display (list a b c d)) (newline)
    (if (is-taxi-number a b c d)
        (cons (list a b c d) (delay (apply taxi-iter (taxi-next a b c d))))
        (apply taxi-iter (taxi-next a b c d))))
  (define (taxi-next a b c d)
    (if (< (+ c 1) d) (list a b (+ c 1) d)
        (if (< (+ d 1) b) (list a b (+ a 1) (+ d 1))
            (if (< (+ b 1) max) (list a (+ b 1) (+ a 1) (+ a 2))
                (if (> a max)
                    (begin
                      (set! max (+ max 50))
                      (list 1 a 2 3))
                    (list (+ a 1) (+ a 1) (+ a 2) (+ a 3))))))
  (taxi-iter 1 4 2 3)
  )

とりあえずこれで全部は求まりそうだけど、ソートはされないよなぁ・・・。

というか、begin とか使い出してる時点で負けって気がしないでもない。


うん、やらなきゃいけないアルゴリズムはわかってるはず。多分。

(a b) で、 a < b で、a**3+b**3 の小さい順を全て並べて、隣り合ったそいつらがtaxi-number かどうかをみればいい、と。はら先生があおきさんところで示しておられた東大のpdfに書いてあった奴そのままですけど。でも、Haskellが読めないのでどうやってるのか知りません(とか言う)。どうやってつくろーかなー。明日の授業中にでも考えてみよう。

_さかい(Sun May 11 15:49:24 JST 2003)

 gtk+は2なら標準でx11,win32,linuxfbに対応してます。あとDirectFBへの移植なんかもあります。

_ささだ(Mon May 12 19:57:36 JST 2003)

 知らない単語ばっかりです。ごめんなさい・・・。


好きなだけ長いコメントをどうぞ。

お名前


back

tton 記述が使えます。YukiWikiな記述してりゃ問題ありません。

「行頭に#code」 と、「行頭に#end」 で挟むと、その間の行は pre で囲まれます。プログラムのソースを書くときに使ってください。

例:

#code

(なんかプログラム書く)

#end

リンクは

[[なまえ|http://www.example.org]]

とか

[[http://www.example.org]]

で貼れます。

$Date: 2003/04/28 10:27:51 $