On Wednesday, 26 January 2022 at 18:00:41 UTC, Ali Çehreli wrote:
For completeness (and noise :/) here is the final version of the program:
Could you also try the following code with the same configurations?
```d struct LongScale { struct ShortStack { short[] stack; size_t index; @property back() { return this.stack[0]; } @property push(short data) { this.stack ~= data; this.index++; } @property pop() { return this.stack[--this.index]; } } ShortStack stack; this(long i) { long s, t = i; for(long e = 3; e <= 18; e += 3) { s = 10^^e; stack.push = cast(short)((t % s) / (s/1000L)); t -= t % s; } stack.push = cast(short)(t / s); } string toString() { string[] scale = [" zero", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion"]; string r; for(long e = 6; e > 0; e--) { auto t = stack.pop; r ~= t > 1 ? " " ~to!string(t) : t ? " one" : ""; r ~= t ? " " ~scale[e] : ""; } r ~= stack.back ? " " ~to!string(stack.back) : ""; return r.length ? r : scale[0]; } } import std.conv, std.stdio; void main() { long[] inputs = [ 741, 1_500, 2_001, 5_005, 1_250_000, 3_000_042, 10_000_000, 1_000_000, 2_000_000, 100_000, 200_000, 10_000, 20_000, 1_000, 2_000, 74, 7, 0, 1_999_999_999_999]; foreach(long i; inputs) { auto OUT = LongScale(i); auto STR = OUT.toString[1..$]; writefln!"%s"(STR); } } ```