diff options
| author | Abigail <abigail@abigail.be> | 2021-11-14 13:03:11 +0100 |
|---|---|---|
| committer | Abigail <abigail@abigail.be> | 2021-11-14 13:03:11 +0100 |
| commit | c1db8bac0eaafcc7e7c94d712ce24dc69b776c53 (patch) | |
| tree | 76f34f10adc27d237e343671818fe451490f0906 /challenge-138 | |
| parent | 14510de14e1f435b1439c451a2fa5cb9971a7c78 (diff) | |
| download | perlweeklychallenge-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.awk | 39 | ||||
| -rw-r--r-- | challenge-138/abigail/bash/ch-1.sh | 41 | ||||
| -rw-r--r-- | challenge-138/abigail/bc/ch-1.bc | 55 | ||||
| -rw-r--r-- | challenge-138/abigail/c/ch-1.c | 43 | ||||
| -rw-r--r-- | challenge-138/abigail/go/ch-1.go | 52 | ||||
| -rw-r--r-- | challenge-138/abigail/java/ch-1.java | 47 | ||||
| -rw-r--r-- | challenge-138/abigail/lua/ch-1.lua | 44 | ||||
| -rw-r--r-- | challenge-138/abigail/node/ch-1.js | 44 | ||||
| -rw-r--r-- | challenge-138/abigail/pascal/ch-1.p | 58 | ||||
| -rw-r--r-- | challenge-138/abigail/python/ch-1.py | 40 | ||||
| -rw-r--r-- | challenge-138/abigail/r/ch-1.r | 46 | ||||
| -rw-r--r-- | challenge-138/abigail/ruby/ch-1.rb | 41 | ||||
| -rw-r--r-- | challenge-138/abigail/scheme/ch-1.scm | 49 | ||||
| -rw-r--r-- | challenge-138/abigail/t/ctest.ini | 4 | ||||
| -rw-r--r-- | challenge-138/abigail/tcl/ch-1.tcl | 38 |
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]] +} |
