|
| From: | Tobia Conforto |
| Subject: | [Chicken-users] Re: Chase's Sequence - syntax fixes, examples, anagram index |
| Date: | Tue, 18 Dec 2007 10:57:35 +0100 |
| User-agent: | Mutt/1.5.17 (2007-11-01) |
metaperl.j wrote:
> My goal is to be able to return a unique whole number indicating which
> permutation of n items was input.
You mean something like this?
>-----------------------------------------------------------------------
(use srfi-1)
;; why is this not in srfi-1
(define (position item lst)
(list-index (lambda (x) (equal? x item)) lst))
(define (permutation-index permuted original)
(let loop ((sum 0)
(perm permuted)
(orig original)
(radix (length permuted)))
(if (null? perm)
sum
(let ((elem (car perm)))
(loop (+ (* radix sum)
(position elem orig))
(cdr perm)
(delete elem orig)
(- radix 1))))))
(define (anagram-index anagram)
(let ((original (sort anagram <)))
(permutation-index anagram original)))
(anagram-index '(1 2 3)) ;=> 0
(anagram-index '(1 3 2)) ;=> 1
(anagram-index '(2 1 3)) ;=> 2
(anagram-index '(2 3 1)) ;=> 3
(anagram-index '(3 1 2)) ;=> 4
(anagram-index '(3 2 1)) ;=> 5
>-----------------------------------------------------------------------
See http://en.wikipedia.org/wiki/Factoradic for info on how it works.
Tobia
| [Prev in Thread] | Current Thread | [Next in Thread] |