きしださんの問題
http://d.hatena.ne.jp/nowokay/20080717#1216294670
めちゃめちゃかっこわるいコードだけど、一応答えは出た。
(use srfi-1) (use util.combinations) (define (three-letters lst) (define (ok? lst) (if (null? (cdr lst)) #t (if (equal? (list (cadr (car lst)) (caddr (car lst))) (list (car (cadr lst)) (cadr (cadr lst)))) (ok? (cdr lst)) #f))) (define (shape-up lst) (append (map car lst) (cdr (car (reverse lst))))) (map shape-up (filter ok? (permutations lst)))) (define test-data '((A B A) (B A B) (A B C) (B C A) (C A B) (C A A) (A A B))) (define ng-data '((A B A) (B A B) (A B C) (C A B) (C A A) (A A B))) ;;(print (three-letters test-data)) ((C A B A B C A A B) (C A B C A A B A B) (C A A B A B C A B) (C A A B C A B A B)) ;;(print (three-letters ng-data)) ()
とりあえず無駄大杉
まともにやるなら、少しずつ木を作っていって、最後までたどりついたやつをピックアップする感じかな?