Now that everyone has billions of bytes of memory on thumb drives and SD cards cluttering their drawers, I made a project to create one byte of memory. Actually it's only a half a byte that can be accessed.
It started last weekend, when I was looking for a project to waste my time on for my three day weekend. I went off to Borders, and found a copy of Make: which featured the new Arduino microcontroller board and development software. After reading about all the things I could accomplish with it, I went to Fry's electronics to get the parts necessary to build my own Arduino board with a breadboard and a Amtel Mega microcontroller. I'd been looking to do this for a while now, ever since Tracy's son got me a 'game of life' circuit kit for Christmas which used an Amtel microcontorller. I've been half heartedly looking around for development rigs to be able to program it. Now, this magazine had everything I needed down the parts list.
First issue though, Fry's only carries Parallex microcontrollers, and they were rather expensive. Also they didn't have the USB breakout board or the 16 Mz crystal. Not to be daunted, I got the rest of the stuff I needed, and a few various digital IC chips to play with, just to get used to bread boarding again. They cost less than a dollar each, and I wanted to use them as guinea pigs on my rusty circuit building skills.
One of the digital IC chips I got was a 74HC273 chip which is an octal latch. Which is a fancy way of saying one byte of memory. So my first project was to hook it up to something. I got out my breadboard, a 6 switch dip switch, a 74LS02 quad OR gate to use as a buffer, and 4 leds, plus various resistors and jumpers. Of the 6 switches, I hooked one up to the clock, one to the reset and 4 to the inputs of the latches. I hooked the output of the latches up to the buffer, and the buffer to the leds. Of course nothing happened when I turned it on. After a little bit of research, I was reminded that CMOS chips like the 74HC273 need to have a resistor to ground on the input, so that when the switch is open, the input voltage has someplace to drain. I added in a few resistors, and viola! I have a half a byte of functioning memory. I can set the four input switches to whatever settings, toggle the clock switch, and the LEDs light up based on which of the input switches were on. And they remain that way, even if you change the input switches. So it 'remembers' the switch states until you throw the clock toggle again or switch on the reset (or unplug it). Here's a picture of the final product:
With this I can remember a number from 0-15 as long as I keep it plugged in. It may not seem like much, but put a billion of these things together, and now you're talking.
I have since gotten the microcontroller and the crystal needed for the main project I wanted to work on. Hopefully I'll get that USB breakout board soon, and I'll be able to program my new microcontroller. Then I'll have something real to report on. Until then I can bask in the dim LED light of my amazing grown-up tinker toy project.
Friday, February 25, 2011
Saturday, February 19, 2011
Block Math Conclusion
Last week I left the definition of 'midway' hanging. To define midway, I'm going to use my old friends 'imaginary blocks'. Let's say you have a chipped-stack, that is all rows have the same amount of blocks except the top row. We can fill in the top row with imaginary blocks as so:
XXYYY
XXXXX
XXXXX
Here the 'Y' blocks are imaginary, we've used our imagination to fill in the top row. Now we compare the amount of X blocks in the top row with the amount of Y blocks by stacking them:
YYY
XX
It would appear that the X block amount is less than the Y block amount. My definition of 'midway', is when the X block amount is the same size as the Y block amount. If the X block amount is greater than the Y block amount, we can say the top row is greater than midway. Similarly if the X block amount is less than the Y block amount, we can say that the top row is less than midway.
So why is midway useful? In the real world, when we need a clean stack, one isn't always available. In fact, for stacks with a large amount of blocks in each row, it is easy to imagine that one is rarely available given an arbitrarily sized block-bag we are trying to arrange. By comparing the real blocks with the imaginary blocks on the top row, we can say that the top row is more real than imaginary and consider it whole, and we can say if the top row is more imaginary than real, we can disregard it. Additionally, assuming that the top row will have one amount with equal probability to any other amount, on average the number of times that we consider the top row by filling in the blanks will be equal to the number of times we disregard it, which allows things to even out in the end.
Bear with me for one more scenario, and then I will summarize and get off my soap box. Imagine that Costco has a sale on garden boxes. The garden boxes come in many sizes, but all of them are square in shape, that is each side is of equal amount. You got a bag full of corn seeds from your Aunt for Christmas. You need to figure out what size garden box to buy so that you can plant all your corn. Since each seed needs to be planted some distance from the other, you devise a scheme where you can use some of your blocks to represent where you are planting your corn seeds in an imaginary arrangement, whereby each block represents a size equal to the distance needed between seeds. So you find a block bag with an equal amount of blocks as the amount of corn seeds in your bag. Now you need an arrangement strategy for finding the smallest 'square-stack' needed for all the blocks in your bag. One strategy might be to arrange in a 'spiral' pattern, always trying to maintain the 'squarest' shape. As you pull each block out of the bag, here's the arrangement:
X
XX
X
XX
XX
XX
XXX
XX
XXX
XXX
XXX
XXX
X
XXX
XXX
XX
XXX
XXX
XXX
You continue this process until you run out of blocks. Now you can remove the blocks in the longest side to represent the amount of 'corn-seed-distance' units needed to allow you to plant all your corn. You then make a stick that represents the 'corn-seed-distance' unit, take it down to Costco, and find the garden box that will allow that stick to be placed end-to-end the correct amount of times, and purchase that size of garden box (hopefully it will fit in your car).
So what have I done here? Not much, really, most of the problems I've solved with these operations seem trivial. Some of the scenarios are rather arbitrary (how often does Costco have an assortment of square garden boxes of different sizes on sale?) What I've done is to think about the processes involved and come up with a new simple vocabulary to describe them. That allows me to think more clearly about the processes, and not be saddled with my prior knowledge sneaking in and providing short-cuts that may not be intuitive to other people. It allows me to communicate better with other people that don't share my knowledge and, I hope, makes it easier for other people to understand. In short it makes me a better teacher.
Much of the vocabulary used in today's math is foreign to the rest of our language, and so words like 'roots' and 'fractions' become scary unknowns to most individuals. The arcane symbology used to describe all but the simplest formula is enough to send most people running. Much of what we are taught of math is from one perspective: sterile abstract operations such as addition, subtraction, multiplication, and division. Memorizing multiplication tables, and performing long division. Which makes us into mistake-prone calculator, and a little less valuable then the cheap electronic calculators you can find at the dollar store. We should be teaching by saying first, heres's a problem, (pause to let the problem sink in) and second, here's a solution and how it works. Instead we are teaching by saying: here's a solution, and oh-by-the-way, there are problems out there that might be solved with it, trust me.
Playing with blocks, making arrangements, talking about types of arrangements, and how they can be used to solve problems seems to me to be a simple and intuitive way of teaching the fundamentals of mathematics. In the past three posts I have described addition, subtraction, multiplication, division, ratios, roots, negative amounts, and rounding, without ever using a single number and with a limited vocabulary of common words. The blocks allow us to think abstractly with representations, and to visualize these process as they are occurring. If, when teaching math, we lay that as a foundation, we can then teach the tradition constructs and formulas of math and have something concrete to relate it to.
For those of you with only the tradition constructs and formulas of math in your knowledge set, and without the benefit of higher math which forces you to think about the processes involved, it may be hard to reconcile block math with real math. So here's a cheat sheet. The scenerio of the block bank robbers teaches about division. You have some amount of blocks, and you need to divide them among your gang. There's even a remainder (remember those?). The scenerio of the siblings buying a new game and pooling their money teaches about addition, subtraction (or negative numbers) and comparison. You need to add the amount of blocks, compare their amount with the imaginary amount (a negative number), and subtract the imaginary amount. The scenario of paying the waiter a tip teaches multiplication, ratios (fractions), and rounding. Building the clean-stacks is dividing and multiplying: the first stack is the bill divided by some number, and the second stack is the height of the first stack multiplied by some other number. Building a pair of clean stacks with equal amount of stacks, but unequal amount of blocks in each row is a ratio, and evening out a chipped stack to a clean stack is rounding. And finally the square garden box scenario teaches about square roots (appropriate to talk about gardening when discussing roots). The size of the box you need is the square root of the amount of corn seeds that you have, rounded up to a whole number.
And lastly for you mathematics fans out there, I have nothing against your specialized vocabulary and arcane symbology. Unambiguous definitions and rigorous proofs for the most part require them. But when trying to communicate with someone that doesn't understand the vocabulary, it might be easier to explain things using a common vocabulary even if you're not being as precise as you might be if you were communicating with one of your own kind.
Block math can be used to describe succinctly operations that involve integral things. A thing is integral if it can't be cut in half and still be useful. You can't cut a computer in half and have two half computers. You can't cut a penny in half and have a monetary amount of half a cent. You will have two pieces of junk. It can't be used to fully describe things that can be cut in half. A yard of cloth can be cut in half to make two half-yards of cloth. These are very distinct ideas, and yet our temptation is to use one concept 'numbers' to represent both ideas. Block math avoids some of the pitfalls by making clear the distinction. Perhaps in another series of posts I can talk about the other half of the number problem. Until then, have fun playing with your blocks!
XXYYY
XXXXX
XXXXX
Here the 'Y' blocks are imaginary, we've used our imagination to fill in the top row. Now we compare the amount of X blocks in the top row with the amount of Y blocks by stacking them:
YYY
XX
It would appear that the X block amount is less than the Y block amount. My definition of 'midway', is when the X block amount is the same size as the Y block amount. If the X block amount is greater than the Y block amount, we can say the top row is greater than midway. Similarly if the X block amount is less than the Y block amount, we can say that the top row is less than midway.
So why is midway useful? In the real world, when we need a clean stack, one isn't always available. In fact, for stacks with a large amount of blocks in each row, it is easy to imagine that one is rarely available given an arbitrarily sized block-bag we are trying to arrange. By comparing the real blocks with the imaginary blocks on the top row, we can say that the top row is more real than imaginary and consider it whole, and we can say if the top row is more imaginary than real, we can disregard it. Additionally, assuming that the top row will have one amount with equal probability to any other amount, on average the number of times that we consider the top row by filling in the blanks will be equal to the number of times we disregard it, which allows things to even out in the end.
Bear with me for one more scenario, and then I will summarize and get off my soap box. Imagine that Costco has a sale on garden boxes. The garden boxes come in many sizes, but all of them are square in shape, that is each side is of equal amount. You got a bag full of corn seeds from your Aunt for Christmas. You need to figure out what size garden box to buy so that you can plant all your corn. Since each seed needs to be planted some distance from the other, you devise a scheme where you can use some of your blocks to represent where you are planting your corn seeds in an imaginary arrangement, whereby each block represents a size equal to the distance needed between seeds. So you find a block bag with an equal amount of blocks as the amount of corn seeds in your bag. Now you need an arrangement strategy for finding the smallest 'square-stack' needed for all the blocks in your bag. One strategy might be to arrange in a 'spiral' pattern, always trying to maintain the 'squarest' shape. As you pull each block out of the bag, here's the arrangement:
X
XX
X
XX
XX
XX
XXX
XX
XXX
XXX
XXX
XXX
X
XXX
XXX
XX
XXX
XXX
XXX
You continue this process until you run out of blocks. Now you can remove the blocks in the longest side to represent the amount of 'corn-seed-distance' units needed to allow you to plant all your corn. You then make a stick that represents the 'corn-seed-distance' unit, take it down to Costco, and find the garden box that will allow that stick to be placed end-to-end the correct amount of times, and purchase that size of garden box (hopefully it will fit in your car).
So what have I done here? Not much, really, most of the problems I've solved with these operations seem trivial. Some of the scenarios are rather arbitrary (how often does Costco have an assortment of square garden boxes of different sizes on sale?) What I've done is to think about the processes involved and come up with a new simple vocabulary to describe them. That allows me to think more clearly about the processes, and not be saddled with my prior knowledge sneaking in and providing short-cuts that may not be intuitive to other people. It allows me to communicate better with other people that don't share my knowledge and, I hope, makes it easier for other people to understand. In short it makes me a better teacher.
Much of the vocabulary used in today's math is foreign to the rest of our language, and so words like 'roots' and 'fractions' become scary unknowns to most individuals. The arcane symbology used to describe all but the simplest formula is enough to send most people running. Much of what we are taught of math is from one perspective: sterile abstract operations such as addition, subtraction, multiplication, and division. Memorizing multiplication tables, and performing long division. Which makes us into mistake-prone calculator, and a little less valuable then the cheap electronic calculators you can find at the dollar store. We should be teaching by saying first, heres's a problem, (pause to let the problem sink in) and second, here's a solution and how it works. Instead we are teaching by saying: here's a solution, and oh-by-the-way, there are problems out there that might be solved with it, trust me.
Playing with blocks, making arrangements, talking about types of arrangements, and how they can be used to solve problems seems to me to be a simple and intuitive way of teaching the fundamentals of mathematics. In the past three posts I have described addition, subtraction, multiplication, division, ratios, roots, negative amounts, and rounding, without ever using a single number and with a limited vocabulary of common words. The blocks allow us to think abstractly with representations, and to visualize these process as they are occurring. If, when teaching math, we lay that as a foundation, we can then teach the tradition constructs and formulas of math and have something concrete to relate it to.
For those of you with only the tradition constructs and formulas of math in your knowledge set, and without the benefit of higher math which forces you to think about the processes involved, it may be hard to reconcile block math with real math. So here's a cheat sheet. The scenerio of the block bank robbers teaches about division. You have some amount of blocks, and you need to divide them among your gang. There's even a remainder (remember those?). The scenerio of the siblings buying a new game and pooling their money teaches about addition, subtraction (or negative numbers) and comparison. You need to add the amount of blocks, compare their amount with the imaginary amount (a negative number), and subtract the imaginary amount. The scenario of paying the waiter a tip teaches multiplication, ratios (fractions), and rounding. Building the clean-stacks is dividing and multiplying: the first stack is the bill divided by some number, and the second stack is the height of the first stack multiplied by some other number. Building a pair of clean stacks with equal amount of stacks, but unequal amount of blocks in each row is a ratio, and evening out a chipped stack to a clean stack is rounding. And finally the square garden box scenario teaches about square roots (appropriate to talk about gardening when discussing roots). The size of the box you need is the square root of the amount of corn seeds that you have, rounded up to a whole number.
And lastly for you mathematics fans out there, I have nothing against your specialized vocabulary and arcane symbology. Unambiguous definitions and rigorous proofs for the most part require them. But when trying to communicate with someone that doesn't understand the vocabulary, it might be easier to explain things using a common vocabulary even if you're not being as precise as you might be if you were communicating with one of your own kind.
Block math can be used to describe succinctly operations that involve integral things. A thing is integral if it can't be cut in half and still be useful. You can't cut a computer in half and have two half computers. You can't cut a penny in half and have a monetary amount of half a cent. You will have two pieces of junk. It can't be used to fully describe things that can be cut in half. A yard of cloth can be cut in half to make two half-yards of cloth. These are very distinct ideas, and yet our temptation is to use one concept 'numbers' to represent both ideas. Block math avoids some of the pitfalls by making clear the distinction. Perhaps in another series of posts I can talk about the other half of the number problem. Until then, have fun playing with your blocks!
Sunday, February 13, 2011
Block Math Part 2
Last week I talked about a system that consists of blocks, block-bags, and arrangements. I introduced two types of arrangements: block-rows, and row-stacks. Row-stacks can be considered 'clean' if each row contains the same amount of blocks. I'll introduce a new word for the inverse condition, row-stacks can be said to be 'jagged' if the rows have different quantities. And one more word 'chipped' for the condition that all the rows are of equal length, except the top one which has less than the rest. Here's some examples:
clean:
XX
XX
or
XXX
XXX
jagged:
XXXX
X
XXX
or
XX
XXXX
XXXXX
and chipped:
XX
XXX
or
XXX
XXXXXX
XXXXXX
All chipped stacks are also jagged stacks, but not vice-versa.
I'm going to define some operations in abstract terms so that they are more-or-less unambiguous. The first operation I will call 'sharing'. Given a clean stack of blocks with a certain amount in each row, you want to share the blocks into an amount of bags equals to the amount of blocks in each row. Easy right? You put one block from each row into each bag. If the stack is clean, you will have an equal number in each bag (since each row contains an equal amount of blocks, therefore each row will have one to offer each bag). Given a stack of blocks that is chipped, we can use the same process, and each bag will be 'almost equal', that is the difference in the amount of blocks in each bag will be at most a single block. We can confirm this intuitively by flipping a jagged stack on it's side and observing that each row now only differs by at most a single block from any other row:
XX
XXXX
XXXX
becomes:
XXX
XXX
XX
XX
So now the problem becomes: given a bag of blocks, form a clean or chipped stack with a certain amount in each row. We have imagined a row that we can use for a template. Now we can pull blocks out of the bag and place each block in a row until the amount of the row is equals to the amount in the imagined template row. At that point we start a new row on top of the old row and repeat the process. We continue until there are no more blocks left in the bag. What we will have at the end will be either a clean or a chipped stack. I will call this operation 'clean-stacking' because we are trying to build a clean stack.
So in order to share the blocks in one bag fairly between a set of bags, we do a clean-stacking operation, and then we do a sharing operation. This works as long as we define sharing fairly as being that the difference between the amounts in each bag is never greater than a single block.
A new scenario: A block hunt. We have hidden all the blocks from a block-bag around an area, and now we have a certain number of contestants that will find them. The contestant with the most blocks gets a blue ribbon, the contestant with the most blocks after that gets a red ribbon, and the contestant with the most blocks after that gets a yellow ribbon. The contestant with the least amount of blocks gets a black ribbon. How to determine who gets which ribbon? First, form a jagged stack arrangement by forming a row from each bag and stacking them. Next form an 'ordered-stack' by finding the longest row in the first stack and placing it in the second stack, then repeat the procedure until the first stack is empty. As long as you keep track of who belongs to each row, the bottom row will get the blue ribbon, the next row up will get the red ribbon, and the next row up will get the yellow ribbon. The row at the top gets the black ribbon. This type of operation is called 'ordering'. There are actually many variations of this operation, but the one described above is simple, and works well for small stacks. What to do in case of a tie? Actually, it doesn't matter, since we made up the rules of this game we can make up the rules arbitrarily for tie cases, and as long as all contestants agree to the rules, and the rules don't change during the course of the contest, it should be considered fair.
One more arrangement, is actually a pair arrangement. Given a clean stack of blocks, form a partner clean stack with the same amount of rows. The amount of blocks in the rows of the two stacks can differ, as long as they are the same in each stack. For example:
XX XXXX
XX XXXX
XX XXXX
If we add or remove rows from both sides, we can see that the total amount in each stack grows or shrinks relative to each other. So I will call these stacks relative-stacks. When would you need to have relative-stacks? Here's a scenario: You're dining out, and the waiter is very prompt and friendly. You know he probably only earns a small salary, and you want to reward him extra for his good service. How do you determine what is a fair amount? You could just give him some fixed amount, or you could consider that the amount of effort that he spent is somewhat relative to the size of the bill you receive at the end of the meal. In order to be fair and reward him relative to his effort, we can make a pair of relative-stacks, the first being the a stack made from blocks equal to the number of dollars in the bill, and the second being a partner in the relative stacks. The number of rows in each of the partner stacks is some arbitrary amount that has been determined by good-manners experts as producing a fair amount. So first we do a 'clean-stacking' operation for the first stack based on a block-bag equals to the amount of dollars in the bill, and the we do a 'clean-stacking' operation from our reserve block-bag but stop when the stack amounts of the stacks are equal. We give the waiter an amount of dollars equal to the amount of blocks in the partner stack. So for example:
XXXXXXXXXX X
XXXXXXXXXX X
The stack to the left represents the dollars in the bill, and the stack to the right represents the dollars in the tip. This way we ensure that for a larger bill, we give a larger tip, since we consider the bill to be relative to the amount of effort the waiter made, and wish to reward him fairly. The amount in each stack is somewhat arbitrary, except that the bill stack will tend to have many more than the tip stack and the amounts should be consistent across time.
So what happens if when you are doing the 'clean-stacking' operation, you come up with a chipped stack? You could do a number of things, you could form the partner stack based on the amount of full row stacks, or based on the amount of stacks full or not. Or we could introduce a new term 'mid-way' If the amount of block in the top row is greater than mid-way, you would base it on the total amount of all stacks. If the amount of blocks in the top row is less than mid-way, you would base it on the amount stacks of only full rows. If the amount of blocks in the top row is exactly mid way, you would have to find some random way of determining what to use. Next week I will better define the term mid-way and why it might produce a more-fair relative stack.
clean:
XX
XX
or
XXX
XXX
jagged:
XXXX
X
XXX
or
XX
XXXX
XXXXX
and chipped:
XX
XXX
or
XXX
XXXXXX
XXXXXX
All chipped stacks are also jagged stacks, but not vice-versa.
I'm going to define some operations in abstract terms so that they are more-or-less unambiguous. The first operation I will call 'sharing'. Given a clean stack of blocks with a certain amount in each row, you want to share the blocks into an amount of bags equals to the amount of blocks in each row. Easy right? You put one block from each row into each bag. If the stack is clean, you will have an equal number in each bag (since each row contains an equal amount of blocks, therefore each row will have one to offer each bag). Given a stack of blocks that is chipped, we can use the same process, and each bag will be 'almost equal', that is the difference in the amount of blocks in each bag will be at most a single block. We can confirm this intuitively by flipping a jagged stack on it's side and observing that each row now only differs by at most a single block from any other row:
XX
XXXX
XXXX
becomes:
XXX
XXX
XX
XX
So now the problem becomes: given a bag of blocks, form a clean or chipped stack with a certain amount in each row. We have imagined a row that we can use for a template. Now we can pull blocks out of the bag and place each block in a row until the amount of the row is equals to the amount in the imagined template row. At that point we start a new row on top of the old row and repeat the process. We continue until there are no more blocks left in the bag. What we will have at the end will be either a clean or a chipped stack. I will call this operation 'clean-stacking' because we are trying to build a clean stack.
So in order to share the blocks in one bag fairly between a set of bags, we do a clean-stacking operation, and then we do a sharing operation. This works as long as we define sharing fairly as being that the difference between the amounts in each bag is never greater than a single block.
A new scenario: A block hunt. We have hidden all the blocks from a block-bag around an area, and now we have a certain number of contestants that will find them. The contestant with the most blocks gets a blue ribbon, the contestant with the most blocks after that gets a red ribbon, and the contestant with the most blocks after that gets a yellow ribbon. The contestant with the least amount of blocks gets a black ribbon. How to determine who gets which ribbon? First, form a jagged stack arrangement by forming a row from each bag and stacking them. Next form an 'ordered-stack' by finding the longest row in the first stack and placing it in the second stack, then repeat the procedure until the first stack is empty. As long as you keep track of who belongs to each row, the bottom row will get the blue ribbon, the next row up will get the red ribbon, and the next row up will get the yellow ribbon. The row at the top gets the black ribbon. This type of operation is called 'ordering'. There are actually many variations of this operation, but the one described above is simple, and works well for small stacks. What to do in case of a tie? Actually, it doesn't matter, since we made up the rules of this game we can make up the rules arbitrarily for tie cases, and as long as all contestants agree to the rules, and the rules don't change during the course of the contest, it should be considered fair.
One more arrangement, is actually a pair arrangement. Given a clean stack of blocks, form a partner clean stack with the same amount of rows. The amount of blocks in the rows of the two stacks can differ, as long as they are the same in each stack. For example:
XX XXXX
XX XXXX
XX XXXX
If we add or remove rows from both sides, we can see that the total amount in each stack grows or shrinks relative to each other. So I will call these stacks relative-stacks. When would you need to have relative-stacks? Here's a scenario: You're dining out, and the waiter is very prompt and friendly. You know he probably only earns a small salary, and you want to reward him extra for his good service. How do you determine what is a fair amount? You could just give him some fixed amount, or you could consider that the amount of effort that he spent is somewhat relative to the size of the bill you receive at the end of the meal. In order to be fair and reward him relative to his effort, we can make a pair of relative-stacks, the first being the a stack made from blocks equal to the number of dollars in the bill, and the second being a partner in the relative stacks. The number of rows in each of the partner stacks is some arbitrary amount that has been determined by good-manners experts as producing a fair amount. So first we do a 'clean-stacking' operation for the first stack based on a block-bag equals to the amount of dollars in the bill, and the we do a 'clean-stacking' operation from our reserve block-bag but stop when the stack amounts of the stacks are equal. We give the waiter an amount of dollars equal to the amount of blocks in the partner stack. So for example:
XXXXXXXXXX X
XXXXXXXXXX X
The stack to the left represents the dollars in the bill, and the stack to the right represents the dollars in the tip. This way we ensure that for a larger bill, we give a larger tip, since we consider the bill to be relative to the amount of effort the waiter made, and wish to reward him fairly. The amount in each stack is somewhat arbitrary, except that the bill stack will tend to have many more than the tip stack and the amounts should be consistent across time.
So what happens if when you are doing the 'clean-stacking' operation, you come up with a chipped stack? You could do a number of things, you could form the partner stack based on the amount of full row stacks, or based on the amount of stacks full or not. Or we could introduce a new term 'mid-way' If the amount of block in the top row is greater than mid-way, you would base it on the total amount of all stacks. If the amount of blocks in the top row is less than mid-way, you would base it on the amount stacks of only full rows. If the amount of blocks in the top row is exactly mid way, you would have to find some random way of determining what to use. Next week I will better define the term mid-way and why it might produce a more-fair relative stack.
Subscribe to:
Comments (Atom)