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?
There are a couple of ways… One is using odds to prevent/allow items from being selected.
But, thinking about this a different way, you can make groups with the name -1, 0, and 1, and grab a group by name–with your variable.
Each item and group/list is a property of its parent:
parent child1 child2
You can grab child1 by using the code
parent.child1
. But also if you have a variableprop_name
with the value"child1"
you can use that to grab a property of that name using the codeparent[prop_name]
. Even if the variable’s value is a number like -1, 0, or 1, you can use it the same way.I’ve demonstrated both methods here: https://perchance.org/679qmltn63#edit
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:
- Via
.selectAll[index-1]
since the arrays are accessed with zero-start indexing.
entryOut Selection: [x = random.evaluateItem] | Entry: [entries.selectAll[x-1].upperCase]
- Via Dynamic Odds (What is on the demo generator) For the dynamic odds, we can just add them directly on the entry list:
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]
- Via
Thanks for these solutions - clearly I have a lot to learn about Perchance, and some of these techniques will be helpful with some things I want to do in the future. I just discovered Perchance within the last week and really finding it useful for some tools for gaming.
I came up with this solution after posting the question - I created a “showhead” and “showtail” variable and set them to 0 or 1 based on my input field value, then tagged just the first and last list entries with “conditional odds” based on that value - like
lastitem ^[showtail]