123456789101112131415161718192021222324252627 |
- #!/usr/bin/ruby
- define dirs = [[1,0], [0,-1], [-1,0], [0,1]];
- define size = 13;
- enum |White, Black|;
- var plane = size.of { size.of (White) };
- var (x, y) = @|([size/2 -> int]*2);
- var dir = dirs.len.irand;
- var moves = 0;
- loop {
- (x >= 0) && (y >= 0) && (x < size) && (y < size) || break;
- given(plane[x][y]) {
- when (White) { dir--; plane[x][y] = Black }
- when (Black) { dir++; plane[x][y] = White }
- }
- ++moves;
- [[\x, \y],dirs[dir %= dirs.len]].zip {|a,b| *a += b }
- }
- say "Out of bounds after #{moves} moves at (#{x}, #{y})";
- plane.map{.map {|square| square == Black ? '#' : '.' }}.each{.join.say};
|