Quite some time after that example was done (like more than a decade) someone wanted multiple numbers of items scrambled in those odd and even blocks however when you do that to the above example it fails. What needs to happen is the <ms# 1> <ms# 2> at the start of even blocks needs to get flipped so the <ms# 2> gets locked in place by the <ms# 1>, here's the item file with our changes in bold:
<mss 1,1> <mss 2,1> F10 <vm desktop>
As a
side note it occurred to me that with the reversal of those delimiters maybe the
cancelling <ms# 2> keywords
could be eliminated but doing so locks the odd items from scrambling which gives
us the big clue for the need of the cancelling keywords, they're needed to flip
what scramble is going to lock. Wasn't kidding about the tumor
cultivation, perhaps if I'd chosen to lock the odd blocks first cancelling
dollars wouldn't be needed, getting this stuff working is so arduous however
that I'm going with what works and am disinclined to probe the matter just for
the hell of it (I'm betting that something else devious would be needed
however). Here in multiscramble2.itm you see that if I didn't have the
extra <ms# 2> keyword
(now a bold $) in there the first odd block of items would be locked instead of
the second even block and instead it just cancels with the <ms# 2>
at the start of odd blocks:
The finished result (scrambled.itm):
S1 F10 <vm desktop>
0
"{instructions";
+1101 * "{target" /;
+3201 * "{target" /;
+3103 *
"{target" /;
+2104 * "{target" /;
+1104 * "{target" /;
+3202 *
"{target" /;
+2101 * "{target" /;
+3101 * "{target" /;
+2201 *
"{target" /;
+2102 * "{target" /;
+3104 * "{target" /;
+1202 *
"{target" /;
+1201 * "{target" /;
+1103 * "{target" /;
+2103 *
"{target" /;
+2202 * "{target" /;
+1102 * "{target" /;
+3102 *
"{target" /;
0 "{The end" l;
And then someone wanted
three items scrambled... At first I didn't think it was possible but
eventually I figured out all the weird multi-scrambling laws again and after a
three or four tries nailed it. Basically what we need is three scrambles, one with dollars around the first and third items, one with dollars around the last two and one with dollars around the
first two -- I tried other combinations and maybe there's a solution but I
didn't twig to it till I tried that combination. Again I use an extra dummy iteration 2 dollars at the start to cancel an iteration 2 dollars that has to be in
the first item of every group of three items and another at the end to match the last iteration 2 dollars that moves with the items.
This is because in a multi-scramble like this individual dollars have to be in
ascending order otherwise they get orphaned by scramble when there's no
semicolon after them. The item file itself:
<vm desktop> f30 <cr> <mss 1,1> <mss 2,1> <mss 3,1> F10
<ms# 1>
<ms# 2> <ms# 3>
0 "instructions";
<ms# 3> <ms# 2> <ms# 2> <ms# 1>
<ms# 1> <ms# 2> <ms# 3> +101 * "target" /; <ms# 1>
<ms# 2> +102 * "target" /;
<ms# 1> <ms# 3> +103 * "target" /; <ms# 1>
<ms# 1> <ms# 2> <ms# 3> +201 * "target" /; <ms# 1>
<ms# 2> +202 * "target" /;
<ms# 1> <ms# 3> +203 * "target" /; <ms# 1>
<ms# 1> <ms# 2> <ms# 3> +301 * "target" /; <ms# 1>
<ms# 2> +302 * "target" /;
<ms# 1> <ms# 3> +303 * "target" /; <ms# 1>
<ms# 1> <ms# 2> <ms# 3> +401 * "target" /; <ms# 1>
<ms# 2> +402 * "target" /;
<ms# 1> <ms# 3> +403 * "target" /; <ms# 1>
Ideally what you'd want is something
more like the following, however that last
<ms# 2>
in bold will be snipped in the first multi-scramble between the underlined
<ms# 1>
before it and the <ms#
1> in item 201 (strike through text isn't
there, it's only for demonstration).
...
0 "instructions";
<ms# 3> <ms# 2>
<ms# 2> <ms# 1>
<ms# 1>
<ms# 2>
<ms# 3> +101 * "target" /; <ms# 1>
<ms# 2> +102 * "target" /;
<ms# 1> <ms# 3> +103 * "target" /;
<ms# 1>
<ms# 2>
<ms# 1> <ms# 2> <ms# 3> +201 * "target" /; <ms# 1>
...
So you have to put the two <ms# 1> keywords before the <ms# 2> and then you have to have an extra <ms# 2> at the start to cancel the extra one you've just added, straight forward no?
This is multiscramble1.itm:
<vm desktop> f30 <cr> S1 <mss 2,1> <mss 3,1> F10
$ <ms# 2> <ms# 3>
0 "{instructions";
<ms# 3> <ms# 2> <ms# 2> $
$ <ms# 2> <ms# 3> +101 * "{target" /; $
<ms# 2> +102 * "{target" /;
$ <ms# 3> +103 * "{target" /; $
$ <ms# 2> <ms# 3> +201 * "{target" /; $
<ms# 2> +202 * "{target" /;
$ <ms# 3> +203 * "{target" /; $
$ <ms# 2> <ms# 3> +301 * "{target" /; $
<ms# 2> +302 * "{target" /;
$ <ms# 3> +303 * "{target" /; $
$ <ms# 2> <ms# 3> +401 * "{target" /; $
<ms# 2> +402 * "{target" /;
$ <ms# 3> +403 * "{target" /; $
$ <ms# 2> <ms# 2> <ms# 3>
0 "{The end" l;
<ms# 3> <ms# 2> $
This is multiscramble2.itm:
<vm desktop> f30 <cr> S1 <mss 3,1>
F10
$ <ms# 3>
0 "{instructions";
<ms# 3> $ $
$ <ms# 3> +101 * "{target" /;
$ +402 * "{target" /;
<ms# 3> +103 * "{target" /;
$ <ms# 3> +201 * "{target" /;
$ +202 * "{target" /;
<ms# 3> +203 * "{target" /;
$ <ms# 3> +301 * "{target" /;
$ +302 * "{target" /;
<ms# 3> +303 * "{target" /;
$ <ms# 3> +401 * "{target" /;
$ +102 * "{target" /;
<ms# 3> +403 * "{target" /;
$ $ <ms# 3>
0 "{The end" l;
<ms# 3> $
This is multiscramble3.itm:
<vm desktop> f30 <cr> S1 F10
$
0 "{instructions";
$
$ +401 * "{target" /;
+402 * "{target" /;
$ +103 * "{target" /;
$ +201 * "{target" /;
+202 * "{target" /;
$ +203 * "{target" /;
$ +101 * "{target" /;
+302 * "{target" /;
$ +303 * "{target" /;
$ +301 * "{target" /;
+102 * "{target" /;
$ +403 * "{target" /;
$
0 "{The end" l;
$
The finished result (scrambled.itm):
<vm desktop> f30 <cr> S1 F10
0 "{instructions";
+401 * "{target" /;
+402 * "{target" /;
+403 * "{target" /;
+201 * "{target" /;
+202 * "{target" /;
+303 * "{target" /;
+101 * "{target" /;
+302 * "{target" /;
+103 * "{target" /;
+301 * "{target" /;
+102 * "{target" /;
+203 * "{target" /;
0 "{The end" l;
And then just to test whether I had in
fact figured out the key rule (that the
<ms#>
keywords had to be in ascending order at the start of the items) I went ahead an
tried a four way scramble and it hardly took any time to get right. Here with
each multi-scramble iteration it scrambles the item number of that iteration
locking the others in place. A good bit of rearranging of
<ms#>
keywords was needed to get them in ascending order versus where one would place
them at the end of items but it works, you do need an couple of extra
<ms#>
keywords at the start an end with the scrambling done this way but hey, it's
science now and not voodoo. As a technical note more to remind myself how
this all works than anything else the extra cancelling <ms#>
keywords being for interior scrambles, iterations 2 and 3, iterations 1 and 4
being on the ends themselves don't need the extra <ms#>
keywords so if you wanted a 5 way scramble you'd be looking to renumber the
iteration 4 keywords and duplicate the iteration 3 ones renumbering them to 4.
<vm desktop> f30 <cr> <mss 1,1> <mss 2,1>
<mss 3,1> <mss 4,1> F10
<ms# 1> <ms# 2> <ms# 3> <ms# 4>
0 "instructions";
<ms# 4> <ms# 3> <ms# 3> <ms# 2> <ms# 2> <ms# 1>
<ms# 2> <ms# 2> <ms# 3> <ms# 3> <ms# 4> +101 * "target" /;
<ms# 1> <ms# 2> +102 * "target" /;
<ms# 2> <ms# 3> +103 * "target" /;
<ms# 3> <ms# 4> +104 * "target" /; <ms# 1>
<ms# 2> <ms# 2> <ms# 3> <ms# 3> <ms# 4> +201 * "target" /;
<ms# 1> <ms# 2> +202 * "target" /;
<ms# 2> <ms# 3> +203 * "target" /;
<ms# 3> <ms# 4> +204 * "target" /; <ms# 1>
<ms# 2> <ms# 2> <ms# 3> <ms# 3> <ms# 4> +301 * "target" /;
<ms# 1> <ms# 2> +302 * "target" /;
<ms# 2> <ms# 3> +303 * "target" /;
<ms# 3> <ms# 4> +304 * "target" /; <ms# 1>
<ms# 2> <ms# 2> <ms# 3> <ms# 3> <ms# 4> +401 * "target" /;
<ms# 1> <ms# 2> +402 * "target" /;
<ms# 2> <ms# 3> +403 * "target" /;
<ms# 3> <ms# 4> +404 * "target" /; <ms# 1>
<ms# 1> <ms# 2> <ms# 2> <ms# 3> <ms# 3> <ms# 4>
0 "The end" l;
<ms# 4> <ms# 3> <ms# 2> <ms# 1>
And then someone wanted the four way
multi-scramble but in two counterbalanced blocks. So we need a fifth
iteration of scrambling that does the large scale block move and all the
previous four iterations need a scramble emit between the two blocks and that's
where the fun begins. First of you need an actual item in there otherwise
scramble will snip the remaining multi-scramble commands (easy enough just use
an empty comment item !; ) but the ordering of the dollars and the scramble emit
commands took a while to latch on to. In fact the wrong order blows
scrambles brains out in singularly impressive ways with blocks of items winding
up all over the place. Basically you want to imitate the multi-scramble
commands around the instructions with scramble emits in the right places.
Fortunately for you I figured it out where that is....
<ep>
<vm desktop> f30 <cr>
<mss
1,1> <mss 2,1> <mss 3,1> <mss 4,1> <mss 5,1> <msvg 5,1000>
F10
<eop>
<ms# 1> <ms# 2> <ms# 3> <ms# 4> <ms# 5>
0 "instructions";
<ms# 5> <ms#
4> <ms# 3> <ms# 3> <ms# 2> <ms# 2> <ms# 1>
<ms# 2> <ms# 2> <ms# 3> <ms#
3> <ms# 4> +101 * "target" /;
<ms# 1> <ms# 2> +102 * "target" /;
<ms# 2> <ms#
3> +103 * "target" /;
<ms# 3> <ms# 4> +104 * "target" /; <ms# 1>
<ms#
2> <ms# 2> <ms# 3> <ms# 3> <ms# 4> +201 * "target" /;
<ms# 1> <ms# 2> +202 *
"target" /;
<ms# 2> <ms# 3> +203 * "target" /;
<ms# 3> <ms# 4> +204 *
"target" /; <ms# 1>
<ms# 2> <ms# 2> <ms# 3> <ms# 3> <ms# 4> +301 *
"target" /;
<ms# 1> <ms# 2> +302 * "target" /;
<ms# 2> <ms# 3> +303 *
"target" /;
<ms# 3> <ms# 4> +304 * "target" /; <ms# 1>
<ms# 2> <ms# 2>
<ms# 3> <ms# 3> <ms# 4> +401 * "target" /;
<ms# 1> <ms# 2> +402 * "target" /;
<ms# 2> <ms# 3> +403 * "target" /;
<ms# 3> <ms# 4> +404 * "target" /; <ms# 1>
<ms\ 1> <ms# 1> <ms# 2>
<ms\ 2> <ms# 2> <ms# 3>
<ms\ 3> <ms# 3>
<ms\ 4> <ms# 4>
!; <ms# 4> <ms# 3> <ms# 3> <ms# 2> <ms# 2> <ms# 1>
<ms# 2> <ms# 2> <ms# 3> <ms# 3> <ms# 4> +1101 * "target" /;
<ms# 1> <ms#
2> +1102 * "target" /;
<ms# 2> <ms# 3> +1103 * "target" /;
<ms# 3> <ms# 4>
+1104 * "target" /; <ms# 1>
<ms# 2> <ms# 2> <ms# 3> <ms# 3> <ms# 4> +1201
* "target" /;
<ms# 1> <ms# 2> +1202 * "target" /;
<ms# 2> <ms# 3> +1203 *
"target" /;
<ms# 3> <ms# 4> +1204 * "target" /; <ms# 1>
<ms# 2> <ms#
2> <ms# 3> <ms# 3> <ms# 4> +1301 * "target" /;
<ms# 1> <ms# 2> +1302 *
"target" /;
<ms# 2> <ms# 3> +1303 * "target" /;
<ms# 3> <ms# 4> +1304 *
"target" /; <ms# 1>
<ms# 2> <ms# 2> <ms# 3> <ms# 3> <ms# 4> +1401 *
"target" /;
<ms# 1> <ms# 2> +1402 * "target" /;
<ms# 2> <ms# 3> +1403 *
"target" /;
<ms# 3> <ms# 4> +1404 * "target" /; <ms# 1>
<ms# 1> <ms#
2> <ms# 2> <ms# 3> <ms# 3> <ms# 4> <ms# 5>
0 "The end" l;
<ms# 5> <ms# 4>
<ms# 3> <ms# 2> <ms# 1>
Suffice it to say that if anyone besides me
that isn't a bitism programmer themselves ever designs a multi-scrambling item file I'll be impressed. But it's still a useful tool for me to design solutions to people's odd scrambling needs.
A more straight forward solution
And just when I'd concluded all
multiscrambling was tumor inducing along comes something that turns out to be straight forward. The request:
The basic setup of the experiment is as follows: first there is a test block;
then a training block; then a test block. The test blocks together will
comprise 36 items, of two distinct classes; I would like a way to randomly
select 9 items from each class out of the 36 to go in Test Block 1, and leave
the other 9+9 items in Test Block 2. However, I want the training block to be
in a fixed position between these two test blocks. Is there a way to accomplish
this?
Basic item file will have this structure:
f60 <vm desktop>
0 "Instructions";
+1 "Nine class 1 test items";
+2 "Nine class 2 test items";
+3 "Training items";
+1 "Nine more class 1 test items";
+2 "Nine more class 2 test items";
0 "End";
So the first time through we're only
going to scramble the class 1 test items, everything else gets locked with
dollars (or in a multi-scramble, <ms#> keywords):
f60 <vm desktop> <mss 1,1>
<ms# 1>
0 "Instructions"; <ms# 1>
+1 "Nine class 1 test items";
<ms# 1>
+2 "Nine class 2 test items";
+3 "Training items"; <ms# 1>
+1 "Nine more class 1 test items";
<ms# 1>
+2 "Nine more class 2 test items";
0 "End"; <ms# 1>
Then we're only going to scramble the
class 2 test items:
f60 <vm desktop> <mss 1,1> <mss 2,1>
<ms# 1> <ms# 2>
0 "Instructions"; <ms# 1>
+1 "Nine class 1 test items";
<ms# 1> <ms# 2>
+2 "Nine class 2 test items";
<ms# 2>
+3 "Training items"; <ms# 1>
+1 "Nine more class 1 test items";
<ms# 1> <ms# 2>
+2 "Nine more class 2 test items";
<ms# 2>
0 "End"; <ms# 2> <ms# 1>
Lastly we'll scramble the three sets of
items one after the other. This is the actual item file structure you'd use (the
others are just for show and tell):
f60 <vm desktop> <mss 1,1> <mss 2,1> <mss 3,1>
<ms# 1> <ms# 2> <ms# 3>
0 "Instructions"; <ms# 3> <ms# 1>
+1 "Nine class 1 test items";
<ms# 1> <ms# 2>
+2 "Nine class 2 test items";
<ms# 2> <ms\ 3>
+3 "Training items"; <ms\ 3> <ms# 1>
+1 "Nine more class 1 test items";
<ms# 1> <ms# 2>
+2 "Nine more class 2 test items";
<ms# 2> <ms# 3>
0 "End"; <ms# 3> <ms# 2> <ms# 1>
Pretty easy really, no sets of
cancelling dollars needed or any real trauma at all. Didn't think that ever
happened with multiscrambling.