Skip to content

Instantly share code, notes, and snippets.

@rodrigogiraoserrao
Created August 6, 2020 16:02
Show Gist options
  • Save rodrigogiraoserrao/99bbab8cd5728858608fd20502d59aba to your computer and use it in GitHub Desktop.
Save rodrigogiraoserrao/99bbab8cd5728858608fd20502d59aba to your computer and use it in GitHub Desktop.
RGS's solution for Problem 8, Phase 2 of 2020 APL competition (see https://mathspp.com/blog/2020-apl-competition for my thoughts on it)
PROBLEM 8.1
Balance {
(⎕IO ⎕ML ⎕WX) 0 1 3
Given an integer vector ⍵, find a 2-partition with equal sums.
Monadic function expecting an integer vector.
This algorithm is O(2*≢⍵); we compute possible partitions of ⍵ and check
if their sums satisfy the requirement.
Return a 2-element vector of integer vectors.
S 1 Check simple necessary properties:
2|S: odd sum can't be evenly split
(/0)S<2×/: all integers are ≥0 and largest element is too big
s S÷2
compute all relevant possible partitions of ⍵; we can arbitrarily fix the partition in which the 1st elem. of ⍵ appears
mask 1 2¯1 2*¯1+
ss 1 mask× ()/ 1 mask
ps mask / s = ss
0=ps: return ⍬ if there is no solution.
p ps
(p/),(/~p)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment