Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,34 @@
|
|||
(defun factorial (n)
|
||||
(loop for result = 1 then (* i result)
|
||||
for i from 2 to n
|
||||
finally (return result)))
|
||||
|
||||
(defun nth-permutation (k sequence)
|
||||
(if (zerop (length sequence))
|
||||
(coerce () (type-of sequence))
|
||||
(let ((seq (etypecase sequence
|
||||
(vector (copy-seq sequence))
|
||||
(sequence (coerce sequence 'vector)))))
|
||||
(loop for j from 2 to (length seq)
|
||||
do (setq k (truncate (/ k (1- j))))
|
||||
do (rotatef (aref seq (mod k j))
|
||||
(aref seq (1- j)))
|
||||
finally (return (coerce seq (type-of sequence)))))))
|
||||
|
||||
(defun sortedp (fn sequence)
|
||||
(etypecase sequence
|
||||
(list (loop for previous = #1='#:foo then i
|
||||
for i in sequence
|
||||
always (or (eq previous #1#)
|
||||
(funcall fn i previous))))
|
||||
;; copypasta
|
||||
(vector (loop for previous = #1# then i
|
||||
for i across sequence
|
||||
always (or (eq previous #1#)
|
||||
(funcall fn i previous))))))
|
||||
|
||||
(defun permutation-sort (fn sequence)
|
||||
(loop for i below (factorial (length sequence))
|
||||
for permutation = (nth-permutation i sequence)
|
||||
when (sortedp fn permutation)
|
||||
do (return permutation)))
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
CL-USER> (time (permutation-sort #'> '(8 3 10 6 1 9 7 2 5 4)))
|
||||
Evaluation took:
|
||||
5.292 seconds of real time
|
||||
5.204325 seconds of total run time (5.176323 user, 0.028002 system)
|
||||
[ Run times consist of 0.160 seconds GC time, and 5.045 seconds non-GC time. ]
|
||||
98.34% CPU
|
||||
12,337,938,025 processor cycles
|
||||
611,094,240 bytes consed
|
||||
|
||||
(1 2 3 4 5 6 7 8 9 10)
|
||||
Loading…
Add table
Add a link
Reference in a new issue