Hofstadter Figure-Figure sequences: Difference between revisions
Content added Content deleted
m (Math is math) |
({{header|Common Lisp}}) |
||
Line 19: | Line 19: | ||
* [http://mathworld.wolfram.com/HofstadterFigure-FigureSequence.html Wolfram Mathworld] |
* [http://mathworld.wolfram.com/HofstadterFigure-FigureSequence.html Wolfram Mathworld] |
||
* Wikipedia: [[wp:Hofstadter_sequence#Hofstadter_Figure-Figure_sequences|Hofstadter Figure-Figure sequences]]. |
* 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}}== |
=={{header|Python}}== |