ISO: Router that can swap a random pair of in→outs?

Here’s the code for a solution in BASICally. Yes, it is ungainly and repetitive, due to some safeguards in the language, and it only goes up to six outputs, because BASICally only has six outputs. ON the other hand, just one module!

A trigger to IN9 will cause two of the assignments to switch.

WHEN start()
  for pos = 1 to 6
    grab[pos] = pos
  next
  ' Initialize the mapping.
  for pos = 1 to 6
    pull_pos = floor(random(1, 7 - pos))
    out_map[pos] = grab[pull_pos]
    ' Put last value from grab[] into the location
    ' we just selected from.
    grab[pull_pos] = grab[7 - pos]
  next
END WHEN

WHEN trigger(IN9)
  switch1 = floor(random(1, 7))
  for dummy = 1 to 2 STEP 0
    switch2 = floor(random(1, 7))
    if switch1 != switch2 THEN
      EXIT FOR
    END IF
  NEXT
  temp = out_map[switch1]
  out_map[switch1] = out_map[switch2]
  out_map[switch2] = temp
END WHEN

ALSO
  out_num = out_map[1]
  if out_num == 1 THEN
    out1 = in1
  elseif out_num == 2 THEN
    out2 = in1
  elseif out_num == 3 THEN
    out3 = in1
  elseif out_num == 4 THEN
    out4 = in1
  elseif out_num == 5 THEN
    out5 = in1
  elseif out_num == 6 THEN
    out6 = in1
  END IF

  out_num = out_map[2]
  if out_num == 1 THEN
    out1 = in2
  elseif out_num == 2 THEN
    out2 = in2
  elseif out_num == 3 THEN
    out3 = in2
  elseif out_num == 4 THEN
    out4 = in2
  elseif out_num == 5 THEN
    out5 = in2
  elseif out_num == 6 THEN
    out6 = in2
  END IF

  out_num = out_map[3]
  if out_num == 1 THEN
    out1 = in3
  elseif out_num == 2 THEN
    out2 = in3
  elseif out_num == 3 THEN
    out3 = in3
  elseif out_num == 4 THEN
    out4 = in3
  elseif out_num == 5 THEN
    out5 = in3
  elseif out_num == 6 THEN
    out6 = in3
  END IF

  out_num = out_map[4]
  if out_num == 1 THEN
    out1 = in4
  elseif out_num == 2 THEN
    out2 = in4
  elseif out_num == 3 THEN
    out3 = in4
  elseif out_num == 4 THEN
    out4 = in4
  elseif out_num == 5 THEN
    out5 = in4
  elseif out_num == 6 THEN
    out6 = in4
  END IF

  out_num = out_map[5]
  if out_num == 1 THEN
    out1 = in5
  elseif out_num == 2 THEN
    out2 = in5
  elseif out_num == 3 THEN
    out3 = in5
  elseif out_num == 4 THEN
    out4 = in5
  elseif out_num == 5 THEN
    out5 = in5
  elseif out_num == 6 THEN
    out6 = in5
  END IF

  out_num = out_map[6]
  if out_num == 1 THEN
    out1 = in6
  elseif out_num == 2 THEN
    out2 = in6
  elseif out_num == 3 THEN
    out3 = in6
  elseif out_num == 4 THEN
    out4 = in6
  elseif out_num == 5 THEN
    out5 = in6
  elseif out_num == 6 THEN
    out6 = in6
  END IF
END ALSO

Here’s a patch that demonstrates it in action.

SwitchTwo.vcv (1.9 KB)

3 Likes