From 8da083a35209966954224eb29d404d29999c3b53 Mon Sep 17 00:00:00 2001 From: BarrOff <58253563+BarrOff@users.noreply.github.com> Date: Sun, 10 Mar 2024 22:32:05 +0100 Subject: feat: add solutions for challenge 259 from BarrOff --- challenge-259/barroff/julia/ch-1.jl | 29 +++++++++++++++++++++++++++++ challenge-259/barroff/raku/ch-1.p6 | 21 +++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 challenge-259/barroff/julia/ch-1.jl create mode 100644 challenge-259/barroff/raku/ch-1.p6 diff --git a/challenge-259/barroff/julia/ch-1.jl b/challenge-259/barroff/julia/ch-1.jl new file mode 100644 index 0000000000..515e38daab --- /dev/null +++ b/challenge-259/barroff/julia/ch-1.jl @@ -0,0 +1,29 @@ +#!/usr/bin/env julia + +using Dates + +using Test: @test, @testset + +function banking_day_offset( + start_date::Date, + offset::T, + bank_holidays::Vector{Date} = Date[], +)::Date where {T<:Integer} + if (start_date in bank_holidays) || (Dates.dayofweek(start_date) in (6, 7)) + return banking_day_offset(start_date + Day(1), offset, bank_holidays) + end + if offset == 0 + return start_date + end + return banking_day_offset(start_date + Day(1), offset - 1, bank_holidays) +end + +@testset "Banking day offset" begin + @test banking_day_offset( + Date("2018-06-28", dateformat"y-m-d"), + 3, + [Date("2018-07-03", dateformat"y-m-d")], + ) == Date("2018-07-04", dateformat"y-m-d") + @test banking_day_offset(Date("2018-06-28", dateformat"y-m-d"), 3) == + Date("2018-07-03", dateformat"y-m-d") +end diff --git a/challenge-259/barroff/raku/ch-1.p6 b/challenge-259/barroff/raku/ch-1.p6 new file mode 100644 index 0000000000..b4c7923b7d --- /dev/null +++ b/challenge-259/barroff/raku/ch-1.p6 @@ -0,0 +1,21 @@ +#!/usr/bin/env raku + +use v6.d; + +sub banking-day-offset(Date:D $start_date, Int:D $offset, @bank_holidays = [] --> Date) { + return banking-day-offset($start_date.succ, $offset, @bank_holidays) if $start_date.day-of-week ∈ (6, 7); + return banking-day-offset($start_date.succ, $offset, @bank_holidays) if $start_date ∈ @bank_holidays; + return $start_date if $offset == 0; + return banking-day-offset($start_date.succ, $offset - 1, @bank_holidays); +} + +#| Run test cases +multi sub MAIN('test') { + use Test; + plan 2; + + is banking-day-offset(Date.new('2018-06-28'), 3, [Date.new('2018-07-03')]), + Date.new('2018-07-04'), 'works for 2018-07-04'; + is banking-day-offset(Date.new('2018-06-28'), 3), + Date.new('2018-07-03'), 'works for 2018-07-03'; +} -- cgit