aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.freedom.nl>2022-01-10 20:06:43 +0100
committerAbigail <abigail@abigail.freedom.nl>2022-01-10 20:06:43 +0100
commit354215f8375796503461e4cb1d6cde02a566c4cf (patch)
treecca413bc9c826ab92dca9b56df30d72626a4e91d
parent3617a4290d0ceff2af483943e103d3ec71ae2874 (diff)
downloadperlweeklychallenge-club-354215f8375796503461e4cb1d6cde02a566c4cf.tar.gz
perlweeklychallenge-club-354215f8375796503461e4cb1d6cde02a566c4cf.tar.bz2
perlweeklychallenge-club-354215f8375796503461e4cb1d6cde02a566c4cf.zip
Week 147: bash solutions
-rw-r--r--challenge-147/abigail/bash/ch-1.sh55
-rw-r--r--challenge-147/abigail/bash/ch-2.sh30
2 files changed, 85 insertions, 0 deletions
diff --git a/challenge-147/abigail/bash/ch-1.sh b/challenge-147/abigail/bash/ch-1.sh
new file mode 100644
index 0000000000..1f5f09be50
--- /dev/null
+++ b/challenge-147/abigail/bash/ch-1.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+#
+# See https://theweeklychallenge.org/blog/perl-weekly-challenge-147
+#
+
+#
+# Run as: bash ch-1.sh
+#
+
+set -f
+
+function is_prime () {
+ local n=$1
+ local i
+ is_prime=1
+ if ((n > 2 && n % 2 == 0))
+ then is_prime=0
+ else for ((i = 3; i * i <= n && is_prime == 1; i += 2))
+ do if ((n % i == 0))
+ then is_prime=0
+ fi
+ done
+ fi
+}
+
+todo=(2 3 5 7)
+count=20
+
+for p in "${todo[@]}"
+do printf "$p "
+ ((count --))
+done
+
+
+while ((count > 0))
+do next=()
+ for ((d = 1; d <= 9 && count > 0; d ++))
+ do for p in "${todo[@]}"
+ do candidate=$d$p
+ is_prime $candidate
+ if (($is_prime == 1))
+ then printf $candidate" "
+ ((count --))
+ next+=($candidate)
+ if ((count <= 0))
+ then break
+ fi
+ fi
+ done
+ done
+ todo=("${next[@]}")
+done
+
+echo
diff --git a/challenge-147/abigail/bash/ch-2.sh b/challenge-147/abigail/bash/ch-2.sh
new file mode 100644
index 0000000000..f38223377d
--- /dev/null
+++ b/challenge-147/abigail/bash/ch-2.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+#
+# See https://theweeklychallenge.org/blog/perl-weekly-challenge-147
+#
+
+#
+# Run as: bash ch-2.sh
+#
+
+set -f
+
+declare -A pentagon
+
+# ((n = 0))
+# ((p = 0))
+
+while true
+do ((p = p + n + n + n + 1))
+ ((n ++))
+ pentagon[$p]=1
+
+ for seen in "${!pentagon[@]}"
+ do if ((seen + seen < p)) && [ -v pentagon[$((p - seen))] -a \
+ -v pentagon[$((p - seen - seen))] ]
+ then echo $seen" "$((p - seen))
+ break 2
+ fi
+ done
+done