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

Published on 12 May 2024 09:40 PM
#D

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

Source code in the d programming language

import std.stdio, std.bigint, std.algorithm, std.range;

auto cumu(in uint n) {
    __gshared cache = [[1.BigInt]];
    foreach (l; cache.length .. n + 1) {
        auto r = [0.BigInt];
        foreach (x; 1 .. l + 1)
            r ~= r.back + cache[l - x][min(x, l - x)];
        cache ~= r;
    }
    return cache[n];
}

auto row(in uint n) {
    auto r = n.cumu;
    return n.iota.map!(i => r[i + 1] - r[i]);
}

void main() {
    writeln("Rows:");
    foreach (x; 1 .. 11)
        writefln("%2d: %s", x, x.row);

    writeln("\nSums:");
    foreach (x; [23, 123, 1234])
        writeln(x, " ", x.cumu.back);
}


import std.stdio, std.bigint, std.algorithm;

struct Names {
    BigInt[] p = [1.BigInt];

    int opApply(int delegate(ref immutable int, ref BigInt) dg) {
        int result;

        foreach (immutable n; 1 .. int.max) {
            p.assumeSafeAppend;
            p ~= 0.BigInt;

            foreach (immutable k; 1 .. n + 1) {
                auto d = n - k * (3 * k - 1) / 2;
                if (d < 0)
                    break;

                if (k & 1)
                    p[n] += p[d];
                else
                    p[n] -= p[d];

                d -= k;
                if (d < 0)
                    break;

                if (k & 1)
                    p[n] += p[d];
                else
                    p[n] -= p[d];
            }

            result = dg(n, p[n]);
            if (result) break;
        }

        return result;
    }
}

void main() {
    immutable ns = [23:0, 123:0, 1234:0, 12345:0];
    immutable maxNs = ns.byKey.reduce!max;

    foreach (immutable i, p; Names()) {
        if (i > maxNs)
            break;
        if (i in ns)
            writefln("%6d: %s", i, p);
    }
}


  

You may also check:How to resolve the algorithm Cyclops numbers step by step in the AppleScript programming language
You may also check:How to resolve the algorithm Calculating the value of e step by step in the Python programming language
You may also check:How to resolve the algorithm Hofstadter Figure-Figure sequences step by step in the Perl programming language
You may also check:How to resolve the algorithm Narcissistic decimal number step by step in the jq programming language
You may also check:How to resolve the algorithm Perlin noise step by step in the OCaml programming language