diff options
| author | BarrOff <58253563+BarrOff@users.noreply.github.com> | 2024-10-20 22:48:55 +0200 |
|---|---|---|
| committer | BarrOff <58253563+BarrOff@users.noreply.github.com> | 2024-10-20 22:48:55 +0200 |
| commit | f4a7636db04ba8bdeaf2133adac18e6112f992bd (patch) | |
| tree | 4553643cde6f4285c811f2e25ec224b545fe38ca | |
| parent | ba48b5567e254df928af80c244fbfc45b2a64be4 (diff) | |
| download | perlweeklychallenge-club-f4a7636db04ba8bdeaf2133adac18e6112f992bd.tar.gz perlweeklychallenge-club-f4a7636db04ba8bdeaf2133adac18e6112f992bd.tar.bz2 perlweeklychallenge-club-f4a7636db04ba8bdeaf2133adac18e6112f992bd.zip | |
feat: add solutions for challenge 291 from BarrOff
| -rw-r--r-- | challenge-291/barroff/julia/ch-1.jl | 22 | ||||
| -rw-r--r-- | challenge-291/barroff/raku/ch-1.p6 | 30 |
2 files changed, 52 insertions, 0 deletions
diff --git a/challenge-291/barroff/julia/ch-1.jl b/challenge-291/barroff/julia/ch-1.jl new file mode 100644 index 0000000000..59ccd4f26f --- /dev/null +++ b/challenge-291/barroff/julia/ch-1.jl @@ -0,0 +1,22 @@ +#!/usr/bin/env julia + +using Test: @test, @testset + +function middle_index(ints::Vector{T})::Int where {T<:Integer} + if sum(ints[2:end]) == 0 + return 0 + end + mi = findfirst(x -> sum(ints[1:x-1]) == sum(ints[x+1:end]), 2:length(ints) - 1) + if isnothing(mi) + return sum(ints[1:end-1]) == 0 ? length(ints) - 1 : -1 + else + return mi + end +end + +@testset "middle index" begin + @test middle_index([2, 3, -1, 8, 4]) == 3 + @test middle_index([1, -1, 4]) == 2 + @test middle_index([2, 5]) == -1 + @test middle_index([8, -1, 1]) == 0 +end diff --git a/challenge-291/barroff/raku/ch-1.p6 b/challenge-291/barroff/raku/ch-1.p6 new file mode 100644 index 0000000000..05c385bf86 --- /dev/null +++ b/challenge-291/barroff/raku/ch-1.p6 @@ -0,0 +1,30 @@ +#!/usr/bin/env raku + +sub is-middle(@ints, Int $index --> Bool) { + return @ints[1..*-1].sum == 0 if $index == 0; + return @ints[0..*-2].sum == 0 if $index == @ints.elems - 1; + return @ints[0..$index - 1].sum == @ints[$index+1..*-1].sum; +} + +sub middle-index(@ints --> Int) { + my ¤t-middle = &is-middle.assuming(@ints, *); + my @res = map(¤t-middle, 0 .. @ints.elems); + my $middle = (0 .. @ints.elems - 1).first: ¤t-middle, :k; + return $middle.defined ?? $middle !! -1; +} + +#| Run test cases +multi sub MAIN('test') { + use Test; + plan 4; + + is middle-index([2, 3, -1, 8, 4]), 3, 'Works for (2, 3, -1, 8, 4)'; + is middle-index([1, -1, 4]), 2, 'Works for (1, -1, 4)'; + is middle-index([2, 5]), -1, 'Works for (2, 5)'; + is middle-index([8, -1, 1]), 0, 'Works for (8, -1, 1)'; +} + +#| Take user provided list like 1 1 2 2 2 3 +multi sub MAIN(*@ints) { + say middle-index(@ints); +} |
