Hofstadter Figure-Figure sequences: Difference between revisions

{{header|Common Lisp}}
m (Math is math)
({{header|Common Lisp}})
Line 19:
* [http://mathworld.wolfram.com/HofstadterFigure-FigureSequence.html Wolfram Mathworld]
* Wikipedia: [[wp:Hofstadter_sequence#Hofstadter_Figure-Figure_sequences|Hofstadter Figure-Figure sequences]].
 
=={{header|Common Lisp}}==
;;; equally doable with a list
<lang lisp>(flet ((seq (i) (make-array 1 :element-type 'integer
:initial-element i
:fill-pointer 1
:adjustable t)))
(let ((rr (seq 1)) (ss (seq 2)))
(flet ((extend-r ()
(let* ((l (1- (length rr)))
(r (+ (aref rr l) (aref ss l)))
(s (aref ss (1- (length ss)))))
(vector-push-extend r rr)
(loop while (<= s r) do
(if (/= (incf s) r)
(vector-push-extend s ss))))))
(defun seq-r (n)
(loop while (> n (length rr)) do (extend-r))
(aref rr (1- n)))
 
(defun seq-s (n)
(loop while (> n (length ss)) do (extend-r))
(aref ss (1- n))))))
 
(format t "First of R: ~a~%"
(loop for i from 1 to 10 collect (seq-r i)))
 
(mapl (lambda (l) (if (and (cdr l)
(/= (1+ (car l)) (cadr l)))
(error "not in sequence")))
(sort (append (loop for i from 1 to 40 collect (seq-r i))
(loop for i from 1 to 960 collect (seq-s i)))
#'<))
;; if we reached here, the first 1000 numbers were in sequence
(princ "Ok")</lang>output<lang>First of R: (1 3 7 12 18 26 35 45 56 69)
Ok</lang>
 
=={{header|Python}}==
Anonymous user