疲れたらリスト操作で遊ぶ L99
なれない会社でぐったりです。
今は耐える。
仕事で見なきゃいけないソリューションがvssで管理されているらしい。
そういえばそんなのあったな。
そりゃ使うか。。。そうか。。。vssか。。。
会社でMSプロダクトばかり使っているとLispがやりたくなる。
でもヘトヘトだからそんなに時間はとれない。眠いんです。
なのでここ数日ちょびちょびL99をやってました。
http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html
1、2問ならすぐ終わるから寝る前のパズルとしては最適。
まだ序盤だからいいけど難しくなってきたら厳しいんだろうな。
今で10問めまでクリア。
;;P01 (defun my-last (lst) (and lst (list (car (reverse lst))))) ;;P02 (defun my-last-but (lst) (and lst (let ((len (length lst))) (if (<= len 2) lst (subseq lst (- len 2) len))))) ;;P03 (defun my-nth (lst n) (and lst (if (= n 1) (car lst) (my-nth (rest lst) (1- n))))) ;;P04 (defun my-len (lst) (reduce #'(lambda (count e) (1+ count)) lst :initial-value 0)) ;;P05 (defun my-reverse (lst) (reduce #'(lambda (rvs e) (cons e rvs)) lst :initial-value nil)) ;;P06 (defun my-palindromep (lst) (let* ((cut-len (/ (1+ (length lst)) 2)) (a (subseq lst 0 cut-len)) (b (subseq (reverse lst) 0 cut-len))) (equal a b))) ;;P07 (defun my-flatten (lst) (and lst (if (atom (car lst)) (cons (car lst) (my-flatten (cdr lst))) (append (my-flatten (car lst)) (my-flatten (cdr lst)))))) ;;P08 (defun my-compress (lst) (reverse (reduce #'(lambda (result e) (if (equal (car result) e) result (cons e result))) lst :initial-value nil))) ;;P09 (defun my-pack (lst) (reverse (reduce #'(lambda (result e) (cond ((null result) (list (list e))) ((equal (car (car result)) e) (append (list (cons e (car result))) (rest result))) (t (append (list (list e)) result)))) lst :initial-value nil))) ;;P10 (defun my-encode (lst) (reverse (reduce #'(lambda (result e) (cond ((null result) (list (list 1 e))) ((equal (cadar result) e) (append (list (list (1+ (caar result)) (cadar result))) (rest result))) (t (append (list (list 1 e)) result)))) lst :initial-value nil)))