aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-11-27 19:41:46 +0100
committerAbigail <abigail@abigail.be>2021-11-27 19:41:46 +0100
commitb04e6c21440d605f4c4fe18e28bc8c9bb24dc2ce (patch)
treeb25f033e2f67628206cb5d784e24f47c66edabf6
parent6b37925eeb4cf7c6cc22c1ab72e00d257c1eebb2 (diff)
downloadperlweeklychallenge-club-b04e6c21440d605f4c4fe18e28bc8c9bb24dc2ce.tar.gz
perlweeklychallenge-club-b04e6c21440d605f4c4fe18e28bc8c9bb24dc2ce.tar.bz2
perlweeklychallenge-club-b04e6c21440d605f4c4fe18e28bc8c9bb24dc2ce.zip
Two more solutions for week 132, part 1
-rw-r--r--challenge-132/abigail/README.md2
-rw-r--r--challenge-132/abigail/go/ch-1.go41
-rw-r--r--challenge-132/abigail/tcl/ch-1.tcl55
3 files changed, 98 insertions, 0 deletions
diff --git a/challenge-132/abigail/README.md b/challenge-132/abigail/README.md
index 5eef101325..00f4ac117d 100644
--- a/challenge-132/abigail/README.md
+++ b/challenge-132/abigail/README.md
@@ -5,11 +5,13 @@
* [AWK](awk/ch-1.awk)
* [Bash](bash/ch-1.sh)
* [C](c/ch-1.c)
+* [Go](go/ch-1.go)
* [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)
+* [Tcl](tcl/ch-1.tcl)
## Part 2
diff --git a/challenge-132/abigail/go/ch-1.go b/challenge-132/abigail/go/ch-1.go
new file mode 100644
index 0000000000..648a8ff8fa
--- /dev/null
+++ b/challenge-132/abigail/go/ch-1.go
@@ -0,0 +1,41 @@
+package main
+
+//
+// See ../README.md
+//
+
+//
+// Run as: go run ch-1.go
+//
+
+import (
+ "fmt"
+)
+
+func g2j (Y int, M int, D int) int {
+ 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)
+}
+
+func j2g (J int) (int, int, int) {
+ 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
+ return Y, M, D
+}
+
+func main () {
+ julian_today := g2j (2021, 9, 22)
+ var Y, M, D int
+ for n, err := fmt . Scanf ("%d/%d/%d", &Y, &M, &D); n == 3 && err == nil
+ n, err = fmt . Scanf ("%d/%d/%d", &Y, &M, &D) {
+ julian_then := g2j (Y, M, D)
+ Y1, M1, D1 := j2g (2 * julian_then - julian_today)
+ Y2, M2, D2 := j2g (2 * julian_today - julian_then)
+ fmt . Printf ("%04d/%02d/%02d, %04d/%02d/%02d\n",
+ Y1, M1, D1, Y2, M2, D2);
+
+ }
+}
diff --git a/challenge-132/abigail/tcl/ch-1.tcl b/challenge-132/abigail/tcl/ch-1.tcl
new file mode 100644
index 0000000000..f2a49a8977
--- /dev/null
+++ b/challenge-132/abigail/tcl/ch-1.tcl
@@ -0,0 +1,55 @@
+#
+# See ../README.md
+#
+
+#
+# Run as: tclsh ch-1.tcl < input-file
+#
+
+proc idiv {a b} {
+ set sign 1
+ if {$a < 0} {
+ set sign [expr $sign * -1]
+ set a [expr -$a]
+ }
+ if {$b < 0} {
+ set sign [expr $sign * -1]
+ set b [expr -$b]
+ }
+ return [expr $sign * ($a / $b)]
+}
+
+proc g2j {Y M D} {
+ set M14 [expr $M - 14]
+ set M12 [idiv $M14 12]
+ set e1 [idiv [expr 1461 * ($Y + 4800 + $M12)] 4]
+ set e2 [idiv [expr 367 * ($M - 2 - 12 * $M12)] 12]
+ set e3 [idiv [expr $Y + 4900 + $M12] 100]
+ set e4 [idiv [expr 3 * $e3] 4]
+ return [expr $e1 + $e2 - $e4 + $D - 32075]
+}
+
+proc j2g {J} {
+ set e [expr 4 * ($J + 1401 + (((4 * $J + 274277) / 146097) * 3) / 4 \
+ - 38) + 3]
+ set D [expr ((5 * (($e % 1461) / 4) + 2) % 153) / 5 + 1]
+ set M [expr (((5 * (($e % 1461) / 4) + 2) / 153 + 2) % 12) + 1]
+ set Y [expr ($e / 1461) - 4716 + (12 + 2 - $M) / 12]
+ return "$Y $M $D"
+}
+
+set julian_today [g2j 2021 9 22]
+
+while {[gets stdin line] >= 0} {
+ lassign [split $line "/"] year month date
+ if {[string index $month 0] eq "0"} {
+ set month [string index $month 1]
+ }
+ if {[string index $date 0] eq "0"} {
+ set date [string index $date 1]
+ }
+ set julian_then [g2j $year $month $date]
+ lassign [j2g [expr 2 * $julian_then - $julian_today]] Y1 M1 D1
+ lassign [j2g [expr 2 * $julian_today - $julian_then]] Y2 M2 D2
+ puts [format "%04d/%02d/%02d, %04d/%02d/%02d" $Y1 $M1 $D1 $Y2 $M2 $D2]
+}