aboutsummaryrefslogtreecommitdiff
path: root/challenge-138
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-11-14 18:20:37 +0000
committerGitHub <noreply@github.com>2021-11-14 18:20:37 +0000
commit415f63ec02f2f662597344fac4496e39393f92ff (patch)
treebfca349a7b95244ea5b6ed87c6cf0cbc90b26a7a /challenge-138
parentcd4ee69e6e59e7f6db4a40bc1102db61643bc525 (diff)
parent5049c688283ac6acb3c32bcd74411073cc529cfe (diff)
downloadperlweeklychallenge-club-415f63ec02f2f662597344fac4496e39393f92ff.tar.gz
perlweeklychallenge-club-415f63ec02f2f662597344fac4496e39393f92ff.tar.bz2
perlweeklychallenge-club-415f63ec02f2f662597344fac4496e39393f92ff.zip
Merge pull request #5212 from Abigail/abigail/week-138
Abigail/week 138
Diffstat (limited to 'challenge-138')
-rw-r--r--challenge-138/abigail/README.md8
-rw-r--r--challenge-138/abigail/awk/ch-1.awk39
-rw-r--r--challenge-138/abigail/awk/ch-2.awk29
-rw-r--r--challenge-138/abigail/bash/ch-1.sh41
-rw-r--r--challenge-138/abigail/bash/ch-2.sh51
-rw-r--r--challenge-138/abigail/bc/ch-1.bc55
-rw-r--r--challenge-138/abigail/c/ch-1.c43
-rw-r--r--challenge-138/abigail/c/ch-2.c39
-rw-r--r--challenge-138/abigail/go/ch-1.go52
-rw-r--r--challenge-138/abigail/go/ch-2.go46
-rw-r--r--challenge-138/abigail/java/ch-1.java47
-rw-r--r--challenge-138/abigail/java/ch-2.java42
-rw-r--r--challenge-138/abigail/lua/ch-1.lua44
-rw-r--r--challenge-138/abigail/lua/ch-2.lua40
-rw-r--r--challenge-138/abigail/node/ch-1.js44
-rw-r--r--challenge-138/abigail/node/ch-2.js34
-rw-r--r--challenge-138/abigail/pascal/ch-1.p58
-rw-r--r--challenge-138/abigail/pascal/ch-2.p51
-rw-r--r--challenge-138/abigail/perl/ch-1.pl89
-rw-r--r--challenge-138/abigail/perl/ch-2.pl63
-rw-r--r--challenge-138/abigail/python/ch-1.py40
-rw-r--r--challenge-138/abigail/python/ch-2.py34
-rw-r--r--challenge-138/abigail/r/ch-1.r46
-rw-r--r--challenge-138/abigail/r/ch-2.r41
-rw-r--r--challenge-138/abigail/ruby/ch-1.rb41
-rw-r--r--challenge-138/abigail/ruby/ch-2.rb39
-rw-r--r--challenge-138/abigail/scheme/ch-1.scm49
-rw-r--r--challenge-138/abigail/scheme/ch-2.scm40
-rw-r--r--challenge-138/abigail/t/ctest.ini12
-rw-r--r--challenge-138/abigail/t/input-1-12
-rw-r--r--challenge-138/abigail/t/input-2-13
-rw-r--r--challenge-138/abigail/t/output-1-1.exp2
-rw-r--r--challenge-138/abigail/t/output-2-1.exp3
-rw-r--r--challenge-138/abigail/tcl/ch-1.tcl38
-rw-r--r--challenge-138/abigail/tcl/ch-2.tcl34
35 files changed, 1333 insertions, 6 deletions
diff --git a/challenge-138/abigail/README.md b/challenge-138/abigail/README.md
index 6af7507c57..bb2b1dda43 100644
--- a/challenge-138/abigail/README.md
+++ b/challenge-138/abigail/README.md
@@ -10,13 +10,9 @@
* [Go](go/ch-1.go)
* [Java](java/ch-1.java)
* [Lua](lua/ch-1.lua)
-* Node.js
- * [Using look-up](node/ch-1.js)
- * [Using Doomsday values](node/ch-1a.js)
+* [Node.js](node/ch-1.js)
* [Pascal](pascal/ch-1.p)
-* Perl
- * [Using look-up](perl/ch-1.pl)
- * [Using Doomsday values](perl/ch-1a.pl)
+* [Perl](perl/ch-1.pl)
* [Python](python/ch-1.py)
* [R](r/ch-1.r)
* [Ruby](ruby/ch-1.rb)
diff --git a/challenge-138/abigail/awk/ch-1.awk b/challenge-138/abigail/awk/ch-1.awk
new file mode 100644
index 0000000000..b60e858f5e
--- /dev/null
+++ b/challenge-138/abigail/awk/ch-1.awk
@@ -0,0 +1,39 @@
+#!/usr/bin/awk
+
+#
+# See ../README.md
+#
+
+#
+# Run as: awk -f ch-1.awk < input-file
+#
+
+BEGIN {
+ split ("261 261 260 260 261 261 261 262 262 261 260 261 262 262", \
+ lookup, " ")
+ SUNDAY = 0
+ MONDAY = 1
+ TUESDAY = 2
+ WEDNESDAY = 3
+ THURSDAY = 4
+ FRIDAY = 5
+ SATURDAY = 6
+}
+
+function doomsday (year, anchor, x, y) {
+ x = int (year / 100) % 4
+ anchor = x == 0 ? TUESDAY \
+ : x == 1 ? SUNDAY \
+ : x == 2 ? FRIDAY \
+ : WEDNESDAY
+ y = year % 100;
+ return ((int (y / 12) + (y % 12) + int ((y % 12) / 4)) + anchor) % 7
+}
+
+function is_leap (year) {
+ return (year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0) ? 1 : 0
+}
+
+{
+ print (lookup [1 + 7 * is_leap($1) + doomsday($1)])
+}
diff --git a/challenge-138/abigail/awk/ch-2.awk b/challenge-138/abigail/awk/ch-2.awk
new file mode 100644
index 0000000000..b0fca5ffc4
--- /dev/null
+++ b/challenge-138/abigail/awk/ch-2.awk
@@ -0,0 +1,29 @@
+#!/usr/bin/awk
+
+#
+# See ../README.md
+#
+
+#
+# Run as: awk -f ch-2.awk < input-file
+#
+
+function can_split (target, number, pow_10) {
+ if (target > number || target < 0) {return 0}
+ if (target == number) {return 1}
+
+ pow_10 = 10
+
+ while (pow_10 <= number) {
+ if (can_split(target - (number % pow_10), int (number / pow_10))) {
+ return 1
+ }
+ pow_10 *= 10
+ }
+
+ return 0
+}
+
+{
+ print ($1 > 1 && can_split(sqrt ($1), $1) ? 1 : 0)
+}
diff --git a/challenge-138/abigail/bash/ch-1.sh b/challenge-138/abigail/bash/ch-1.sh
new file mode 100644
index 0000000000..982392620d
--- /dev/null
+++ b/challenge-138/abigail/bash/ch-1.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+#
+# See ../README.md
+#
+
+#
+# Run as: bash ch-1.sh < input-file
+#
+
+set -f
+
+SUNDAY=0
+MONDAY=1
+TUESDAY=2
+WEDNESDAY=3
+THURSDAY=4
+FRIDAY=5
+SATURDAY=6
+
+LOOKUP=(261 261 260 260 261 261 261 262 262 261 260 261 262 262)
+DDVALS=($TUESDAY $SUNDAY $FRIDAY $WEDNESDAY)
+
+function doomsday () {
+ local year=$1
+ local anchor=${DDVALS[$(((year / 100) % 4))]}
+ local y=$((year % 100))
+ doomsday=$((((y / 12) + (y % 12) + ((y % 12) / 4) + anchor) % 7))
+}
+
+function is_leap () {
+ local year=$1
+ is_leap=$(((year % 400 == 0) ||
+ (year % 4 == 0) && (year % 100 != 0) ? 1 : 0))
+}
+
+while read year
+do doomsday $year
+ is_leap $year
+ echo ${LOOKUP[$((7 * $is_leap + $doomsday))]}
+done
diff --git a/challenge-138/abigail/bash/ch-2.sh b/challenge-138/abigail/bash/ch-2.sh
new file mode 100644
index 0000000000..f8de32c814
--- /dev/null
+++ b/challenge-138/abigail/bash/ch-2.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+#
+# See ../README.md
+#
+
+#
+# Run as: bash ch-2.sh < input-file
+#
+
+set -f
+
+function can_split () {
+ local target=$1
+ local number=$2
+
+ if ((target > number))
+ then can_split=0; return
+ fi
+ if ((target < 0))
+ then can_split=0; return
+ fi
+ if ((target == number))
+ then can_split=1; return
+ fi
+
+ local pow_10=10
+
+ while ((pow_10 <= number))
+ do can_split $((target - (number % pow_10))) $((number / pow_10))
+ if ((can_split == 1))
+ then return
+ fi
+ ((pow_10 *= 10))
+ done
+
+ can_split=0
+}
+
+
+while read num
+do sqrt=$(echo "sqrt($num)" | bc)
+ if ((num > 1))
+ then can_split $sqrt $num
+ if ((can_split == 1))
+ then echo 1
+ else echo 0
+ fi
+ else echo 0
+ fi
+done
diff --git a/challenge-138/abigail/bc/ch-1.bc b/challenge-138/abigail/bc/ch-1.bc
new file mode 100644
index 0000000000..454cb60728
--- /dev/null
+++ b/challenge-138/abigail/bc/ch-1.bc
@@ -0,0 +1,55 @@
+#
+# See ../README.md
+#
+
+#
+# Run as: bc ch-1.bc < input-file
+#
+
+sunday = 0
+monday = 1
+tuesday = 2
+wednesday = 3
+thursday = 4
+friday = 5
+saturday = 6
+
+lookup [ 0] = 261
+lookup [ 1] = 261
+lookup [ 2] = 260
+lookup [ 3] = 260
+lookup [ 4] = 261
+lookup [ 5] = 261
+lookup [ 6] = 261
+lookup [ 7] = 262
+lookup [ 8] = 262
+lookup [ 9] = 261
+lookup [10] = 260
+lookup [11] = 261
+lookup [12] = 262
+lookup [13] = 262
+
+anchor [ 0] = tuesday
+anchor [ 1] = sunday
+anchor [ 2] = friday
+anchor [ 3] = wednesday
+
+define doomsday (year) {
+ a = anchor [(year / 100) % 4]
+ y = year % 100
+ return (((y / 12) + (y % 12) + ((y % 12) / 4)) + a) % 7
+}
+
+define is_leap (year) {
+ if ((year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0)) {
+ return 1
+ } else {
+ return 0
+ }
+}
+
+
+while (1) {
+ year = read (); if (year == 0) {break}
+ lookup [7 * is_leap (year) + doomsday (year)]
+}
diff --git a/challenge-138/abigail/c/ch-1.c b/challenge-138/abigail/c/ch-1.c
new file mode 100644
index 0000000000..7883dc9a0f
--- /dev/null
+++ b/challenge-138/abigail/c/ch-1.c
@@ -0,0 +1,43 @@
+# include <stdlib.h>
+# include <stdio.h>
+# include <string.h>
+
+/*
+ * See ../README.md
+ */
+
+/*
+ * Run as: cc -o ch-1.o ch-1.c; ./ch-1.o < input-file
+ */
+
+# define SUNDAY 0
+# define MONDAY 1
+# define TUESDAY 2
+# define WEDNESDAY 3
+# define THURSDAY 4
+# define FRIDAY 5
+# define SATURDAY 6
+
+int lookup [] = {261, 261, 260, 260, 261, 261, 261,
+ 262, 262, 261, 260, 261, 262, 262};
+int anchors [] = {TUESDAY, SUNDAY, FRIDAY, WEDNESDAY};
+
+int doomsday (int year) {
+ int anchor = anchors [(year / 100) % 4];
+ int y = year % 100;
+ return (((y / 12) + (y % 12) + ((y % 12) / 4)) + anchor) % 7;
+}
+
+int is_leap (int year) {
+ return (year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)) ? 1 : 0;
+}
+
+int main (void) {
+ int year;
+
+ while (scanf ("%d", &year) == 1) {
+ printf ("%d\n", lookup [is_leap (year) * 7 + doomsday (year)]);
+ }
+
+ return (0);
+}
diff --git a/challenge-138/abigail/c/ch-2.c b/challenge-138/abigail/c/ch-2.c
new file mode 100644
index 0000000000..2b92934899
--- /dev/null
+++ b/challenge-138/abigail/c/ch-2.c
@@ -0,0 +1,39 @@
+# include <stdlib.h>
+# include <stdio.h>
+# include <string.h>
+# include <stdbool.h>
+# include <math.h>
+
+/*
+ * See ../README.md
+ */
+
+/*
+ * Run as: cc -o ch-2.o ch-2.c; ./ch-2.o < input-file
+ */
+
+bool can_split (long long target, long long number) {
+ if (target > number || target < 0) {return false;}
+ if (target == number) {return true;}
+
+ long long pow_10 = 10;
+
+ while (pow_10 <= number) {
+ if (can_split (target - (number % pow_10), number / pow_10)) {
+ return true;
+ }
+ pow_10 *= 10;
+ }
+
+ return false;
+}
+
+int main (void) {
+ long long number;
+
+ while (scanf ("%lld", &number) == 1) {
+ printf ("%d\n", number > 1 &&
+ can_split ((long long) sqrt (number), number) ? 1 : 0);
+ }
+ return (0);
+}
diff --git a/challenge-138/abigail/go/ch-1.go b/challenge-138/abigail/go/ch-1.go
new file mode 100644
index 0000000000..e86ea3fbb7
--- /dev/null
+++ b/challenge-138/abigail/go/ch-1.go
@@ -0,0 +1,52 @@
+package main
+
+//
+// See ../README.md
+//
+
+//
+// Run as: go run ch-1.go < input-file
+//
+
+import (
+ "fmt"
+)
+
+const SUNDAY = 0
+const MONDAY = 1
+const TUESDAY = 2
+const WEDNESDAY = 3
+const THURSDAY = 4
+const FRIDAY = 5
+const SATURDAY = 6
+
+var lookup = [2] [7] int {
+ {261, 261, 260, 260, 261, 261, 261},
+ {262, 262, 261, 260, 261, 262, 262},
+}
+
+var anchors = [4] int {TUESDAY, SUNDAY, FRIDAY, WEDNESDAY}
+
+func doomsday (year int) int {
+ anchor := anchors [(year / 100) % 4]
+ y := year % 100
+ return (((y / 12) + (y % 12) + ((y % 12) / 4)) + anchor) % 7
+}
+
+func is_leap (year int) int {
+ if (year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0) {
+ return 1
+ }
+ return 0
+}
+
+func main () {
+ for {
+ var year int
+ n, err := fmt . Scanf ("%d", &year)
+ if (n != 1 || err != nil) {
+ break
+ }
+ fmt . Println (lookup [is_leap (year)] [doomsday (year)])
+ }
+}
diff --git a/challenge-138/abigail/go/ch-2.go b/challenge-138/abigail/go/ch-2.go
new file mode 100644
index 0000000000..981efe77ee
--- /dev/null
+++ b/challenge-138/abigail/go/ch-2.go
@@ -0,0 +1,46 @@
+package main
+
+//
+// See ../README.md
+//
+
+//
+// Run as: go run ch-2.go < input-file
+//
+
+import (
+ "fmt"
+ "math"
+)
+
+func can_split (target int, number int) bool {
+ if target > number || target < 0 {return false}
+ if target == number {return true}
+
+ pow_10 := 10
+
+ for pow_10 <= number {
+ if can_split (target - (number % pow_10), number / pow_10) {
+ return true
+ }
+ pow_10 *= 10
+ }
+
+ return false
+}
+
+func main () {
+ for {
+ var number, sqrt int
+ n, err := fmt . Scanf ("%d", &number)
+ if (n != 1 || err != nil) {
+ break
+ }
+ sqrt = int (math . Round (math . Sqrt (float64 (number))))
+ if number > 1 && can_split (sqrt, number) {
+ fmt . Println (1)
+ } else {
+ fmt . Println (0)
+ }
+ }
+}
diff --git a/challenge-138/abigail/java/ch-1.java b/challenge-138/abigail/java/ch-1.java
new file mode 100644
index 0000000000..b4aff34076
--- /dev/null
+++ b/challenge-138/abigail/java/ch-1.java
@@ -0,0 +1,47 @@
+//
+// See ../README.md
+//
+
+//
+// Run as: ln ch-1.java ch1.java; javac ch1.java; java ch1 < input-file
+//
+
+import java.util.*;
+
+public class ch1 {
+ static int [] [] lookup = {
+ {261, 261, 260, 260, 261, 261, 261},
+ {262, 262, 261, 260, 261, 262, 262},
+ };
+
+ public static final int SUNDAY = 0;
+ public static final int MONDAY = 1;
+ public static final int TUESDAY = 2;
+ public static final int WEDNESDAY = 3;
+ public static final int THURSDAY = 4;
+ public static final int FRIDAY = 5;
+ public static final int SATURDAY = 6;
+
+ static int [] anchors = {TUESDAY, SUNDAY, FRIDAY, WEDNESDAY};
+
+ public static int doomsday (int year) {
+ int anchor = anchors [(year / 100) % 4];
+ int y = year % 100;
+ return (((y / 12) + (y % 12) + ((y % 12) / 4)) + anchor) % 7;
+ }
+
+ public static int is_leap (int year) {
+ if ((year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0)) {
+ return 1;
+ }
+ return 0;
+ }
+
+ public static void main (String [] args) {
+ Scanner scanner = new Scanner (System . in);
+ while (scanner . hasNextInt ()) {
+ int year = scanner . nextInt ();
+ System . out . println (lookup [is_leap (year)] [doomsday (year)]);
+ }
+ }
+}
diff --git a/challenge-138/abigail/java/ch-2.java b/challenge-138/abigail/java/ch-2.java
new file mode 100644
index 0000000000..065fd97f4f
--- /dev/null
+++ b/challenge-138/abigail/java/ch-2.java
@@ -0,0 +1,42 @@
+//
+// See ../README.md
+//
+
+//
+// Run as: ln ch-2.java ch2.java; javac ch2.java; java ch2 < input-file
+//
+
+import java.util.*;
+import java.lang.*;
+
+public class ch2 {
+ public static boolean can_split (long target, long number) {
+ if (target > number || target < 0) {return false;}
+ if (target == number) {return true;}
+
+ long pow_10 = 10;
+
+ while (pow_10 <= number) {
+ if (can_split (target - (number % pow_10), number / pow_10)) {
+ return true;
+ }
+ pow_10 *= 10;
+ }
+
+ return false;
+ }
+
+ public static void main (String [] args) {
+ Scanner scanner = new Scanner (System . in);
+ while (scanner . hasNextInt ()) {
+ int number = scanner . nextInt ();
+ int sqrt = (int) Math . round (Math . sqrt (number));
+ if (number > 1 && can_split (sqrt, number)) {
+ System . out . println (1);
+ }
+ else {
+ System . out . println (0);
+ }
+ }
+ }
+}
diff --git a/challenge-138/abigail/lua/ch-1.lua b/challenge-138/abigail/lua/ch-1.lua
new file mode 100644
index 0000000000..5f61cb3ec6
--- /dev/null
+++ b/challenge-138/abigail/lua/ch-1.lua
@@ -0,0 +1,44 @@
+#!/opt/local/bin/lua
+
+--
+-- See ../README.md
+--
+
+--
+-- Run as: lua ch-1.lua < input-file
+--
+
+local SUNDAY = 0
+local MONDAY = 1
+local TUESDAY = 2
+local WEDNESDAY = 3
+local THURSDAY = 4
+local FRIDAY = 5
+local SATURDAY = 6
+
+local lookup = {
+ {261, 261, 260, 260, 261, 261, 261},
+ {262, 262, 261, 260, 261, 262, 262},
+}
+
+local anchors = {TUESDAY, SUNDAY, FRIDAY, WEDNESDAY}
+
+function doomsday (year)
+ local anchor = anchors [1 + math . floor (year / 100) % 4]
+ local y = year % 100
+ return ((math . floor (y / 12) + (y % 12) + math . floor ((y % 12) / 4)) +
+ anchor) % 7
+end
+
+function is_leap (year)
+ if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 ~= 0)) then
+ return 1
+ end
+ return 0
+end
+
+
+for year in io . lines () do
+ year = tonumber (year)
+ print (lookup [1 + is_leap (year)] [1 + doomsday (year)])
+end
diff --git a/challenge-138/abigail/lua/ch-2.lua b/challenge-138/abigail/lua/ch-2.lua
new file mode 100644
index 0000000000..fa7fbe87b6
--- /dev/null
+++ b/challenge-138/abigail/lua/ch-2.lua
@@ -0,0 +1,40 @@
+#!/opt/local/bin/lua
+
+--
+-- See ../README.md
+--
+
+--
+-- Run as: lua ch-2.lua < input-file
+--
+
+function can_split (target, number)
+ if target > number or target < 0 then
+ return false
+ end
+ if target == number then
+ return true
+ end
+
+ local pow_10 = 10
+
+ while pow_10 <= number do
+ if can_split (target - (number % pow_10),
+ math . floor (number / pow_10)) then
+ return true
+ end
+ pow_10 = pow_10 * 10
+ end
+
+ return false
+end
+
+for number in io . lines () do
+ number = tonumber (number)
+ if number > 1 and
+ can_split (math . floor (math . sqrt (number)), number) then
+ print (1)
+ else
+ print (0)
+ end
+end
diff --git a/challenge-138/abigail/node/ch-1.js b/challenge-138/abigail/node/ch-1.js
new file mode 100644
index 0000000000..b969a761ef
--- /dev/null
+++ b/challenge-138/abigail/node/ch-1.js
@@ -0,0 +1,44 @@
+#!/usr/local/bin/node
+
+//
+// See ../README.md
+//
+
+//
+// Run as: node ch-1.js < input-file
+//
+
+let SUNDAY = 0
+let MONDAY = 1
+let TUESDAY = 2
+let WEDNESDAY = 3
+let THURSDAY = 4
+let FRIDAY = 5
+let SATURDAY = 6
+
+let lookup = [
+ [261, 261, 260, 260, 261, 261, 261],
+ [262, 262, 261, 260, 261, 262, 262],
+]
+
+function doomsday (year) {
+ let anchor = [TUESDAY, SUNDAY, FRIDAY, WEDNESDAY]
+ [Math . floor (year / 100) % 4]
+ let y = year % 100
+ let doomsday = ((Math . floor (y / 12) + (y % 12) +
+ Math . floor ((y % 12) / 4)) + anchor) % 7
+ return (doomsday)
+}
+
+//
+// Given a year, return whether it's a leap year or not
+//
+function is_leap (year) {
+ return ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0) ? 1 : 0)
+}
+
+ require ('readline')
+. createInterface ({input: process . stdin})
+. on ('line', year => {
+ console . log (lookup [is_leap (+year)] [doomsday (+year)])
+})
diff --git a/challenge-138/abigail/node/ch-2.js b/challenge-138/abigail/node/ch-2.js
new file mode 100644
index 0000000000..571e5ff5f2
--- /dev/null
+++ b/challenge-138/abigail/node/ch-2.js
@@ -0,0 +1,34 @@
+#!/usr/local/bin/node
+
+//
+// See ../README.md
+//
+
+//
+// Run as: node ch-2.js < input-file
+//
+
+function can_split (target, number) {
+ if (target > number || target < 0) {return false}
+ if (target == number) {return true}
+
+ let pow_10 = 10
+
+ while (pow_10 <= number) {
+ if (can_split (target - (number % pow_10),
+ Math . floor (number / pow_10))) {
+ return true
+ }
+ pow_10 *= 10
+ }
+
+ return false
+}
+
+
+ require ('readline')
+. createInterface ({input: process . stdin})
+. on ('line', number => {
+ console . log (number > 1 && can_split
+ (Math . trunc (Math . sqrt (number)), number) ? 1 : 0)
+})
diff --git a/challenge-138/abigail/pascal/ch-1.p b/challenge-138/abigail/pascal/ch-1.p
new file mode 100644
index 0000000000..594c76f307
--- /dev/null
+++ b/challenge-138/abigail/pascal/ch-1.p
@@ -0,0 +1,58 @@
+Program XXX;
+
+(* *)
+(* See ../README.md *)
+(* *)
+
+(* *)
+(* Run as: fpc -och-1.out ch-1.p; ./ch-1.out < input-file *)
+(* *)
+
+const
+ SUNDAY = 0;
+ MONDAY = 1;
+ TUESDAY = 2;
+ WEDNESDAY = 3;
+ THURSDAY = 4;
+ FRIDAY = 5;
+ SATURDAY = 6;
+
+var
+ anchors: Array [0 .. 3] of Integer = (
+ TUESDAY, SUNDAY, FRIDAY, WEDNESDAY
+ );
+ lookup: Array [0 .. 1, 0 .. 6] of Integer = (
+ (261, 261, 260, 260, 261, 261, 261),
+ (262, 262, 261, 260, 261, 262, 262)
+ );
+ year: Integer;
+
+
+function doomsday (year: Integer): Integer;
+ var
+ anchor, y: Integer;
+
+ begin
+ anchor := anchors [(year div 100) mod 4];
+ y := year mod 100;
+ doomsday := (((y div 12) + (y mod 12) +
+ ((y mod 12) div 4)) + anchor) mod 7;
+ end;
+
+function is_leap (year: Integer): Integer;
+ begin
+ if (year mod 400 = 0) or
+ ((year mod 4 = 0) and (year mod 100 <> 0)) then begin
+ is_leap := 1;
+ end
+ else begin
+ is_leap := 0;
+ end
+ end;
+
+begin
+ while not eof do begin
+ readln (year);
+ writeln (lookup [is_leap (year)] [doomsday (year)]);
+ end
+end.
diff --git a/challenge-138/abigail/pascal/ch-2.p b/challenge-138/abigail/pascal/ch-2.p
new file mode 100644
index 0000000000..cb5790803a
--- /dev/null
+++ b/challenge-138/abigail/pascal/ch-2.p
@@ -0,0 +1,51 @@
+Program ch2;
+
+(* *)
+(* See ../README.md *)
+(* *)
+
+(* *)
+(* Run as: fpc -och-2.out ch-2.p; ./ch-2.out < input-file *)
+(* *)
+
+function can_split (target: longint; number: longint): boolean;
+ var
+ pow_10: longint;
+ begin
+ if (target > number) or (target < 0) then begin
+ can_split := false;
+ exit;
+ end;
+ if (target = number) then begin
+ can_split := true;
+ exit;
+ end;
+
+ pow_10 := 10;
+
+ while pow_10 <= number do begin
+ if can_split (target - (number mod pow_10),
+ number div pow_10) then begin
+ can_split := true;
+ exit;
+ end;
+
+ pow_10 := pow_10 * 10;
+ end;
+
+ can_split := false;
+ exit;
+ end;
+
+var
+ number: longint;
+
+begin
+ while not eof do begin
+ readln (number);
+ if (number > 1) and can_split (round (sqrt (number)), number) then
+ writeln (1)
+ else
+ writeln (0)
+ end
+end.
diff --git a/challenge-138/abigail/perl/ch-1.pl b/challenge-138/abigail/perl/ch-1.pl
new file mode 100644
index 0000000000..eae1bea355
--- /dev/null
+++ b/challenge-138/abigail/perl/ch-1.pl
@@ -0,0 +1,89 @@
+#!/opt/perl/bin/perl
+
+use 5.028;
+
+use strict;
+use warnings;
+no warnings 'syntax';
+
+use experimental 'signatures';
+use experimental 'lexical_subs';
+
+#
+# See ../README.md
+#
+
+#
+# Run as: perl ch-1.pl < input-file
+#