1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| import "dart:math" as math;
enum Direction { top, left, right, bottom }
void main() { Direction cur_direction = Direction.top; int circle = 1; int curX = 0; int curY = 0; List<int> arr = [ 0,1,2, 3,4,5, 6,7,8, ]; List<int> res = []; int width = math.sqrt(arr.length).toInt();
while (circle < width - 1) { if (cur_direction == Direction.top) { while (curX < width - circle) { res.add(arr[curX + curY * width]); curX++; } cur_direction = Direction.left; } if (cur_direction == Direction.left) { while (curY < width - circle) { res.add(arr[curX + curY * width]); curY++; } cur_direction = Direction.bottom; } if (cur_direction == Direction.bottom) { while (curX > circle - 1) { res.add(arr[curX + curY * width]); curX--; } cur_direction = Direction.right; } if (cur_direction == Direction.right) { while (curY > circle - 1) { res.add(arr[curX + curY * width]); curY--; } cur_direction = Direction.top; } circle++; } print(res); }
|