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?

  • VioneTM
    link
    English
    1
    edit-2
    19 days ago

    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 and max 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]