(48G,50g) ConvOffs Transform - Printable Version +- HP Forums (https://www.hpmuseum.org/forum) +-- Forum: HP Software Libraries (/forum-10.html) +--- Forum: General Software Library (/forum-13.html) +--- Thread: (48G,50g) ConvOffs Transform (/thread-12514.html) (48G,50g) ConvOffs Transform - John Keith - 02-27-2019 02:22 PM These strangely named integer transforms are generalizations of the method used to create Pascal's triangle and similar number triangles. More information in this thread. The first program takes a list of integers and returns the transformed list, which will be one term longer than the input list. Updated 1/20/2020 with a shorter and faster version using DOLIST. Code: ``` \<< DUP SIZE   IF DUP 1. >   THEN     IF DUP 3. >     THEN DUP 2. / IP SWAP 1. + 2. / IP     ELSE 0.     END \-> m t     \<< 1 SWAP DUP 1. m SUB SWAP REVLIST 1. m SUB 2.       \<< PICK3 * SWAP /       \>> DOLIST + DUP 1. t SUB REVLIST +     \>>   ELSE 1. SAME { HEAD DUP 2. \->LIST } { DROP { 1 } } IFTE   END \>>``` For example, given the input list { 1 2 3 4 5 } the program will return row 5 of Pascal's triangle. The next program implements the ConvOffsStoT transform. It calls the program above. This program is basically the same but returns a list of lists which are transforms of sublists of the input list. Given a list of length n, the program will return lists of length 1 through n+1. Code: ``` \<< DUP SIZE \-> n   \<< 0. n     FOR k DUP 1. k SUB ConvOffs SWAP     NEXT DROP n 1. + \->LIST   \>> \>>``` As an example, with an input list of { 1 2 3 4 5 } the program will return the first 6 rows (rows 0 through 5) of Pascals triangle.