Hi,
We have an expression rule (see below image). We want to get the indices of numbers from the array (local!numberList) that would not make the local!initialValue negative when added together.
The result we are expecting from the sample values in the image is: {1, 2, 3, 5}
If we have local!initialValue = 100 & local!numberlist = {5, 100, 15, 100, 25}, the result should be: {1, 3, 5}
We're having a hard time thinking of the way we can do this. Would gladly appreciate your help.
Discussion posts and replies are publicly visible
Can you ellobrate what does added together means?
Let's say for iteration 3, we are indexing item 1, 2, and 3 from the local!numberList, which value is {5, 10, 15, 100, 25}, so the value that the sum() function would return in this iteration is 30. 100 - 30 = 70, so in this case the index should be returned.
But for iteration 4, the sum would be 130. So 100 - 130 would make the local!initialValue negative.
For the 5th iteration, we want the 4th item to be removed from the list to add, since having it would make the initial value negative. So for 5th iteration the value of sum should be 55 - the summation of indices 1, 2, 3,and 5 excluding 4.
Hey,
Could you please provide me the output of these test cases to enhance my understanding?
Initial Value: 100 for both cases.
Test Case 1:
[10, 5,100, 90, 25]
Test Case 2:
[5, 5, 100, 90, 10]
Test Case 1: {1, 2, 5}
Test Case 2: {1, 2, 4}
I think this calls for a recursive approach. I wrote a blog post about implementing algorithms in Appian.
https://appian.rocks/2022/08/29/complex-algorithms-in-appian/
Code
a!localVariables( local!a:100, local!array:{5,100,15,100,25}, reject( fn!isnull, a!forEach( items: local!array, expression: a!localVariables( local!Boolean:if( fv!isFirst, {fv!item<100}, a!forEach( items: enumerate(fv!index-1)+1, expression: local!a-sum(index(local!array,enumerate(fv!item)+1,0))>0 ) ), local!currentItem:fv!item, local!BooleanSum:if( fv!isFirst, 0, sum(a!forEach( items: local!Boolean, expression: if( fv!item, index(local!array,fv!index,{}), 0 ) )) ), if( local!a-sum(local!BooleanSum,local!currentItem)>0, fv!index, null() ) ) ) ) )
result
Woah, I didn't know this. Thank you so much!
Thank you for sharing this.