aboutsummaryrefslogtreecommitdiff
path: root/challenge-138
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-11-14 13:03:11 +0100
committerAbigail <abigail@abigail.be>2021-11-14 13:03:11 +0100
commitc1db8bac0eaafcc7e7c94d712ce24dc69b776c53 (patch)
tree76f34f10adc27d237e343671818fe451490f0906 /challenge-138
parent14510de14e1f435b1439c451a2fa5cb9971a7c78 (diff)
downloadperlweeklychallenge-club-c1db8bac0eaafcc7e7c94d712ce24dc69b776c53.tar.gz
perlweeklychallenge-club-c1db8bac0eaafcc7e7c94d712ce24dc69b776c53.tar.bz2
perlweeklychallenge-club-c1db8bac0eaafcc7e7c94d712ce24dc69b776c53.zip
Solutions for week 138 in 14 languages.
Diffstat (limited to 'challenge-138')
-rw-r--r--challenge-138/abigail/awk/ch-1.awk39
-rw-r--r--challenge-138/abigail/bash/ch-1.sh41
-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/go/ch-1.go52
-rw-r--r--challenge-138/abigail/java/ch-1.java47
-rw-r--r--challenge-138/abigail/lua/ch-1.lua44
-rw-r--r--challenge-138/abigail/node/ch-1.js44
-rw-r--r--challenge-138/abigail/pascal/ch-1.p58
-rw-r--r--challenge-138/abigail/python/ch-1.py40
-rw-r--r--challenge-138/abigail/r/ch-1.r46
-rw-r--r--challenge-138/abigail/ruby/ch-1.rb41
-rw-r--r--challenge-138/abigail/scheme/ch-1.scm49
-rw-r--r--challenge-138/abigail/t/ctest.ini4
-rw-r--r--challenge-138/abigail/tcl/ch-1.tcl38
15 files changed, 641 insertions, 0 deletions
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/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/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/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/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/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/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/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/python/ch-1.py b/challenge-138/abigail/python/ch-1.py
new file mode 100644
index 0000000000..e2cb189de3
--- /dev/null
+++ b/challenge-138/abigail/python/ch-1.py
@@ -0,0 +1,40 @@
+#!/opt/local/bin/python
+
+#
+# See ../README.md
+#
+
+#
+# Run as: python ch-1.py < input-file
+#
+
+import fileinput
+
+SUNDAY = 0
+MONDAY = 1
+TUESDAY = 2
+WEDNESDAY = 3
+THURSDAY = 4
+FRIDAY = 5
+SATURDAY = 6
+
+lookup = [
+ [261, 261, 260, 260, 261, 261, 261], # Regular years
+ [262, 262, 261, 260, 261, 262, 262], # Leap years
+]
+
+
+def doomsday (year):
+ anchor = [TUESDAY, SUNDAY, FRIDAY, WEDNESDAY] [(year // 100) % 4]
+ y = year % 100
+ return (((y // 12) + (y % 12) + ((y % 12) // 4)) + anchor) % 7
+
+
+def is_leap (year):
+ if (year % 400 == 0) or (year % 4 == 0) and (year % 100 != 0):
+ return 1
+ return 0
+
+for line in fileinput . input ():
+ year = int (line)
+ print (lookup [is_leap (year)] [doomsday (year)])
diff --git a/challenge-138/abigail/r/ch-1.r b/challenge-138/abigail/r/ch-1.r
new file mode 100644
index 0000000000..8d20a7a641
--- /dev/null
+++ b/challenge-138/abigail/r/ch-1.r
@@ -0,0 +1,46 @@
+#
+# See ../README.md
+#
+
+#
+# Run as: Rscript ch-1.r < input-file
+#
+
+SUNDAY <- 0
+MONDAY <- 1
+TUESDAY <- 2
+WEDNESDAY <- 3
+THURSDAY <- 4
+FRIDAY <- 5
+SATURDAY <- 6
+
+lookup <- array (c (261, 261, 260, 260, 261, 261, 261,
+ 262, 262, 261, 260, 261, 262, 262), dim = c (2, 7))
+
+anchors <- c (TUESDAY, SUNDAY, FRIDAY, WEDNESDAY)
+
+doomsday <- function (year) {
+ anchor <- anchors [[1 + ((year %/% 100) %% 4)]]
+ y <- year %% 100
+ dday <- ((((y %/% 12) + (y %% 12) + ((y %% 12) %/% 4)) + anchor) %% 7)
+ return (dday)
+}
+
+is_leap <- function (year) {
+ if ((year %% 400 == 0) | (year %% 4 == 0) & (year %% 100 != 0)) {
+ return (1)
+ }
+ return (0)
+}
+
+
+
+stdin <- file ('stdin', 'r')
+repeat {
+ year <- readLines (stdin, n = 1)
+ if (length (year) == 0) {
+ break
+ }
+ year = as.integer (year)
+ cat (lookup [[1 + is_leap (year), 1 + doomsday (year)]], "\n")
+}
diff --git a/challenge-138/abigail/ruby/ch-1.rb b/challenge-138/abigail/ruby/ch-1.rb
new file mode 100644
index 0000000000..2489b2c18b
--- /dev/null
+++ b/challenge-138/abigail/ruby/ch-1.rb
@@ -0,0 +1,41 @@
+#!/usr/bin/ruby
+
+#
+# See ../README.md
+#
+
+#
+# Run as: ruby ch-1.rb < input-file
+#
+
+lookup = [
+ [261, 261, 260, 260, 261, 261, 261],
+ [262, 262, 261, 260, 261, 262, 262],
+]
+
+$sunday = 0
+$monday = 1
+$tuesday = 2
+$wednesday = 3
+$thursday = 4
+$friday = 5
+$saturday = 6
+
+def doomsday (year)
+ anchor = [$tuesday, $sunday, $friday, $wednesday][(year / 100) % 4]
+ y = year % 100
+ return (((y / 12) + (y % 12) + ((y % 12) / 4)) + anchor) % 7
+end
+
+def is_leap (year)
+ if (year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0) then
+ return 1
+ end
+ return 0
+end
+
+ARGF . each_line do
+ | year |
+ year = year . to_i
+ puts (lookup [is_leap year] [doomsday year])
+end
diff --git a/challenge-138/abigail/scheme/ch-1.scm b/challenge-138/abigail/scheme/ch-1.scm
new file mode 100644
index 0000000000..682a842a4f
--- /dev/null
+++ b/challenge-138/abigail/scheme/ch-1.scm
@@ -0,0 +1,49 @@
+;;;
+;;; See ../README.md
+;;;
+
+;;;
+;;; Run as: guile --no-auto-compile ch-1.scm
+;;;
+
+(define lookup (list (list 261 261 260 260 261 261 261)
+ (list 262 262 261 260 261 262 262)))
+
+(define SUNDAY 0)
+(define MONDAY 1)
+(define TUESDAY 2)
+(define WEDNESDAY 3)
+(define THURSDAY 4)
+(define FRIDAY 5)
+(define SATURDAY 6)
+
+(define anchors (list TUESDAY SUNDAY FRIDAY WEDNESDAY))
+
+(define (doomsday year)
+ (define anchor (list-ref anchors (modulo (quotient year 100) 4)))
+ (define y (modulo year 100))
+ (modulo (+ (quotient y 12)
+ (modulo y 12)
+ (quotient (modulo y 12) 4) anchor) 7)
+)
+
+(define (is_leap year)
+ (if (or (= 0 (modulo year 400))
+ (and (= 0 (modulo year 4))
+ (< 0 (modulo year 100)))) 1 0)
+)
+
+(define (main)
+ (define year (read))
+ (if (not (eof-object? year))
+ (begin
+ (display (list-ref (list-ref lookup (is_leap year))
+ (doomsday year)))
+ (newline)
+ (main)
+ )
+ )
+)
+
+(main)
+
diff --git a/challenge-138/abigail/t/ctest.ini b/challenge-138/abigail/t/ctest.ini
index 527781acbb..9897fb684c 100644
--- a/challenge-138/abigail/t/ctest.ini
+++ b/challenge-138/abigail/t/ctest.ini
@@ -6,3 +6,7 @@
[names]
1-1 = Given Examples
2-1 = Given Examples
+
+
+[1-1/bc]
+add_to_input = 0
diff --git a/challenge-138/abigail/tcl/ch-1.tcl b/challenge-138/abigail/tcl/ch-1.tcl
new file mode 100644
index 0000000000..7e613636bd
--- /dev/null
+++ b/challenge-138/abigail/tcl/ch-1.tcl
@@ -0,0 +1,38 @@
+#
+# See ../README.md
+#
+
+#
+# Run as: tclsh ch-1.tcl < input-file
+#
+
+set lookup [list [list 261 261 260 260 261 261 261] \
+ [list 262 262 261 260 261 262 262]]
+
+set SUNDAY 0
+set MONDAY 1
+set TUESDAY 2
+set WEDNESDAY 3
+set THURSDAY 4
+set FRIDAY 5
+set SATURDAY 6
+
+set Anchors [list $TUESDAY $SUNDAY $FRIDAY $WEDNESDAY]
+
+proc doomsday year {
+ upvar 1 Anchors anchors
+ set anchor [lindex $anchors [expr ($year / 100) % 4]]
+ set y [expr $year % 100]
+ return [expr ((($y / 12) + ($y % 12) + (($y % 12) / 4)) + $anchor) % 7]
+}
+
+proc is_leap year {
+ if {($year % 400 == 0) || ($year % 4 == 0) && ($year % 100 != 0)} {
+ return 1
+ }
+ return 0
+}
+
+while {[gets stdin year] >= 0} {
+ puts [lindex $lookup [is_leap $year] [doomsday $year]]
+}