Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
73
Task/Langtons-ant/Swift/langtons-ant.swift
Normal file
73
Task/Langtons-ant/Swift/langtons-ant.swift
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
import Foundation
|
||||
|
||||
let WIDTH = 100
|
||||
let HEIGHT = 100
|
||||
|
||||
struct Point {
|
||||
var x:Int
|
||||
var y:Int
|
||||
}
|
||||
|
||||
enum Direction: Int {
|
||||
case North = 0, East, West, South
|
||||
}
|
||||
|
||||
class Langton {
|
||||
let leftTurn = [Direction.West, Direction.North, Direction.South, Direction.East]
|
||||
let rightTurn = [Direction.East, Direction.South, Direction.North, Direction.West]
|
||||
let xInc = [0, 1,-1, 0]
|
||||
let yInc = [-1, 0, 0, 1]
|
||||
var isBlack:[[Bool]]
|
||||
var origin:Point
|
||||
var antPosition = Point(x:0, y:0)
|
||||
var outOfBounds = false
|
||||
var antDirection = Direction.East
|
||||
|
||||
init(width:Int, height:Int) {
|
||||
self.origin = Point(x:width / 2, y:height / 2)
|
||||
self.isBlack = Array(count: width, repeatedValue: Array(count: height, repeatedValue: false))
|
||||
}
|
||||
|
||||
func moveAnt() {
|
||||
self.antPosition.x += xInc[self.antDirection.rawValue]
|
||||
self.antPosition.y += yInc[self.antDirection.rawValue]
|
||||
}
|
||||
|
||||
func step() -> Point {
|
||||
if self.outOfBounds {
|
||||
println("Ant tried to move while out of bounds.")
|
||||
exit(0)
|
||||
}
|
||||
|
||||
var ptCur = Point(x:self.antPosition.x + self.origin.x, y:self.antPosition.y + self.origin.y)
|
||||
let black = self.isBlack[ptCur.x][ptCur.y]
|
||||
let direction = self.antDirection.rawValue
|
||||
|
||||
self.antDirection = (black ? self.leftTurn : self.rightTurn)[direction]
|
||||
|
||||
self.isBlack[ptCur.x][ptCur.y] = !self.isBlack[ptCur.x][ptCur.y]
|
||||
|
||||
self.moveAnt()
|
||||
ptCur = Point(x:self.antPosition.x + self.origin.x, y:self.antPosition.y + self.origin.y)
|
||||
self.outOfBounds =
|
||||
ptCur.x < 0 ||
|
||||
ptCur.x >= self.isBlack.count ||
|
||||
ptCur.y < 0 ||
|
||||
ptCur.y >= self.isBlack[0].count
|
||||
|
||||
return self.antPosition
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let ant = Langton(width: WIDTH, height: HEIGHT)
|
||||
while !ant.outOfBounds {
|
||||
ant.step()
|
||||
}
|
||||
|
||||
for row in 0 ..< WIDTH {
|
||||
for col in 0 ..< HEIGHT {
|
||||
print(ant.isBlack[col][row] ? "#" : " ")
|
||||
}
|
||||
println()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue