How to resolve the algorithm 9 billion names of God the integer step by step in the jq programming language

Published on 12 May 2024 09:40 PM
#Jq

How to resolve the algorithm 9 billion names of God the integer step by step in the jq 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 jq programming language

Source code in the jq programming language

def cumu:
  . as $n
  | reduce range(1; $n+1) as $l ( {cache: [[1]]};
      .r = [0]
      | reduce range(1; $l+1) as $x (.;
          .min = $l - $x
          | if ($x < .min) then .min = $x else . end
          | .r = .r + [.r[-1] + .cache[$l - $x][.min] ] )
      | .cache = .cache + [.r] )
  | .cache[$n] ;

def row:
  cumu as $r
  | reduce range(0; .) as $i ([]; . + [$r[$i+1] - $r[$i]] );

def task:
  "Rows:",
  (range(1; 26) |  [ ., row]),
  "\nSums:",
  ( (23, 123, 1234)   #  12345 is a stretch for memory even using wren
   | [., cumu[-1]] ) ;

  

You may also check:How to resolve the algorithm Average loop length step by step in the Phix programming language
You may also check:How to resolve the algorithm Tokenize a string step by step in the Rust programming language
You may also check:How to resolve the algorithm Sorting algorithms/Comb sort step by step in the Io programming language
You may also check:How to resolve the algorithm Two's complement step by step in the XPL0 programming language
You may also check:How to resolve the algorithm Hello world/Text step by step in the Burlesque programming language