Here two different approaches (only ExpressionScript)
The ideas are to assign random numbers to the selected subquestions and then take the five lowest numbers.
This is similar to the javascript approach where we shuffled the array.
1. Here we calculate a max value. Only subquestions with lower numbers are displayed.
Create a (hidden) question (QC) of type "multiple short text" with 21 subquestion (15 to store the random number - 1,2,3,..., 5 to store the lowest, second lowest, ... - m1, m2, ...number, and the "max".
Create a (hidden) question of type equation with
First we assign random numbers{QC_1 = if(is_empty(QC_1), rand(1,10000), QC_1)}
{QC_2 = if(is_empty(QC_2), rand(1,10000), QC_2)}
{QC_3 = if(is_empty(QC_3), rand(1,10000), QC_3)}
{QC_4 = if(is_empty(QC_4), rand(1,10000), QC_4)}
{QC_5 = 999999}
{QC_6 = if(is_empty(QC_6), rand(1,10000), QC_6)}
{QC_7 = if(is_empty(QC_7), rand(1,10000), QC_7)}
{QC_8 = if(is_empty(QC_8), rand(1,10000), QC_8)}
{QC_9 = if(is_empty(QC_9), rand(1,10000), QC_9)}
{QC_10 = if(is_empty(QC_10), rand(1,10000), QC_10)}
{QC_11 = if(is_empty(QC_11), rand(1,10000), QC_11)}
{QC_12 = if(is_empty(QC_12), rand(1,10000), QC_12)}
{QC_13 = if(is_empty(QC_13), rand(1,10000), QC_13)}
{QC_14 = if(is_empty(QC_14), rand(1,10000), QC_14)}
{QC_15 = if(is_empty(QC_15), rand(1,10000), QC_15)}
QC_5 has already a number that is out of the usual range.
Now all not selected subquestion get this value
{QC_1 = if(Q00_1=="Y",QC_1,999999)}
{QC_2 = if(Q00_2=="Y",QC_2,999999)}
{QC_3 = if(Q00_3=="Y",QC_3,999999)}
{QC_4 = if(Q00_4=="Y",QC_4,999999)}
{QC_6 = if(Q00_6=="Y",QC_6,999999)}
{QC_7 = if(Q00_7=="Y",QC_7,999999)}
{QC_8 = if(Q00_8=="Y",QC_8,999999)}
{QC_9 = if(Q00_9=="Y",QC_9,999999)}
{QC_10 = if(Q00_10=="Y",QC_10,999999)}
{QC_11 = if(Q00_11=="Y",QC_11,999999)}
{QC_12 = if(Q00_12=="Y",QC_12,999999)}
{QC_13 = if(Q00_13=="Y",QC_13,999999)}
{QC_14 = if(Q00_14=="Y",QC_14,999999)}
{QC_15 = if(Q00_15=="Y",QC_15,999999)}
The minimum if calculated
{QC_m1 = min(QC_1,QC_2,QC_3,QC_4,QC_5,QC_6,QC_7,QC_8,QC_9,QC_10,QC_11,QC_12,QC_13,QC_14,QC_15)}
The second, third,... minimums are calculated
{QC_m2 = min(if(QC_1==QC_m1,999999,QC_1), if(QC_2==QC_m1,999999,QC_2), if(QC_3==QC_m1,999999,QC_3), if(QC_4==QC_m1,999999,QC_4), if(QC_5==QC_m1,999999,QC_5), if(QC_6==QC_m1,999999,QC_6), if(QC_7==QC_m1,999999,QC_7), if(QC_8==QC_m1,999999,QC_8), if(QC_9==QC_m1,999999,QC_9), if(QC_10==QC_m1,999999,QC_10), if(QC_11==QC_m1,999999,QC_11), if(QC_12==QC_m1,999999,QC_12), if(QC_13==QC_m1,999999,QC_13), if(QC_14==QC_m1,999999,QC_14), if(QC_15==QC_m1,999999,QC_15))}{QC_m3 = min(if(QC_1<=QC_m2,999999,QC_1), if(QC_2<=QC_m2,999999,QC_2), if(QC_3<=QC_m2,999999,QC_3), if(QC_4<=QC_m2,999999,QC_4), if(QC_5<=QC_m2,999999,QC_5), if(QC_6<=QC_m2,999999,QC_6), if(QC_7<=QC_m2,999999,QC_7), if(QC_8<=QC_m2,999999,QC_8), if(QC_9<=QC_m2,999999,QC_9), if(QC_10<=QC_m2,999999,QC_10), if(QC_11<=QC_m2,999999,QC_11), if(QC_12<=QC_m2,999999,QC_12), if(QC_13<=QC_m2,999999,QC_13), if(QC_14<=QC_m2,999999,QC_14), if(QC_15<=QC_m2,999999,QC_15))}
m4 and m5 analogue.
Now we handle subquestion 5.
If it was selected the limit of the other subquestions is m4, otherwise m5
{QC_max = if(Q00_5=="Y", QC_m4, QC_m5)}
Now the subquestion relevance are quite short
Q00_1=="Y" AND QC_1 <= QC_max
Q00_2=="Y" AND QC_2 <= QC_max
...
Q00_5=="Y"
Q00_6=="Y" AND QC_6 <= QC_max
...
The second idea is similar, but instead of a long equation we move this to the subquestion relvance
Create a (hidden) question (QC) of type "multiple short text" with 15 subquestion (15 to store the random number - 1,2,3,...).
Create a (hidden) question of type equation with
{QC_1 = if(is_empty(QC_1), rand(1,10000), QC_1)}
{QC_2 = if(is_empty(QC_2), rand(1,10000), QC_2)}
{QC_3 = if(is_empty(QC_3), rand(1,10000), QC_3)}
{QC_4 = if(is_empty(QC_4), rand(1,10000), QC_4)}
{QC_5 = 999999}
{QC_6 = if(is_empty(QC_6), rand(1,10000), QC_6)}
{QC_7 = if(is_empty(QC_7), rand(1,10000), QC_7)}
{QC_8 = if(is_empty(QC_8), rand(1,10000), QC_8)}
{QC_9 = if(is_empty(QC_9), rand(1,10000), QC_9)}
{QC_10 = if(is_empty(QC_10), rand(1,10000), QC_10)}
{QC_11 = if(is_empty(QC_11), rand(1,10000), QC_11)}
{QC_12 = if(is_empty(QC_12), rand(1,10000), QC_12)}
{QC_13 = if(is_empty(QC_13), rand(1,10000), QC_13)}
{QC_14 = if(is_empty(QC_14), rand(1,10000), QC_14)}
{QC_15 = if(is_empty(QC_15), rand(1,10000), QC_15)}
Now in the subquestion relevance enter
1:
Q00_1=="Y" AND sum( intval(Q00_2=="Y" AND QC_2<QC_1), intval(Q00_3=="Y" AND QC_3<QC_1), intval(Q00_4=="Y" AND QC_4<QC_1), intval(Q00_5=="Y" AND QC_5<QC_1), intval(Q00_6=="Y" AND QC_6<QC_1), intval(Q00_7=="Y" AND QC_7<QC_1), intval(Q00_8=="Y" AND QC_8<QC_1), intval(Q00_9=="Y" AND QC_9<QC_1), intval(Q00_10=="Y" AND QC_10<QC_1), intval(Q00_11=="Y" AND QC_11<QC_1), intval(Q00_12=="Y" AND QC_12<QC_1), intval(Q00_13=="Y" AND QC_13<QC_1), intval(Q00_14=="Y" AND QC_14<QC_1), intval(Q00_15=="Y" AND QC_15<QC_1) )<5-intval(Q00_5=="Y")
2:
Q00_2=="Y" AND sum( intval(Q00_2=="Y" AND QC_1<QC_2), intval(Q00_3=="Y" AND QC_3<QC_2), intval(Q00_4=="Y" AND QC_4<QC_2), intval(Q00_5=="Y" AND QC_5<QC_2), intval(Q00_6=="Y" AND QC_6<QC_2), intval(Q00_7=="Y" AND QC_7<QC_2), intval(Q00_8=="Y" AND QC_8<QC_2), intval(Q00_9=="Y" AND QC_9<QC_2), intval(Q00_10=="Y" AND QC_10<QC_2), intval(Q00_11=="Y" AND QC_11<QC_2), intval(Q00_12=="Y" AND QC_12<QC_2), intval(Q00_13=="Y" AND QC_13<QC_2), intval(Q00_14=="Y" AND QC_14<QC_2), intval(Q00_15=="Y" AND QC_15<QC_2) )<5-intval(Q00_5=="Y")
...
5:
Q00_5=="Y"
6:
Q00_6=="Y" AND sum(intval(Q00_6=="Y" AND QC_1<QC_6), intval(Q00_2=="Y" AND QC_2<QC_6), intval(Q00_3=="Y" AND QC_3<QC_6), intval(Q00_4=="Y" AND QC_4<QC_6), intval(Q00_5=="Y" AND QC_5<QC_6), intval(Q00_7=="Y" AND QC_7<QC_6), intval(Q00_8=="Y" AND QC_8<QC_6), intval(Q00_9=="Y" AND QC_9<QC_6), intval(Q00_10=="Y" AND QC_10<QC_6), intval(Q00_11=="Y" AND QC_11<QC_6), intval(Q00_12=="Y" AND QC_12<QC_6), intval(Q00_13=="Y" AND QC_13<QC_6), intval(Q00_14=="Y" AND QC_14<QC_6), intval(Q00_15=="Y" AND QC_15<QC_6) )<5-intval(Q00_5=="Y")
...
15:
Q00_15=="Y" AND sum(intval(Q00_15=="Y" AND QC_1<QC_15), intval(Q00_2=="Y" AND QC_2<QC_15), intval(Q00_3=="Y" AND QC_3<QC_15), intval(Q00_4=="Y" AND QC_4<QC_15), intval(Q00_5=="Y" AND QC_5<QC_15), intval(Q00_6=="Y" AND QC_6<QC_15), intval(Q00_7=="Y" AND QC_7<QC_15), intval(Q00_8=="Y" AND QC_8<QC_15), intval(Q00_9=="Y" AND QC_9<QC_15), intval(Q00_10=="Y" AND QC_10<QC_15), intval(Q00_11=="Y" AND QC_11<QC_15), intval(Q00_12=="Y" AND QC_12<QC_15), intval(Q00_13=="Y" AND QC_13<QC_15), intval(Q00_14=="Y" AND QC_14<QC_15) )<5-intval(Q00_5=="Y")
I am sure there are more approaches.
Use your imagination.
Joffm
Volunteers are not paid.
Not because they are worthless, but because they are priceless