I have a table with 13 entries, but based on a variable (values -1, 0, 1) I would want to return from items 1-11, 2-12, or 3-13 respectively. So the variable value would essentially tell the generator to ignore some entries from the head or tail of the list. Is there a way to accomplish this in Perchance?
If I understand correctly, you have something like:
val -1 0 1 entries a b c d e f g h i j k l m
Then based on the
val
, you would have to select: (a) if val = -1, only from a to k, (b) from b to l, © from c to m.Here is my solution: https://perchance.org/8horj02y80
First, we select the
val
, and then base the range from it. Since it is from 1-11, etc, we can have the base to be 2-12, then add (subtract) the modifier to have 1-11 for -1, 2-12 for 0, and 3-13 for +1, by having a min and max variables:modOut Modifier: [mod = val.selectOne] | Min: [min = 2 + mod] | Max: [max = 12 + mod]
Then, to create a ‘dynamic’ range, we use JavaScript’s Template Literals, to create a dynamic Perchance Shorthand List:
random = [`{${min}-${max}}`]
Essentially, the template literal would be evaluated first, so if we have
min
as 3 andmax
as 13, then it would be{3-13}
, and then Perchance would evaluate that into a random number between that range.We can now then use that value to select the item from our list, in which we can do in many ways:
.selectAll[index-1]
since the arrays are accessed with zero-start indexing.entryOut Selection: [x = random.evaluateItem] | Entry: [entries.selectAll[x-1].upperCase]
entries a ^[x == 1] b ^[x == 2] c ^[x == 3] d ^[x == 4] e ^[x == 5] f ^[x == 6] g ^[x == 7] h ^[x == 8] i ^[x == 9] j ^[x == 10] k ^[x == 11] l ^[x == 12] m ^[x == 13]
where
x
is selected before selecting the entry:entryOut Selection: [x = random.evaluateItem] | Entry: [entries.upperCase]