How to resolve the algorithm 9 billion names of God the integer step by step in the Factor programming language
How to resolve the algorithm 9 billion names of God the integer step by step in the Factor programming language
Table of Contents
Problem Statement
This task is a variation of the short story by Arthur C. Clarke. (Solvers should be aware of the consequences of completing this task.) In detail, to specify what is meant by a “name”:
Display the first 25 rows of a number triangle which begins: Where row
n
{\displaystyle n}
corresponds to integer
n
{\displaystyle n}
, and each column
C
{\displaystyle C}
in row
m
{\displaystyle m}
from left to right corresponds to the number of names beginning with
C
{\displaystyle C}
. A function
G ( n )
{\displaystyle G(n)}
should return the sum of the
n
{\displaystyle n}
-th row. Demonstrate this function by displaying:
G ( 23 )
{\displaystyle G(23)}
,
G ( 123 )
{\displaystyle G(123)}
,
G ( 1234 )
{\displaystyle G(1234)}
, and
G ( 12345 )
{\displaystyle G(12345)}
.
Optionally note that the sum of the
n
{\displaystyle n}
-th row
P ( n )
{\displaystyle P(n)}
is the integer partition function. Demonstrate this is equivalent to
G ( n )
{\displaystyle G(n)}
by displaying:
P ( 23 )
{\displaystyle P(23)}
,
P ( 123 )
{\displaystyle P(123)}
,
P ( 1234 )
{\displaystyle P(1234)}
, and
P ( 12345 )
{\displaystyle P(12345)}
.
If your environment is able, plot
P ( n )
{\displaystyle P(n)}
against
n
{\displaystyle n}
for
n
1 … 999
{\displaystyle n=1\ldots 999}
.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm 9 billion names of God the integer step by step in the Factor programming language
Source code in the factor programming language
USING: combinators io kernel math math.ranges memoize prettyprint
sequences ;
MEMO: p ( m n -- o )
{
{ [ dup zero? ] [ nip ] }
{ [ 2dup = ] [ 2drop 1 ] }
{ [ 2dup < ] [ 2drop 0 ] }
[ [ [ 1 - ] bi@ p ] [ [ - ] [ ] bi p + ] 2bi ]
} cond ;
: row ( n -- seq ) dup [1,b] [ p ] with map ;
: .row ( n -- ) row [ pprint bl ] each nl ;
: .triangle ( n -- ) [1,b] [ .row ] each ;
: G ( n -- sum ) row sum ;
25 .triangle nl
"Sums:" print { 23 123 1234 12345 } [ dup pprint bl G . ] each
You may also check:How to resolve the algorithm Leap year step by step in the F# programming language
You may also check:How to resolve the algorithm Maze solving step by step in the PicoLisp programming language
You may also check:How to resolve the algorithm Look-and-say sequence step by step in the EasyLang programming language
You may also check:How to resolve the algorithm Gaussian elimination step by step in the Ada programming language
You may also check:How to resolve the algorithm N'th step by step in the C programming language