diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-10-20 23:41:12 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-20 23:41:12 +0100 |
| commit | 34694bb8b5916e1086cf32e7409a4c413b09397a (patch) | |
| tree | a91239c10e3bdfdc8079fa0ad29828c0d738dbef | |
| parent | 83deea11dd25e53c40ba110f2064ad9e0ca8a37d (diff) | |
| parent | f4a7636db04ba8bdeaf2133adac18e6112f992bd (diff) | |
| download | perlweeklychallenge-club-34694bb8b5916e1086cf32e7409a4c413b09397a.tar.gz perlweeklychallenge-club-34694bb8b5916e1086cf32e7409a4c413b09397a.tar.bz2 perlweeklychallenge-club-34694bb8b5916e1086cf32e7409a4c413b09397a.zip | |
Merge pull request #11054 from BarrOff/barroff-291
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); +} |
