aboutsummaryrefslogtreecommitdiff
path: root/challenge-132
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-132')
-rw-r--r--challenge-132/abigail/README.md6
-rw-r--r--challenge-132/abigail/awk/ch-1.awk43
-rw-r--r--challenge-132/abigail/bash/ch-1.sh41
-rw-r--r--challenge-132/abigail/blog.txt1
-rw-r--r--challenge-132/abigail/blog2.txt1
-rw-r--r--challenge-132/abigail/c/ch-1.c62
-rw-r--r--challenge-132/abigail/lua/ch-1.lua45
-rw-r--r--challenge-132/abigail/node/ch-1.js68
-rw-r--r--challenge-132/abigail/perl/ch-1.pl81
-rw-r--r--challenge-132/abigail/perl/ch-2.pl157
-rw-r--r--challenge-132/abigail/python/ch-1.py35
-rw-r--r--challenge-132/abigail/ruby/ch-1.rb38
-rw-r--r--challenge-132/abigail/t/ctest.ini7
-rw-r--r--challenge-132/abigail/t/input-1-13
-rw-r--r--challenge-132/abigail/t/output-1-1.exp3
-rw-r--r--challenge-132/adam-russell/perl/ch-1.pl42
-rw-r--r--challenge-132/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-132/arne-sommer/raku/ch-1.raku26
-rwxr-xr-xchallenge-132/arne-sommer/raku/ch-2.raku28
-rwxr-xr-xchallenge-132/arne-sommer/raku/hash-join77
-rwxr-xr-xchallenge-132/arne-sommer/raku/hash-join-module26
-rwxr-xr-xchallenge-132/arne-sommer/raku/hash-join-module228
-rwxr-xr-xchallenge-132/arne-sommer/raku/hash-join-module339
-rwxr-xr-xchallenge-132/arne-sommer/raku/hash-join-module440
-rwxr-xr-xchallenge-132/arne-sommer/raku/hash-join-sorted72
-rw-r--r--challenge-132/arne-sommer/raku/lib/HashJoin.rakumod146
-rwxr-xr-xchallenge-132/arne-sommer/raku/mirror-dates26
-rw-r--r--challenge-132/athanasius/perl/ch-1.pl153
-rw-r--r--challenge-132/athanasius/raku/ch-1.raku164
-rw-r--r--challenge-132/ben-davies/raku/ch-1.raku11
-rw-r--r--challenge-132/ben-davies/raku/ch-2.raku33
-rw-r--r--challenge-132/ben-davies/scala/ch-1.scala13
-rw-r--r--challenge-132/ben-davies/scala/ch-2.scala34
-rw-r--r--challenge-132/dave-jacoby/blog.txt1
-rw-r--r--challenge-132/dave-jacoby/perl/ch-1.pl67
-rw-r--r--challenge-132/dave-jacoby/perl/ch-2.pl52
-rw-r--r--challenge-132/duncan-c-white/README119
-rw-r--r--challenge-132/duncan-c-white/perl/ages7
-rwxr-xr-xchallenge-132/duncan-c-white/perl/ch-1.pl70
-rwxr-xr-xchallenge-132/duncan-c-white/perl/ch-2.pl139
-rwxr-xr-xchallenge-132/duncan-c-white/perl/ch-2a.pl150
-rw-r--r--challenge-132/duncan-c-white/perl/names7
-rwxr-xr-xchallenge-132/e-choroba/perl/ch-1.pl37
-rwxr-xr-xchallenge-132/e-choroba/perl/ch-2.pl61
-rw-r--r--challenge-132/james-raspass/README1
-rw-r--r--challenge-132/james-raspass/raku/ch-1.raku8
-rw-r--r--challenge-132/james-smith/README.md13
-rwxr-xr-xchallenge-132/jo-37/perl/ch-1.pl72
-rw-r--r--challenge-132/jo-37/perl/ch-2-ages.csv6
-rw-r--r--challenge-132/jo-37/perl/ch-2-names.csv6
-rwxr-xr-xchallenge-132/jo-37/perl/ch-2.pl111
-rw-r--r--challenge-132/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-132/laurent-rosenfeld/perl/ch-1.pl30
-rw-r--r--challenge-132/laurent-rosenfeld/perl/ch-2.pl26
-rw-r--r--challenge-132/laurent-rosenfeld/raku/ch-1.raku9
-rw-r--r--challenge-132/laurent-rosenfeld/raku/ch-2.raku30
-rw-r--r--challenge-132/lubos-kolouch/perl/ch-1.pl34
-rw-r--r--challenge-132/mark-anderson/raku/ch-2.raku22
-rwxr-xr-xchallenge-132/mattneleigh/perl/ch-1.pl163
-rwxr-xr-xchallenge-132/mattneleigh/perl/ch-2.pl134
-rw-r--r--challenge-132/mohammad-anwar/perl/ch-1.pl32
-rw-r--r--challenge-132/mohammad-anwar/perl/ch-2.pl56
-rw-r--r--challenge-132/olivier-delouya/perl/ch-1.pl22
-rw-r--r--challenge-132/olivier-delouya/perl/ch-2.pl33
-rwxr-xr-xchallenge-132/pete-houston/perl/ch-1.pl38
-rwxr-xr-xchallenge-132/pete-houston/perl/ch-2.pl76
-rw-r--r--challenge-132/polettix/blog.txt1
-rw-r--r--challenge-132/polettix/blog1.txt1
-rw-r--r--challenge-132/polettix/perl/ch-1.pl18
-rw-r--r--challenge-132/polettix/perl/ch-2.pl44
-rw-r--r--challenge-132/polettix/perl/cpanfile1
-rw-r--r--challenge-132/polettix/perl/cpanfile.snapshot879
-rw-r--r--challenge-132/polettix/raku/ch-1.raku9
-rw-r--r--challenge-132/polettix/raku/ch-2.raku39
-rw-r--r--challenge-132/rage311/perl/ch-1.pl24
-rw-r--r--challenge-132/roger-bell-west/blog.txt1
-rw-r--r--challenge-132/simon-proctor/raku/ch-1.raku9
-rw-r--r--challenge-132/tyler-wardhaugh/clojure/README.md14
-rw-r--r--challenge-132/tyler-wardhaugh/clojure/bb.edn4
-rw-r--r--challenge-132/tyler-wardhaugh/clojure/deps.edn3
-rw-r--r--challenge-132/tyler-wardhaugh/clojure/pom.xml13
-rw-r--r--challenge-132/tyler-wardhaugh/clojure/src/tw/weekly/c132/core.clj12
-rw-r--r--challenge-132/tyler-wardhaugh/clojure/src/tw/weekly/c132/t1.clj35
-rw-r--r--challenge-132/tyler-wardhaugh/clojure/src/tw/weekly/c132/t2.clj62
-rw-r--r--challenge-132/tyler-wardhaugh/clojure/test/tw/weekly/c132_test.clj28
-rw-r--r--challenge-132/ulrich-rieke/haskell/ch-1.hs28
-rw-r--r--challenge-132/ulrich-rieke/perl/ch-1.pl27
-rw-r--r--challenge-132/ulrich-rieke/raku/ch-1.raku14
-rw-r--r--challenge-132/ulrich-rieke/raku/ch-2.raku42
-rw-r--r--challenge-132/wambash/raku/ch-1.raku19
-rw-r--r--challenge-132/wanderdoc/perl/ch-1.pl63
-rw-r--r--challenge-132/wanderdoc/perl/ch-2.pl88
-rw-r--r--challenge-132/wlmb/blog.txt1
-rwxr-xr-xchallenge-132/wlmb/perl/ch-1.pl21
-rwxr-xr-xchallenge-132/wlmb/perl/ch-2.pl23
95 files changed, 4644 insertions, 62 deletions
diff --git a/challenge-132/abigail/README.md b/challenge-132/abigail/README.md
index 4c27485f4c..5eef101325 100644
--- a/challenge-132/abigail/README.md
+++ b/challenge-132/abigail/README.md
@@ -3,10 +3,14 @@
## Part 1
* [AWK](awk/ch-1.awk)
+* [Bash](bash/ch-1.sh)
* [C](c/ch-1.c)
+* [Lua](lua/ch-1.lua)
+* [Node.js](node/ch-1.js)
* [Perl](perl/ch-1.pl)
+* [Python](python/ch-1.py)
+* [Ruby](ruby/ch-1.rb)
## Part 2
-* [AWK](awk/ch-2.awk)
* [Perl](perl/ch-2.pl)
diff --git a/challenge-132/abigail/awk/ch-1.awk b/challenge-132/abigail/awk/ch-1.awk
new file mode 100644
index 0000000000..59a0d20f40
--- /dev/null
+++ b/challenge-132/abigail/awk/ch-1.awk
@@ -0,0 +1,43 @@
+#!/usr/bin/awk
+
+#
+# See ../README.md
+#
+
+#
+# Run as: awk -f ch-1.awk < input-file
+#
+
+#
+# Conversion functions from Wikipedia
+#
+
+function g2j (Y, M, D) {
+ return (int ((1461 * (Y + 4800 + int ((M - 14) / 12))) / 4) + \
+ int ((367 * (M - 2 - 12 * int ((M - 14) / 12))) / 12) - \
+ int ((3 * int (((Y + 4900 + int ((M - 14) / 12)) / 100))) / 4) + \
+ D - 32075)
+}
+
+function j2g (J) {
+ e = 4 * (J + 1401 + int (int ((4 * J + 274277) / 146097) * 3 / 4) - 38) + 3
+ D = int (((5 * (int ((e % 1461) / 4)) + 2) % 153) / 5) + 1
+ M = ((int ((5 * (int ((e % 1461) / 4)) + 2) / 153) + 2) % 12) + 1
+ Y = int (e / 1461) - 4716 + int ((12 + 2 - M) / 12)
+ return sprintf ("%04d/%02d/%02d", Y, M, D)
+}
+
+BEGIN {
+ FS = "/"
+ TODAY_Y = 2021
+ TODAY_M = 9
+ TODAY_D = 22
+
+ julian_today = g2j(TODAY_Y, TODAY_M, TODAY_D)
+}
+
+{
+ julian_then = g2j($1, $2, $3)
+ print j2g(2 * julian_then - julian_today) ", " \
+ j2g(2 * julian_today - julian_then)
+}
diff --git a/challenge-132/abigail/bash/ch-1.sh b/challenge-132/abigail/bash/ch-1.sh
new file mode 100644
index 0000000000..eb99113be0
--- /dev/null
+++ b/challenge-132/abigail/bash/ch-1.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+#
+# See ../README.md
+#
+
+#
+# Run as: bash ch-1.sh < input-file
+#
+
+set -f
+
+IFS="/"
+
+function g2j () {
+ local Y=$1
+ local M=$2
+ local D=$3
+ J=$(( ((1461 * (Y + 4800 + (M - 14) / 12)) / 4 +
+ (367 * (M - 2 - 12 * ((M - 14) / 12))) / 12 -
+ (3 * ((Y + 4900 + (M - 14) / 12) / 100)) / 4 + D - 32075) ))
+}
+
+function j2g () {
+ local J=$1
+ local e=$(( 4 * (J + 1401 +
+ (((4 * J + 274277) / 146097) * 3) / 4 - 38) + 3 ))
+ D=$(( ((5 * ((e % 1461) / 4) + 2) % 153) / 5 + 1 ))
+ M=$(( (((5 * ((e % 1461) / 4) + 2) / 153 + 2) % 12) + 1 ))
+ Y=$(( (e / 1461) - 4716 + (12 + 2 - M) / 12 ))
+}
+
+g2j 2021 9 22; julian_today=$J
+
+while read y m d
+do g2j ${y/#0/} ${m/#0/} ${d/#0/}; julian_then=$J
+ j2g $(( 2 * julian_then - julian_today ))
+ printf "%04d/%02d/%02d, " $Y $M $D
+ j2g $(( 2 * julian_today - julian_then ))
+ printf "%04d/%02d/%02d\n" $Y $M $D
+done
diff --git a/challenge-132/abigail/blog.txt b/challenge-132/abigail/blog.txt
new file mode 100644
index 0000000000..5e79dc06ef
--- /dev/null
+++ b/challenge-132/abigail/blog.txt
@@ -0,0 +1 @@
+https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-132-1.html
diff --git a/challenge-132/abigail/blog2.txt b/challenge-132/abigail/blog2.txt
new file mode 100644
index 0000000000..9593e5f199
--- /dev/null
+++ b/challenge-132/abigail/blog2.txt
@@ -0,0 +1 @@
+https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-132-2.html
diff --git a/challenge-132/abigail/c/ch-1.c b/challenge-132/abigail/c/ch-1.c
new file mode 100644
index 0000000000..1a50d2b8df
--- /dev/null
+++ b/challenge-132/abigail/c/ch-1.c
@@ -0,0 +1,62 @@
+# 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 idx_Y 0
+# define idx_M 1
+# define idx_D 2
+
+typedef unsigned short date_type;
+
+long g2j (date_type Y, date_type M, date_type D) {
+ return ((1461 * (Y + 4800 + (M - 14) / 12)) / 4 +
+ (367 * (M - 2 - 12 * ((M - 14) / 12))) / 12 -
+ (3 * ((Y + 4900 + (M - 14) / 12) / 100)) / 4 + D - 32075);
+}
+
+void j2g (long J, date_type * date) {
+ long e = 4 * (J + 1401 + (((4 * J + 274277) / 146097) * 3) / 4 - 38) + 3;
+ date [idx_D] = ((5 * ((e % 1461) / 4) + 2) % 153) / 5 + 1;
+ date [idx_M] = (((5 * ((e % 1461) / 4) + 2) / 153 + 2) % 12) + 1;
+ date [idx_Y] = (e / 1461) - 4716 + (12 + 2 - date [idx_M]) / 12;
+}
+
+unsigned short TODAY [] = {2021, 9, 22};
+
+int main (void) {
+ date_type Y, M, D;
+ date_type * date_early;
+ date_type * date_late;
+
+ if ((date_early = (date_type *) malloc (3 * sizeof (date_type))) == NULL) {
+ perror ("Malloc failed");
+ exit (1);
+ }
+ if ((date_late = (date_type *) malloc (3 * sizeof (date_type))) == NULL) {
+ perror ("Malloc failed");
+ exit (1);
+ }
+
+ long julian_today = g2j (TODAY [idx_Y], TODAY [idx_M], TODAY [idx_D]);
+
+ while (scanf ("%hu/%hu/%hu", &Y, &M, &D) == 3) {
+ long julian_then = g2j (Y, M, D);
+ j2g (2 * julian_then - julian_today, date_early);
+ j2g (2 * julian_today - julian_then, date_late);
+ printf ("%04d/%02d/%02d, %04d/%02d/%02d\n",
+ date_early [idx_Y], date_early [idx_M], date_early [idx_D],
+ date_late [idx_Y], date_late [idx_M], date_late [idx_D]);
+ }
+ free (date_early);
+ free (date_late);
+
+ return (0);
+}
diff --git a/challenge-132/abigail/lua/ch-1.lua b/challenge-132/abigail/lua/ch-1.lua
new file mode 100644
index 0000000000..a13cd4cf89
--- /dev/null
+++ b/challenge-132/abigail/lua/ch-1.lua
@@ -0,0 +1,45 @@
+#!/opt/local/bin/lua
+
+--
+-- See ../README.md
+--
+
+--
+-- Run as: lua ch-1.lua < input-file
+--
+
+function int (x)
+ if x > 0 then
+ return math . floor (x)
+ else
+ return math . ceil (x)
+ end
+end
+
+function g2j (Y, M, D)
+ return (int ((1461 * (Y + 4800 + int ((M - 14) / 12))) / 4) +
+ int ((367 * (M - 2 - 12 * int ((M - 14) / 12))) / 12) -
+ int ((3 * int (((Y + 4900 + int ((M - 14) / 12)) / 100))) / 4) +
+ D - 32075)
+end
+
+function j2g (J)
+ local e = 4 * (J + 1401 +
+ int (int ((4 * J + 274277) / 146097) * 3 / 4) - 38) + 3
+ local D = int (((5 * (int ((e % 1461) / 4)) + 2) % 153) / 5) + 1
+ local M = ((int ((5 * (int ((e % 1461) / 4)) + 2) / 153) + 2) % 12) + 1
+ local Y = int (e / 1461) - 4716 + int ((12 + 2 - M) / 12)
+ return Y, M, D
+end
+
+local julian_today = g2j (2021, 9, 22)
+local output_format = "%04d/%02d/%02d, %04d/%02d/%02d\n"
+
+for line in io . lines () do
+ local _, _, Y, M, D = line : find ("([0-9]+)/([0-9]+)/([0-9]+)")
+ local julian_then = g2j (Y, M, D)
+ local Y1, M1, D1 = j2g (2 * julian_then - julian_today)
+ local Y2, M2, D2 = j2g (2 * julian_today - julian_then)
+
+ io . write (output_format : format (Y1, M1, D1, Y2, M2, D2))
+end
diff --git a/challenge-132/abigail/node/ch-1.js b/challenge-132/abigail/node/ch-1.js
new file mode 100644
index 0000000000..69f4a996b9
--- /dev/null
+++ b/challenge-132/abigail/node/ch-1.js
@@ -0,0 +1,68 @@
+#!/usr/local/bin/node
+
+//
+// See ../README.md
+//
+
+//
+// Run as: node ch-1.js < input-file
+//
+
+function int (x) {
+ if (x < 0) {
+ return Math . ceil (x)
+ }
+ else {
+ return Math . floor (x)
+ }
+}
+
+function g2j (Y, M, D) {
+ return (int ((1461 * (Y + 4800 + int ((M - 14) / 12))) / 4) +
+ int ((367 * (M - 2 - 12 * int ((M - 14) / 12))) / 12) -
+ int ((3 * int (((Y + 4900 + int ((M - 14) / 12)) / 100))) / 4) +
+ D - 32075)
+}
+
+function j2g (J) {
+ let e = 4 * (J + 1401 +
+ int (int ((4 * J + 274277) / 146097) * 3 / 4) - 38) + 3
+ let D = int (((5 * (int ((e % 1461) / 4)) + 2) % 153) / 5) + 1
+ let M = ((int ((5 * (int ((e % 1461) / 4)) + 2) / 153) + 2) % 12) + 1
+ let Y = int (e / 1461) - 4716 + int ((12 + 2 - M) / 12)
+ return [Y, M, D]
+}
+
+//
+// pad a number to a requested length
+//
+function pad (num, l) {
+ let out = num
+ while (out . length < l) {
+ out = "0" + out
+ }
+ return (out)
+}
+
+//
+// Pretty print the output, since node.js doesn't have sprintf(),
+// and util.format just doesn't do it.
+//
+function pp (d1, d2) {
+ let e1 = d1 . map (x => x . toString ())
+ let e2 = d2 . map (x => x . toString ())
+ console . log ("%s/%s/%s, %s/%s/%s",
+ pad (e1 [0], 4), pad (e1 [1], 2), pad (e1 [2], 2),
+ pad (e2 [0], 4), pad (e2 [1], 2), pad (e2 [2], 2))
+}
+