(50g) Boustrophedon Transform
03-20-2019, 07:21 PM (This post was last modified: 08-22-2021 04:47 PM by John Keith.)
Post: #1
 John Keith Senior Member Posts: 1,034 Joined: Dec 2013
(50g) Boustrophedon Transform
Related to this older thread, the following program implements the boustrophedon transform for a list of integers. Details here and here.

For example, given the list { 1 0 0 0 0 0 } the program will return the first 6 terms of A000111.

Code:
 \<< DUP SIZE \-> n   \<< DUP HEAD SWAP OVER 1. \->LIST 2. n     FOR k REVLIST OVER k GET :: + Scanl DUP Last NEWOB UNROT     NEXT DROP2 n \->LIST   \>> \>>

For the inverse transform, simply replace the + sign with a - sign.

The next program returns the triangle associated with the transformed sequence.

For example, given the same input list above, the program will return the first 6 rows of A008280.

Code:
 \<< DUP SIZE \-> a n   \<< a 1. 1. SUB 2. n     FOR k DUP a k GET       \<< +       \>> k 2. MOD { Scanr } { Scanl } IFTE     NEXT n \->LIST   \>> \>>

Both programs require GoferLists.
08-22-2021, 04:56 PM
Post: #2
 John Keith Senior Member Posts: 1,034 Joined: Dec 2013
RE: (50g) Boustrophedon Transform
Here is a version of the boustrophedon transform program for the HP48G/GX. As above, replacing the OVER + with OVER - will make the program return the inverse boustrophedon transform of the list.

Code:
 \<< DUP SIZE \-> n   \<< DUP HEAD SWAP OVER 1 \->LIST 2 n     FOR k REVLIST OVER k GET SWAP 1       \<< OVER +       \>> DOLIST + DUP k GET NEWOB ROT ROT     NEXT DROP2 n \->LIST   \>> \>>

Also, the HP 50g program in the first post has been replaced with a shorter version.
 « Next Oldest | Next Newest »

User(s) browsing this thread: 1 Guest(s)