Александър обнови решението на 19.01.2014 17:54 (преди над 4 години)
+package main
+
+var directions [4][2]int = [4][2]int{{-1, -1}, {1, 1}, {-1, 1}, {1, -1}}
+
+type person struct {
+        movesCount int
+        position   [2]int
+        Finished   bool
+}
+
+func newPerson(x int, y int) *person {
+        var p *person = new(person)
+        p.position[0] = x
+        p.position[1] = y
+        return p
+}
+
+func (p *person) move(mall *[4][4]rune) [2][2]int {
+        var result [2][2]int
+        result[0][0] = p.position[0]
+        result[0][1] = p.position[1]
+
+        if p.movesCount != 100 {
+                var x, y int
+                moved := false
+
+                for i := 0; i < 4; i++ {
+                        x = (p.position[0] + directions[i][0] + 4) % 4
+                        y = (p.position[1] + directions[i][1] + 4) % 4
+
+                        if mall[x][y] == '-' {
+                                mall[x][y] = 'X'
+                                mall[p.position[0]][p.position[1]] = '-'
+
+                                result[1][0] = x
+                                result[1][1] = y
+                                p.position[0] = x
+                                p.position[1] = y
+
+                                p.movesCount++
+                                moved = true
+                                break
+                        }
+                }
+
+                if !moved {
+                        result[1][0] = -2
+                        result[1][1] = -2
+                        p.Finished = true
+                }
+        } else {
+                result[1][0] = -1
+                result[1][1] = -1
+                p.Finished = true
+        }
+
+        return result
+}
+
+func playMall(mall [4][4]rune) [][2][2]int {
+        log := [][2][2]int{}
+        people := []*person{}
+        peopleCount := 0
+
+        for i := 0; i < 4; i++ {
+                for j := 0; j < 4; j++ {
+                        if mall[i][j] == 'X' {
+                                people = append(people, newPerson(i, j))
+                                peopleCount++
+                        }
+                }
+        }
+
+        activePeople := true
+
+        for activePeople {
+                activePeople = false
+
+                for i := 0; i < peopleCount; i++ {
+                        if !people[i].Finished {
+                                log = append(log, people[i].move(&mall))
+                                activePeople = true
+                        }
+                }
+        }
+
+        return log
+}
В решението ти няма никаква конкурентност. Всичко върви последователно.
В условието изрично пише:
Обитателите трябва да се мърдат паралелно един с друг и независимо един от друг. Не се опитвайте да изпълнявате всичко последователно.
