aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-10-20 23:41:12 +0100
committerGitHub <noreply@github.com>2024-10-20 23:41:12 +0100
commit34694bb8b5916e1086cf32e7409a4c413b09397a (patch)
treea91239c10e3bdfdc8079fa0ad29828c0d738dbef
parent83deea11dd25e53c40ba110f2064ad9e0ca8a37d (diff)
parentf4a7636db04ba8bdeaf2133adac18e6112f992bd (diff)
downloadperlweeklychallenge-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.jl22
-rw-r--r--challenge-291/barroff/raku/ch-1.p630
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 &current-middle = &is-middle.assuming(@ints, *);
+ my @res = map(&current-middle, 0 .. @ints.elems);
+ my $middle = (0 .. @ints.elems - 1).first: &current-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);
+}