iPhone swift 素数テスト

Swiftを使って、素数かどうか表示するiPhoneアプリのサンプルコードを描いてみます。

import UIKit

import SpriteKit

class ViewController: UIViewController {

    class PrimeScene: SKScene {

        

        var count = 0

        

        override func didMoveToView(view: SKView) {

            self.createBlock()

        }

        

        func createBlock() -> Bool {

            var numberNode = SKLabelNode.node()

            numberNode.name = “number”

            numberNode.text = \(++count)

            numberNode.fontSize = 100

            numberNode.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))

            self.addChild(numberNode)

            

            return isPrimary(count)

        }

        

        override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

            self.childNodeWithName(“number”)?.removeFromParent()

            if self.createBlock() {

                var label = SKLabelNode.node()

                label.text = “primary number!”

                

                var hue = CGFloat((count % 10) * 0.2)

                label.fontColor = SKColor(hue:hue, saturation:0.8, brightness: 0.8, alpha: 1)

                label.fontSize = 30

                label.fontName = “Helvetica Neue Bold”

                self.addChild(label)

                

                label.runAction(SKAction.sequence([SKAction.moveTo(CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)), duration: 0.5), SKAction.waitForDuration(0.5)]), completion: {label.removeFromParent()})

            }

        }

    }

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        var sv = SKView(frame: self.view.bounds)

        self.view.addSubview(sv)

        var scene = PrimeScene(size: sv.frame.size)

        sv.presentScene(scene)

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

}

func isPrimary(n : Int) -> Bool

{

    if n <= 3 {

        return n > 1

    }

    

    if n % 2 == 0 || n % 3 == 0 {

        return false

    }

    

    for var i=5 ; i<sqrt(n); i+=6 {

        if n % i == 0 || n % (n+2) == 0 {

            return false

        }

    }

    

    return true;

}

// number operators  (T_T)

func * (l : Int, r : Float) -> Float {

    return Float(l) * Float(r)

}

func < (l : Int, r : Float) -> Bool {

    return Float(l) < Float(r)

}

func sqrt (n : Int) -> Float {

    return sqrt(Float(n))

}