Stack notation

Stack notation (also called Adam notation or propswap) is a juggling notation system that uses sequences of numbers to represent patterns, similarly to siteswap notation. Any given valid vanilla siteswap pattern can be written in stack notation exactly one way, and any given pattern in stack notation can be written in siteswap exactly one way.
A zero in stack notation means the same thing as a zero in siteswap - a beat where no throw is made because the hand that would throw on that beat is empty - but the meanings of numbers other than zero are usually different from their meanings in siteswap notation. In stack notation, a throw is represented by a number corresponding to the number of distinct props that will be thrown before that prop is thrown again. (In this article a “throw” can mean anything you do with a prop in your hand that is designated in the notation, including siteswap 1s and 2s.)
A number in the stack notation for a pattern is always less than or equal to the number representing the same throw in the siteswap notation for that pattern. A number in stack notation has the same meaning it has in siteswap if and only if a different prop is thrown on every beat between that throw and the next time that prop is thrown (with no 0s between those two throws of that prop).
The basic cascade and fountain patterns are written in stack notation the same way they are written in siteswap notation. Adding 1 to each number in the stack notation for a pattern results in the same pattern for one more object as adding 1 to each number in the siteswap notation for the pattern.
===Differences between siteswap and stack notation===
Siteswap notation 	Stack notation
A number corresponds to the number of beats that will occur, including the current beat, before the object thrown on that beat is thrown again.	A number corresponds to the number of distinct props that will be thrown, including any prop thrown on the current beat, before that prop is thrown again.
In asynch patterns, odd numbers represent crossing throws, and even numbers represent non-crossing throws. 	Any number in an asynch pattern can represent either a crossing throw or a non-crossing throw.
Every instance of a given number representing a toss in the air is always a throw of the same height within a pattern. 	Different instances of a given number representing tosses in the air can be throws of completely different heights within a pattern.
The notation for a pattern that involves only throws at a fixed height and 0s (so the props are always thrown in the same order) uses a higher number than the notation for the basic pattern.
Examples: 3 balls in a 4 ball pattern with a gap is written as 4440, a 3 ball pattern with continuous high flashes is 55500, a 3 ball snake is 50505, and 3 in 1 hand is 60.	
The notation for a pattern that involves only throws at a fixed height and 0s uses the same number as the notation for the basic pattern.
Examples: 3 balls in a 4 ball pattern with a gap is written as 3330, a 3 ball pattern with continuous high flashes is 33300, a 3 ball snake is 30303, and 3 in 1 hand is 30.
The number of objects in a pattern is the average of the numbers in the notation. 	The number of objects in a pattern is the highest number in the notation.
A sequence of numbers is not a valid pattern if any number N in the sequence is followed M beats later by the number (N - M), for M > 0. 	Every sequence of numbers is a valid pattern.
===Converting from siteswap to stack notation===
#Write the sequence of throws that would be done if the pattern was done starting with the Nth beat in the siteswap, and continued for a number of beats equal to the Nth number in the siteswap. The first time you do this, N = 1.
#Find the destination of each throw in this sequence (the next beat in the future when that prop will be thrown again). The destination of a 0 is the beat the 0 is on, the destination of a 1 is the next beat after the 1, the destination of a 2 is 2 beats after the 2, etc. Cross out any number that is in the position of the destination of any throw in the sequence. Ignore any destinations that go out past the end of the sequence.
#Repeat the first two steps using 2 for N, and then 3, etc., until you reach the last beat in the siteswap.
#For each of the sequences you wrote, write the number of numbers in the sequence that are not crossed out. The resulting sequence of numbers is the stack notation for the pattern.
Example:
*Start with the siteswap 750. The first throw is a 7. If this pattern was done for seven beats starting with the 7, the sequence of throws would be 7507507. Since the sequence is only seven beats long, the destination of any 7 is past the end of the sequence. The destination of a 0 is itself, so all the 0s should be crossed out. The destination of the first 5 is the last beat in the sequence, and the destination of the other 5 is past the end of the sequence. Crossing out the destination of each throw leaves four numbers that are not crossed out: 75 0 75 07.
*The second throw in the siteswap is a 5. If the pattern was done for five beats starting with the 5, the sequence of throws would be 50750. The destination of a 5 or any higher number in a sequence that is only 5 beats long is past the end of the sequence, so we only have to cross out the 0s here. That leaves 3 numbers not crossed out: 5 0 75 0.
*The last number in the siteswap is a 0. If the pattern was done for zero beats, there would be no sequence of throws to write, so there would be no numbers that were not crossed out.
*The number of numbers that were not crossed out in each sequence was 4 for the first sequence, 3 for the second sequence, and 0 for the third sequence, so the stack notation for this pattern is 430.
===Converting from stack notation to siteswap===
#Write a sequence of as many letters as there are objects in the pattern (the highest number in the stack notation) in alphabetical order.
#Rewrite the sequence you just wrote with the letter from the left end moved so that it is now the Nth letter in the sequence, leaving the rest of the letters in the same order. The first time you do this, N is the first number in the stack notation. (The stack notation should be written so that it doesn’t start with a 0.)
#Repeat step 2, but this time use the second number in the stack notation for N, unless that number is a 0 - in that case, use the next number in the sequence that isn’t a 0. Continue to repeat that step, using the next nonzero number in the stack notation for N each time. After you do this with the last nonzero number in the stack notation as N, if the last sequence of letters is in alphabetical order, go to step 4. If it isn’t, continue to rewrite the sequence, going through the stack notation again from the beginning to get values to use for N each time, until the letters are in alphabetical order when you have finished going through the stack notation. (You may have to go through the notation several times before this will happen.)
#Write a new sequence of letters, using the first letter from each of the other sequences you wrote (in the order you wrote them) except the last one. If there were any 0s in the stack notation, write 0s distributed between the letters of this new sequence the same way they would be distributed between throws in the pattern.
#For each successive letter in the new sequence, write the number of places you have to go to the right to get to a place with same letter (looping back from the right end to the left end when necessary, so the first letter is treated as the next letter to the right of the last letter). Whenever you get to a 0 in this sequence, don’t look for the next 0, just write a 0. The sequence of numbers you get when you have done this for as many letters/0s as the period of the pattern (the number of numbers in the stack notation) is the siteswap notation for the pattern.
Example:
*Start with the stack notation 3230. The highest number is 3, so write the first 3 letters of the alphabet in order: ABC.
*The first number in the stack notation is 3, so rewrite the sequence so that the letter at the beginning, A, is now the 3rd letter in the sequence: BCA.
*The second number in the stack notation is 2, so rewrite the sequence so that the first letter, B, is now the 2nd letter in the sequence: CBA.
*The third number in the notation is 3, so rewrite the sequence so that the first letter, C, is now the 3rd letter in the sequence: BAC.
*That was the last nonzero number in the stack notation. The letters in the latest sequence are not in alphabetical order, so we have to go through the stack notation again.
*Starting again with the first letter in the notation, 3, rewrite the sequence so that the first letter, B, is now the 3rd letter in the sequence: ACB.
*Rewrite the sequence so that the first letter, A, is now the 2nd letter in the sequence: CAB.
*Rewrite the sequence so that the first letter, C, is the 3rd letter in the sequence: ABC.
*This time after finishing going through the stack notation, the sequence is back in alphabetical order, so now we can go to the next step.
*We have written the following sequences of letters: ABC, BCA, CBA, BAC, ACB, CAB, ABC. Write a new sequence using the beginning of each of these sequences except the last one: ABCBAC. In the continued stack notation pattern ...3230323032303230... there is a 0 on every fourth beat, with the first 0 on the fourth beat, so write 0s distributed the same way in the new sequence of letters: ABC0BAC0.
*Starting from the first letter in the new sequence, you have to go 5 places to the right to get to the next A.
*Starting from the second letter in the sequence, you have to go 3 places to the right to get to the next B.
*Starting from the third letter in the sequence, you have to go 4 places to the right to get to the next C.
*The fourth place in the sequence is a 0.
*The stack notation was only four beats long, so we can stop here. The distance from each of the first three letters in the sequence to the next instance of the same letter (going to the right) was 5 places, 3 places, and 4 places, and then there was a 0, so the siteswap notation for this pattern is 5340.
Category:Notation