Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-03-21

CLOSでL-99 (P13 ランレングス圧縮 その3)

| 19:59 | CLOSでL-99 (P13 ランレングス圧縮 その3) - わだばLisperになる を含むブックマーク はてなブックマーク - CLOSでL-99 (P13 ランレングス圧縮 その3) - わだばLisperになる

Qiと同じくencode-modifiedの解釈がP13の解釈になっていたので、修正しつつ解答。

パターンマッチングが使える場合、P13よりは、P11の方が面白いかもしれないと思いつつ、パターンマッチの道具としてCLOSを使うというのはやはり濫用だなな思いつつ(笑)

(encode-direct '(a a a a b c c a a d e e e e))
;=> ((4 A) B (2 C) (2 A) D (4 E))

(defgeneric encode-direct (lst)
  (:method ((lst null)) () )
  (:method ((lst cons))
    (let ((pack (pack lst)))
      (encode-direct1 (caar pack) (cdar pack) pack))))

(defgeneric encode-direct1 (head-item head-cdr lst)
  (:method (head-item head-cdr (lst null)) () )
  (:method (head-item (head-cdr null) (lst cons))
    (cons head-item (encode-direct1 (caadr lst) (cdadr lst) (cdr lst))))
  (:method (head-item head-cdr (lst cons))
    (cons `(,(length (cons head-item head-cdr)) ,head-item)
	  (encode-direct1 (caadr lst) (cdadr lst) (cdr lst)))))


(encode-modified '(a a a a b c c a a d e e e e))
;=> ((4 A) B (2 C) (2 A) D (4 E))

(defmethod encode-modified ((lst null))
  () )

(defmethod encode-modified (lst)
  (let ((lst (encode lst)))
    (encode-modified1 (caar lst) (cadar lst) lst)))

(defmethod encode-modified1 (head-num head-item (lst null)) 
  () )

(defmethod encode-modified1 ((head-num (eql 1)) head-item (lst cons))
  (cons head-item
        (let ((next-head (cadr lst)))
          (encode-modified1 (car next-head) (cadr next-head) (cdr lst)))))

(defmethod encode-modified1 (head-num head-item (lst cons))
  (cons (car lst)
	(let ((next-head (cadr lst)))
	  (encode-modified1 (car next-head) (cadr next-head) (cdr lst)))))

QiでL-99 (P13 ランレングス圧縮 その3)

| 02:52 | QiでL-99 (P13 ランレングス圧縮 その3) - わだばLisperになる を含むブックマーク はてなブックマーク - QiでL-99 (P13 ランレングス圧縮 その3) - わだばLisperになる

P10、P11、P13は続きものになっていて、P11はP10の結果を加工して解答するというもので、P13はP10を加工するのではなく直接リストを生成するという内容になっていますが、P11で直接リストを生成する方法で答えてしまいました(^^;

ということで、P11の名前を変更してP13として再掲載し、P11は新たに作り直してみました。

(encode-direct [a a a a b c c a a d e e e e])
\=>[[4 a] b [2 c] [2 a] d [4 e]]
\

(define encode-direct
    X -> (encode-direct* (pack X)))

(define encode-direct*
    [ ] -> [ ]
    [H | T] -> [(head H) | (encode-direct* T)] where (= 1 (length H))
    [H | T] -> [[(length H) (head H)] | (encode-direct* T)])


(encode-modified [a a a a b c c a a d e e e e])
\=>[[4 a] b [2 c] [2 a] d [4 e]]
\

(define encode-modified 
    X -> (encode-modified* (encode X)))

(define encode-modified*
    [ ] -> [ ]
    [[1 X] | T] -> [X | (encode-modified* T)]
    [H | T] -> [H | (encode-modified* T)])

ArcでL-99 (P40 ゴールドバッハ予想)

| 01:10 | ArcでL-99 (P40 ゴールドバッハ予想) - わだばLisperになる を含むブックマーク はてなブックマーク - ArcでL-99 (P40 ゴールドバッハ予想) - わだばLisperになる

Wikipediaによれば、一般的には、6以上の偶数は、2つの奇素数の和で表わすことができる、という予想らしいのですが、この問題では、2より大きい偶数は2つの素数の和で表わせる、という説明になっています。

ということで、一応お題の定義の方で作成してみました。

(goldbach 88888888888)
;=> (29 88888888859)

(def goldbach (n)
  (point RETURN
    (if (or odd.n (> 4 n))
        RETURN.nil
        ((afn (i)
           (let j (- n i)
             (when prime.j
               (RETURN:list i j)))
           (self next-prime.i))
         2)))))

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20080321