aboutsummaryrefslogtreecommitdiff
path: root/challenge-133/abigail/pascal
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-11-26 00:08:20 +0100
committerAbigail <abigail@abigail.be>2021-11-27 14:30:25 +0100
commit2e7a94b0d7ffd661bc2ead718e2aac99f1de68d2 (patch)
tree6a6474a4c0b8567a5db4ea0fe1888b70aa80cf48 /challenge-133/abigail/pascal
parenta0298e354570ba3ebf90abaeaf9f2af3b58702e7 (diff)
downloadperlweeklychallenge-club-2e7a94b0d7ffd661bc2ead718e2aac99f1de68d2.tar.gz
perlweeklychallenge-club-2e7a94b0d7ffd661bc2ead718e2aac99f1de68d2.tar.bz2
perlweeklychallenge-club-2e7a94b0d7ffd661bc2ead718e2aac99f1de68d2.zip
More solutions for week 133
Diffstat (limited to 'challenge-133/abigail/pascal')
-rw-r--r--challenge-133/abigail/pascal/ch-2.p78
1 files changed, 78 insertions, 0 deletions
diff --git a/challenge-133/abigail/pascal/ch-2.p b/challenge-133/abigail/pascal/ch-2.p
new file mode 100644
index 0000000000..00b8d55b85
--- /dev/null
+++ b/challenge-133/abigail/pascal/ch-2.p
@@ -0,0 +1,78 @@
+Program ch2;
+
+(* *)
+(* See ../README.md *)
+(* *)
+
+(* *)
+(* Run as: fpc -och-2.out ch-2.p; ./ch-2.out < input-file *)
+(* *)
+
+type
+ factor_type = array of Integer;
+
+const
+ small_primes: Array of Integer =
+ (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31);
+ base = 10;
+ count = 10;
+
+function factors (number: Integer): factor_type;
+ var
+ out: factor_type = ();
+ index, prime: Integer;
+ i: Integer = 0;
+
+ begin
+ for index := 0 to length (small_primes) - 1 do begin
+ prime := small_primes [index];
+ while number mod prime = 0 do begin
+ setlength (out, i + 1);
+ out [i] := prime;
+ i := i + 1;
+ number := number div prime;
+ end;
+ end;
+ if number > 1 then begin
+ setlength (out, i + 1);
+ out [i] := number;
+ end;
+
+ factors := out;
+ end;
+
+
+function digitsum (numbers: Array of Integer): Integer;
+ var
+ sum: integer = 0;
+ i, number: integer;
+
+ begin
+ for i := 0 to length (numbers) - 1 do begin
+ number := numbers [i];
+ while number > 0 do begin
+ sum := sum + (number mod base);
+ number := number div base;
+ end
+ end;
+
+ digitsum := sum;
+ end;
+
+var
+ ff: factor_type;
+ nn: array [0 .. 0] of integer;
+ c: integer = count;
+ n: integer = 1;
+
+begin
+ while c > 0 do begin
+ inc (n);
+ ff := factors (n);
+ nn [0] := n;
+ if (length (ff) > 1) and (digitsum (nn) = digitsum (ff)) then begin
+ writeln (n);
+ dec (c);
+ end
+ end
+end.