aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-11-25 22:25:31 +0100
committerAbigail <abigail@abigail.be>2021-11-25 22:25:31 +0100
commit42e47a01eea6770846b143077a263492cdc6e118 (patch)
tree94e4ba231b7dd32fea4eee77b905f80a05e16728
parent58b259534ee762f74e7cbb460c6287a07764a68f (diff)
downloadperlweeklychallenge-club-42e47a01eea6770846b143077a263492cdc6e118.tar.gz
perlweeklychallenge-club-42e47a01eea6770846b143077a263492cdc6e118.tar.bz2
perlweeklychallenge-club-42e47a01eea6770846b143077a263492cdc6e118.zip
Pascal solution for week 135, part 2
-rw-r--r--challenge-135/abigail/README.md1
-rw-r--r--challenge-135/abigail/pascal/ch-2.p56
2 files changed, 57 insertions, 0 deletions
diff --git a/challenge-135/abigail/README.md b/challenge-135/abigail/README.md
index fa5d529ec2..00e67bfcb0 100644
--- a/challenge-135/abigail/README.md
+++ b/challenge-135/abigail/README.md
@@ -28,6 +28,7 @@
* [Lua](lua/ch-2.lua)
* [Node.js](node/ch-2.js)
* [Perl](perl/ch-2.pl)
+* [Pascal](pascal/ch-2.p)
* [Python](python/ch-2.py)
* [R](r/ch-2.r)
* [Ruby](ruby/ch-2.rb)
diff --git a/challenge-135/abigail/pascal/ch-2.p b/challenge-135/abigail/pascal/ch-2.p
new file mode 100644
index 0000000000..a6abd97b4b
--- /dev/null
+++ b/challenge-135/abigail/pascal/ch-2.p
@@ -0,0 +1,56 @@
+Program XXX;
+
+(* *)
+(* See ../README.md *)
+(* *)
+
+(* *)
+(* Run as: fpc -och-2.out ch-2.p; ./ch-2.out < input-file *)
+(* *)
+
+uses
+ RegExpr;
+
+const
+ ord_0 = Ord ('0');
+ ord_9 = Ord ('9');
+ ord_A = Ord ('A');
+ w : Array [0 .. 6] of Integer = (1, 3, 1, 7, 3, 9, 1);
+
+var
+ sedol: String;
+ valid: TRegExpr;
+ check: Integer;
+ c: Char;
+ val: Integer;
+ index: Integer;
+
+begin
+ valid := TRegExpr . Create ('^[0-9BCDFGHJKLMNPQRSTVWXYZ]{6}[0-9]$');
+ while not eof do begin
+ readln (sedol);
+ if not valid . Exec (sedol) then begin
+ writeln (0);
+ continue;
+ end;
+ check := 0;
+ index := 0;
+ for c in sedol do begin
+ val := Ord (c);
+ if val <= ord_9 then begin
+ val := val - ord_0;
+ end
+ else begin
+ val := val - ord_A;
+ end;
+ check := check + val * w [index];
+ inc (index);
+ end;
+ if check mod 10 = 0 then begin
+ writeln (1);
+ end
+ else begin
+ writeln (0);
+ end
+ end
+end.