Артём, там подвох в том, что колонки набираются последовательно и при некоторых случаях последняя колонка будет с одним элементом, в то время, как все остальные с 4-мя, например. Нужно, чтобы все колонки набирались равномерно ровно до тех пор, пока не останутся последние элементы.
Проще проиллюстрировать:

Код:
1,4,7,9
2,5,8
3,6

Код:
1,4,6,8
2,5,7,9
3
Больше часа пробую такое запрогать, сложновато и заманчиво
Добавлено через 1 час 23 минуты
У меня пока что так получилось (наверняка с ошибками):

Код AS3:
var data:Array = [1,2,3,4,5,6,7,8,9];
var w:int = 4;
var res:Array = [];
var rows:int = Math.ceil(data.length / w);
var endCount:int = data.length % w;
var i:int = 0;
var j:int = 0;
var k:int = 0;
var pos:int = 0;
for (i = 0; i < rows + 10; i++) {
res[i] = [];
}
for (k = 0; k < data.length; k ++) {
pos = k % rows;
if (pos == rows - 1) {
j++;
}
if (j > endCount && endCount != 0) {
pos = k % (rows - 1); // Вот тут косяк :(
}
res[pos].push(data[k]);
}
for (i = 0; i < rows; i++) {
trace(res[i]);
}