aboutsummaryrefslogtreecommitdiff
path: root/challenge-139
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-11-18 19:43:54 +0000
committerGitHub <noreply@github.com>2021-11-18 19:43:54 +0000
commitb395af596f73a3ae71ecaa12fbc50a2b8c0abd3a (patch)
treeb5342c29c91380fe59d030692bdd0d3ba0c831a6 /challenge-139
parentfea16493802aaa652cbbf246221e7425a2a0a536 (diff)
parent0bac889b4549e403cdc9aad2ec89ad70845df57c (diff)
downloadperlweeklychallenge-club-b395af596f73a3ae71ecaa12fbc50a2b8c0abd3a.tar.gz
perlweeklychallenge-club-b395af596f73a3ae71ecaa12fbc50a2b8c0abd3a.tar.bz2
perlweeklychallenge-club-b395af596f73a3ae71ecaa12fbc50a2b8c0abd3a.zip
Merge pull request #5243 from Abigail/abigail/week-139
Abigail/week 139
Diffstat (limited to 'challenge-139')
-rw-r--r--challenge-139/abigail/awk/ch-1.awk19
-rw-r--r--challenge-139/abigail/awk/ch-2.awk35
-rw-r--r--challenge-139/abigail/bash/ch-1.sh21
-rw-r--r--challenge-139/abigail/bash/ch-2.sh47
-rw-r--r--challenge-139/abigail/bc/ch-1.bc27
-rw-r--r--challenge-139/abigail/bc/ch-2.bc40
-rw-r--r--challenge-139/abigail/blog.txt1
-rw-r--r--challenge-139/abigail/blog1.txt1
-rw-r--r--challenge-139/abigail/c/ch-1.c40
-rw-r--r--challenge-139/abigail/c/ch-2.c52
-rw-r--r--challenge-139/abigail/go/ch-1.go44
-rw-r--r--challenge-139/abigail/go/ch-2.go46
-rw-r--r--challenge-139/abigail/java/ch-1.java25
-rw-r--r--challenge-139/abigail/java/ch-2.java45
-rw-r--r--challenge-139/abigail/lua/ch-1.lua21
-rw-r--r--challenge-139/abigail/lua/ch-2.lua41
-rw-r--r--challenge-139/abigail/node/ch-1.js20
-rw-r--r--challenge-139/abigail/node/ch-2.js37
-rw-r--r--challenge-139/abigail/pascal/ch-1.p29
-rw-r--r--challenge-139/abigail/pascal/ch-2.p52
-rw-r--r--challenge-139/abigail/perl/ch-1.pl28
-rw-r--r--challenge-139/abigail/perl/ch-2.pl57
-rw-r--r--challenge-139/abigail/python/ch-1.py19
-rw-r--r--challenge-139/abigail/python/ch-2.py32
-rw-r--r--challenge-139/abigail/r/ch-1.r26
-rw-r--r--challenge-139/abigail/r/ch-2.r35
-rw-r--r--challenge-139/abigail/ruby/ch-1.rb22
-rw-r--r--challenge-139/abigail/ruby/ch-2.rb38
-rw-r--r--challenge-139/abigail/scheme/ch-1.scm34
-rw-r--r--challenge-139/abigail/scheme/ch-2.scm33
-rw-r--r--challenge-139/abigail/t/ctest.ini16
-rw-r--r--challenge-139/abigail/t/input-1-12
-rw-r--r--challenge-139/abigail/t/input-1-23
-rw-r--r--challenge-139/abigail/t/input-2-10
-rw-r--r--challenge-139/abigail/t/output-1-1.exp2
-rw-r--r--challenge-139/abigail/t/output-1-2.exp3
-rw-r--r--challenge-139/abigail/t/output-2-1.exp5
-rw-r--r--challenge-139/abigail/tcl/ch-1.tcl19
-rw-r--r--challenge-139/abigail/tcl/ch-2.tcl41
39 files changed, 1058 insertions, 0 deletions
diff --git a/challenge-139/abigail/awk/ch-1.awk b/challenge-139/abigail/awk/ch-1.awk
new file mode 100644
index 0000000000..85b6f4f2b9
--- /dev/null
+++ b/challenge-139/abigail/awk/ch-1.awk
@@ -0,0 +1,19 @@
+#!/usr/bin/awk
+
+#
+# See ../README.md
+#
+
+#
+# Run as: awk -f ch-1.awk < input-file
+#
+
+{
+ sorted = 1
+ for (i = 2; i <= NF; i ++) {
+ if ($(i - 1) > $i) {
+ sorted = 0
+ }
+ }
+ print sorted
+}
diff --git a/challenge-139/abigail/awk/ch-2.awk b/challenge-139/abigail/awk/ch-2.awk
new file mode 100644
index 0000000000..dcc6f07d4c
--- /dev/null
+++ b/challenge-139/abigail/awk/ch-2.awk
@@ -0,0 +1,35 @@
+#!/usr/bin/awk
+
+#
+# See ../README.md
+#
+
+#
+# Run as: awk -f ch-2.awk < input-file
+#
+
+function is_long (number, rest, seen, i) {
+ rest = 0
+ delete seen
+ for (i = 2; i <= number; i ++) {
+ rest = (rest * BASE + BASE - 1) % number
+ if (seen [rest]) {return 0}
+ seen [rest] = 1
+ }
+ return 1
+}
+
+BEGIN {
+ BASE = 10
+ COUNT = 5
+ number = 1
+
+ while (COUNT > 0) {
+ number ++
+ if (BASE % number == 0) {continue}
+ if (is_long(number)) {
+ print (number)
+ COUNT --
+ }
+ }
+}
diff --git a/challenge-139/abigail/bash/ch-1.sh b/challenge-139/abigail/bash/ch-1.sh
new file mode 100644
index 0000000000..292191ce6c
--- /dev/null
+++ b/challenge-139/abigail/bash/ch-1.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+#
+# See ../README.md
+#
+
+#
+# Run as: bash ch-1.sh < input-file
+#
+
+set -f
+
+while read -a list
+do ((sorted = 1))
+ for ((i = 1; i < ${#list[@]}; i ++))
+ do if ((${list[$i - 1]} > ${list[$i]}))
+ then ((sorted = 0))
+ fi
+ done
+ echo $sorted
+done
diff --git a/challenge-139/abigail/bash/ch-2.sh b/challenge-139/abigail/bash/ch-2.sh
new file mode 100644
index 0000000000..bbcc3c093d
--- /dev/null
+++ b/challenge-139/abigail/bash/ch-2.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+#
+# See ../README.md
+#
+
+#
+# Run as: bash ch-2.sh
+#
+
+set -f
+
+BASE=10
+COUNT=5
+
+function is_long () {
+ local number=$1
+ local rest=0
+ local seen=()
+
+ for ((i = 0; i < number; i ++))
+ do seen[$i]=0
+ done
+
+ for ((i = 2; i <= number; i ++))
+ do ((rest = (rest * BASE + BASE - 1) % number))
+ if ((${seen[$rest]} == 1))
+ then is_long=0
+ return
+ fi
+ seen[$rest]=1
+ done
+
+ is_long=1
+}
+
+number=1
+while ((COUNT > 0))
+do ((number ++))
+ if ((BASE % number != 0))
+ then is_long $number
+ if (($is_long == 1))
+ then echo $number
+ ((COUNT --))
+ fi
+ fi
+done
diff --git a/challenge-139/abigail/bc/ch-1.bc b/challenge-139/abigail/bc/ch-1.bc
new file mode 100644
index 0000000000..4afe2a1c11
--- /dev/null
+++ b/challenge-139/abigail/bc/ch-1.bc
@@ -0,0 +1,27 @@
+#
+# See ../README.md
+#
+
+#
+# Run as: bc ch-1.bc < input-file
+#
+# End each line with a 0.
+# End the input with a 0 as the first number on a line
+#
+
+
+while (1) {
+ prev = read(); if (prev == 0) break; # End of input
+ sorted = 1;
+ while (1) {
+ next = read()
+ if (next == 0) { # End of line
+ sorted
+ break
+ }
+ if (prev > next) {
+ sorted = 0
+ }
+ prev = next
+ }
+}
diff --git a/challenge-139/abigail/bc/ch-2.bc b/challenge-139/abigail/bc/ch-2.bc
new file mode 100644
index 0000000000..c51b1ab38d
--- /dev/null
+++ b/challenge-139/abigail/bc/ch-2.bc
@@ -0,0 +1,40 @@
+#
+# See ../README.md
+#
+
+#
+# Run as: bc ch-2.bc
+#
+
+base = 10
+count = 5
+
+define is_long (number) {
+ for (i = 0; i < number; i ++) {
+ seen [i] = 0
+ }
+ rest = 0
+ for (i = 2; i <= number; i ++) {
+ rest = (rest * base + base - 1) % number
+ if (seen [rest] > 0) {
+ return (0)
+ }
+ seen [rest] = 1
+ }
+ return (1)
+}
+
+
+number = 1
+for (;count > 0;) {
+ number = number + 1
+ if (base % number == 0) {
+ continue
+ }
+ if (is_long (number) == 1) {
+ number
+ count = count - 1
+ }
+}
+
+quit
diff --git a/challenge-139/abigail/blog.txt b/challenge-139/abigail/blog.txt
new file mode 100644
index 0000000000..27ea424de7
--- /dev/null
+++ b/challenge-139/abigail/blog.txt
@@ -0,0 +1 @@
+https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-139-1.html
diff --git a/challenge-139/abigail/blog1.txt b/challenge-139/abigail/blog1.txt
new file mode 100644
index 0000000000..7165e97292
--- /dev/null
+++ b/challenge-139/abigail/blog1.txt
@@ -0,0 +1 @@
+https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-139-2.html
diff --git a/challenge-139/abigail/c/ch-1.c b/challenge-139/abigail/c/ch-1.c
new file mode 100644
index 0000000000..5a9e1269b7
--- /dev/null
+++ b/challenge-139/abigail/c/ch-1.c
@@ -0,0 +1,40 @@
+# include <stdlib.h>
+# include <stdio.h>
+# include <string.h>
+# include <stdbool.h>
+
+/*
+ * See ../README.md
+ */
+
+/*
+ * Run as: cc -o ch-1.o ch-1.c; ./ch-1.o < input-file
+ */
+
+int main (void) {
+ char * line = NULL;
+ size_t len = 0;
+ size_t str_len;
+
+ while ((str_len = getline (&line, &len, stdin)) != -1) {
+ int offset = 0;
+ int off;
+ int prev, next;
+ bool sorted = true;
+ if (sscanf (line, "%d%n", &prev, &offset) != 1) {
+ perror ("Failure to scan");
+ exit (1);
+ }
+ while (sscanf (line + offset, "%d%n", &next, &off) == 1) {
+ offset += off;
+ if (prev > next) {
+ sorted = false;
+ }
+ prev = next;
+ }
+ printf ("%d\n", sorted ? 1 : 0);
+ }
+ free (line);
+
+ return (0);
+}
diff --git a/challenge-139/abigail/c/ch-2.c b/challenge-139/abigail/c/ch-2.c
new file mode 100644
index 0000000000..2a21888dfd
--- /dev/null
+++ b/challenge-139/abigail/c/ch-2.c
@@ -0,0 +1,52 @@
+# include <stdlib.h>
+# include <stdio.h>
+# include <string.h>
+# include <stdbool.h>
+
+/*
+ * See ../README.md
+ */
+
+/*
+ * Run as: cc -o ch-2.o ch-2.c; ./ch-2.o < input-file
+ */
+
+# define BASE 10
+# define COUNT 5
+
+
+bool is_long (int number) {
+ int rest = 0;
+ bool * seen;
+ if ((seen = (bool *) malloc (number * sizeof (bool))) == NULL) {
+ perror ("Malloc failed");
+ exit (1);
+ }
+ for (size_t i = 0; i < number; i ++) {
+ seen [i] = false;
+ }
+ for (int i = 2; i <= number; i ++) {
+ rest = (rest * BASE + BASE - 1) % number;
+ if (seen [rest] ++) {
+ free (seen);
+ return (0);
+ }
+ }
+ free (seen);
+ return (1);
+}
+
+
+int main (void) {
+ int count = COUNT;
+ int number = 1;
+ while (count) {
+ number ++;
+ if (BASE % number == 0) {continue;}
+ if (is_long (number)) {
+ printf ("%d\n", number);
+ count --;
+ }
+ }
+ return (0);
+}
diff --git a/challenge-139/abigail/go/ch-1.go b/challenge-139/abigail/go/ch-1.go
new file mode 100644
index 0000000000..2f3ad22c52
--- /dev/null
+++ b/challenge-139/abigail/go/ch-1.go
@@ -0,0 +1,44 @@
+package main
+
+//
+// See ../README.md
+//
+
+//
+// Run as: go run ch-1.go
+//
+
+import (
+ "fmt"
+ "bufio"
+ "os"
+ "strings"
+ "strconv"
+)
+
+func main () {
+ var reader = bufio . NewReader (os. Stdin)
+ for {
+ var line, err = reader . ReadString ('\n')
+ if (err != nil) {
+ break
+ }
+
+ line = strings . TrimSuffix (line, "\n")
+
+ list := strings . Split (line, " ")
+
+ sorted := true
+ for i := 1; sorted && i < len (list); i ++ {
+ prev, _ := strconv . Atoi (list [i - 1])
+ next, _ := strconv . Atoi (list [i])
+ sorted = prev <= next
+ }
+
+ if (sorted) {
+ fmt . Println (1)
+ } else {
+ fmt . Println (0)
+ }
+ }
+}
diff --git a/challenge-139/abigail/go/ch-2.go b/challenge-139/abigail/go/ch-2.go
new file mode 100644
index 0000000000..dd2bfa3a10
--- /dev/null
+++ b/challenge-139/abigail/go/ch-2.go
@@ -0,0 +1,46 @@
+package main
+
+//
+// See ../README.md
+//
+
+//
+// Run as: go run ch-2.go
+//
+
+import (
+ "fmt"
+)
+
+var (
+ BASE int = 10
+ COUNT int = 5
+)
+
+func is_long (number int) bool {
+ seen := make ([] bool, number)
+ rest := 0
+ for i := 2; i <= number; i ++ {
+ rest = (rest * BASE + BASE - 1) % number
+ if seen [rest] {
+ return false
+ }
+ seen [rest] = true
+ }
+ return true
+}
+
+
+func main () {
+ number := 1
+ for COUNT > 0 {
+ number ++
+ if BASE % number == 0 {
+ continue
+ }
+ if is_long (number) {
+ fmt . Println (number)
+ COUNT --
+ }
+ }
+}
diff --git a/challenge-139/abigail/java/ch-1.java b/challenge-139/abigail/java/ch-1.java
new file mode 100644
index 0000000000..e5a102cb12
--- /dev/null
+++ b/challenge-139/abigail/java/ch-1.java
@@ -0,0 +1,25 @@
+//
+// See ../README.md
+//
+
+//
+// Run as: ln ch-1.java ch1.java; javac ch1.java; java ch1 < input-file
+//
+
+import java.util.*;
+
+public class ch1 {
+ public static void main (String [] args) {
+ Scanner scanner = new Scanner (System . in);
+ while (scanner . hasNextLine ()) {
+ String line = scanner . nextLine ();
+ String [] list = line . split (" ");
+ boolean sorted = true;
+ for (int i = 1; sorted && i < list . length; i ++) {
+ sorted = Integer . parseInt (list [i - 1]) <=
+ Integer . parseInt (list [i]);
+ }
+ System . out . println (sorted ? 1 : 0);
+ }
+ }
+}
diff --git a/challenge-139/abigail/java/ch-2.java b/challenge-139/abigail/java/ch-2.java
new file mode 100644
index 0000000000..a7f1c2715f
--- /dev/null
+++ b/challenge-139/abigail/java/ch-2.java
@@ -0,0 +1,45 @@
+//
+// See ../README.md
+//
+
+//
+// Run as: ln ch-2.java ch2.java; javac ch2.java; java ch2
+//
+
+import java.util.*;
+
+public class ch2 {
+ public static final int BASE = 10;
+ public static final int COUNT = 5;
+
+ public static boolean is_long (int number) {
+ boolean [] seen = new boolean [number];
+ for (int i = 0; i < number; i ++) {
+ seen [i] = false;
+ }
+ int rest = 0;
+ for (int i = 2; i <= number; i ++) {
+ rest = (rest * BASE + BASE - 1) % number;
+ if (seen [rest]) {
+ return false;
+ }
+ seen [rest] = true;
+ }
+ return true;
+ }
+
+ public static void main (String [] args) {
+ int number = 1;
+ int count = COUNT;
+ while (count > 0) {
+ number ++;
+ if (BASE % number == 0) {
+ continue;
+ }
+ if (is_long (number)) {
+ System . out . println (number);
+ count --;
+ }
+ }
+ }
+}
diff --git a/challenge-139/abigail/lua/ch-1.lua b/challenge-139/abigail/lua/ch-1.lua
new file mode 100644
index 0000000000..8a2603a7e8
--- /dev/null
+++ b/challenge-139/abigail/lua/ch-1.lua
@@ -0,0 +1,21 @@
+#!/opt/local/bin/lua
+
+--
+-- See ../README.md
+--
+
+--
+-- Run as: lua ch-1.lua < input-file
+--
+
+for line in io . lines () do
+ local sorted = 1
+ local prev = nil
+ for next in line : gmatch ("[0-9]+") do
+ if prev ~= nil and prev > next then
+ sorted = 0
+ end
+ prev = next
+ end
+ print (sorted)
+end
diff --git a/challenge-139/abigail/lua/ch-2.lua b/challenge-139/abigail/lua/ch-2.lua
new file mode 100644
index 0000000000..bc970a0db1
--- /dev/null
+++ b/challenge-139/abigail/lua/ch-2.lua
@@ -0,0 +1,41 @@
+#!/opt/local/bin/lua
+
+--
+-- See ../README.md
+--
+
+--
+-- Run as: lua ch-2.lua
+--
+
+local BASE = 10
+local COUNT = 5
+
+function is_long (number)
+ local rest = 0
+ local seen = {}
+
+ for _ = 2, number do
+ rest = (rest * BASE + BASE - 1) % number
+ if (seen [rest] ~= nil) then
+ return (0)
+ end
+ seen [rest] = 1
+ end
+
+ return (1)
+end
+
+
+local number = 1
+while COUNT > 0 do
+ number = number + 1
+ if BASE % number == 0 then
+ goto end_loop
+ end
+ if is_long (number) == 1 then
+ print (number)
+ COUNT = COUNT - 1
+ end
+ ::end_loop::
+end
diff --git a/challenge-139/abigail/node/ch-1.js b/challenge-139/abigail/node/ch-1.js
new file mode 100644
index 0000000000..f45be6188c
--- /dev/null
+++ b/challenge-139/abigail/node/ch-1.js
@@ -0,0 +1,20 @@
+#!/usr/local/bin/node
+
+//
+// See ../README.md
+//
+
+//
+// Run as: node ch-1.js < input-file
+//
+
+ require ('readline')
+. createInterface ({input: process . stdin})
+. on ('line', line => {
+ console . log (line . match (/[0-9]+/gi) . reduce ((sorted, _, i, list) => {
+ if (i > 0 && list [i - 1] > list [i]) {sorted = 0}
+ return sorted},
+ 1)
+ )
+})
+
diff --git a/challenge-139/abigail/node/ch-2.js b/challenge-139/abigail/node/ch-2.js
new file mode 100644
index 0000000000..88f78d7b99
--- /dev/null
+++ b/challenge-139/abigail/node/ch-2.js
@@ -0,0 +1,37 @@
+#!/usr/local/bin/node
+
+//
+// See ../README.md
+//
+
+//
+// Run as: node ch-2.js
+//
+
+let BASE = 10
+let COUNT = 5
+
+function is_long (number) {
+ let seen = Array (number) . fill (0)
+ let rest = 0
+ for (let i = 2; i <= number; i ++) {
+ rest = (rest * BASE + BASE - 1) % number
+ if (seen [rest] == 1) {
+ return 0
+ }
+ seen [rest] = 1
+ }
+ return 1
+}
+
+let number = 1
+while (COUNT > 0) {
+ number ++
+ if (BASE % number == 0) {
+ continue
+ }
+ if (is_long (number)) {
+ console . log (number)
+ COUNT --
+ }
+}
diff --git a/challenge-139/abigail/pascal/ch-1.p b/challenge-139/abigail/pascal/ch-1.p
new file mode 100644
index 0000000000..9fe398e6cc
--- /dev/null
+++ b/challenge-139/abigail/pascal/ch-1.p
@@ -0,0 +1,29 @@
+Program ch1;
+
+(* *)
+(* See ../README.md *)
+(* *)
+
+(* *)
+(* Run as: fpc -och-1.out ch-1.p; ./ch-1.out < input-file *)
+(* *)
+
+var
+ prev, next: integer;
+ sorted: integer;
+
+begin
+ while not eof do begin
+ sorted := 1;
+ read (prev);
+ while not eoln do begin
+ read (next);
+ if prev > next then begin
+ sorted := 0;
+ end;
+ prev := next;
+ end;
+ readln ();
+ writeln (sorted);
+ end;
+end.
diff --git a/challenge-139/abigail/pascal/ch-2.p b/challenge-139/abigail/pascal/ch-2.p
new file mode 100644
index 0000000000..a5f15ac94e
--- /dev/null
+++ b/challenge-139/abigail/pascal/ch-2.p
@@ -0,0 +1,52 @@
+Program ch2;
+
+(* *)
+(* See ../README.md *)
+(* *)
+
+(* *)
+(* Run as: fpc -och-2.out ch-2.p; ./ch-2.out *)
+(* *)
+
+var
+ BASE: integer = 10;
+ COUNT: integer = 5;
+ number: integer = 1;
+
+function is_long (number: integer): boolean;
+ var
+ seen: array of boolean;
+ rest: integer;
+ i: integer;
+
+ begin
+ setlength (seen, number);
+ for i := 0 to number - 1 do begin
+ seen [i] := false;
+ end;
+
+ rest := 0;
+
+ for i := 2 to number do begin
+ rest := (rest * BASE + BASE - 1) mod number;
+ if seen [rest] then begin
+ exit (false);
+ end;
+ seen [rest] := true;
+ end;
+
+ exit (true);
+ end;
+
+begin
+ while COUNT > 0 do begin
+ inc (number);
+ if BASE mod number = 0 then begin
+ continue;
+ end;
+ if is_long (number) then begin
+ writeln (number);
+ dec (COUNT);
+ end
+ end
+end.
diff --git a/challenge-139/abigail/perl/ch-1.pl b/challenge-139/abigail/perl/ch-1.pl
new file mode 100644
index 0000000000..9373cb2d40
--- /dev/null
+++ b/challenge-139/abigail/perl/ch-1.pl
@@ -0,0 +1,28 @@
+#!/opt/perl/bin/perl
+
+use 5.032;
+
+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
+#
+
+#
+# A list is sorted if it doesn't contain two successive elements
+# where the first element is larger than the second.
+#
+
+while (<>) {
+ my @list = /[0-9]+/g;
+ say grep ({$list [$_ - 1] > $list [$_]} 1 .. $#list) ? 0 : 1
+}
diff --git a/challenge-139/abigail/perl/ch-2.pl b/challenge-139/abigail/perl/ch-2.pl
new file mode 100644
index 0000000000..31ed9a671f
--- /dev/null
+++ b/challenge-139/abigail/perl/ch-2.pl
@@ -0,0 +1,57 @@
+#!/opt/perl/bin/perl
+
+use 5.032;
+
+use strict;
+use warnings;
+no warnings 'syntax';
+
+use experimental 'signatures';
+use experimental 'lexical_subs';
+
+#
+# See ../README.md
+#
+
+#
+# Run as: perl ch-2.pl
+#
+
+#
+# A prime p in base b is a long prime if ((b^(p - 1) - 1) / p) isn't repetitive.
+#
+
+my $COUNT = 5;
+my $BASE = 10;
+
+#
+# Check whether ($BASE ** ($number - 1) - 1) / $number gives a result
+# which repeats or not. We do this by performing long division,
+# and check we don't repeat an intermediate result.
+#
+# We could have just calculated $BASE ** ($number - 1) - 1) / $number using
+# big integers. We choose not to, using a method which can easily be ported
+# to languages without support for big integers.
+#
+# Note, we never check whether $number is a prime. If it passes the test,
+# it will be a prime (that is, no composite number will repeat with maximum
+# period).
+#
+sub is_long ($number) {
+ my $rest = 0;
+ my %seen;
+ for (2 .. $number) {
+ return 0 if $seen {$rest = ($rest * $BASE + $BASE - 1) % $number} ++;
+ }
+ return 1;
+}
+
+
+my $number = 1;
+while ($COUNT) {
+ $number ++;
+ next if $BASE % $number == 0; # Divisors of $BASE don't repeat.
+ next unless is_long $number;
+ say $number;
+ $COUNT --;
+}
diff --git a/challenge-139/abigail/python/ch-1.py b/challenge-139/abigail/python/ch-1.py
new file mode 100644
index 0000000000..f2a73b2d4a
--- /dev/null
+++ b/challenge-139/abigail/python/ch-1.py
@@ -0,0 +1,19 @@
+#!/opt/local/bin/python
+
+#
+# See ../README.md
+#
+
+#
+# Run as: python ch-1.py < input-file
+#
+
+import fileinput
+
+for line in fileinput . input ():
+ list = line . split (" ")
+ sorted = 1
+ for i in range (1, len (list)):
+ if list [i - 1] > list [i]:
+ sorted = 0
+ print (sorted)
diff --git a/challenge-139/abigail/python/ch-2.py b/challenge-139/abigail/python/ch-2.py
new file mode 100644
index 0000000000..509bfa8ee5
--- /dev/null
+++ b/