2014年9月12日金曜日

開発環境

Practical Programming: An Introduction to Computer Science Using Python 3 (Pragmatic Programmers) (Paul Gries (著)、Jennifer Campbell (著)、Jason Montojo (著)、Lynn Beighley (編集)、Pragmatic Bookshelf)のChapter 9(Repeating Code Using Loops)、9.10(Exercises) 10.をSwiftで考えてみる。

9.10(Exercises) 10.

コード(Xcode)

main.swift

//
//  main.swift
//  sample10
//
//  Created by kamimura on 9/12/14.
//  Copyright (c) 2014 kamimura. All rights reserved.
//

import Foundation

var a = range(start: 10, 0, step: -1)
var b = reverse(1...10)
var c = reverse(1..<11)

for n in a {
    print("\(n) ")
}
println()

for n in b {
    print("\(n) ")
}
println()

for n in c {
    print("\(n) ")
}
println()

println(" ".join(a.map({(n:Int) in String(n)})))

println(" ".join(b.map({(n:Int) in String(n)})))

println(" ".join(c.map({(n:Int) in String(n)})))

array.swift

//
//  array.swift
//  array
//
//  Created by kamimura on 8/21/14.
//  Copyright (c) 2014 kamimura. All rights reserved.
//

import Foundation

extension Array {
    func indexAt(i:Int) -> T {
        if i >= 0 {
            return self[i]
        }
        let new_index:Int = self.count + i
        return self[new_index]
    }
    func slice(start:Int = 0, end:Int? = nil) -> Array {
        var new_start = start >= 0 ? start : self.count + start
        var new_end:Int
        if end == nil {
            new_end = self.count
        } else if end! >= 0 {
            new_end = end!
        } else {
            new_end = self.count + end!
        }
        var result:Array = []
        if new_start >= new_end {
            return []
        }
        for i in new_start..<new_end {
            result.append(self[i])
        }
        return result
    }
    func forEach(f:(T) -> ()) {
        for e in self {
            f(e)
        }
    }
}

func sum(nums:[Int]) -> Int {
    return nums.reduce(0, combine: {(x, y) in x + y})
}

func range(start:Int = 0, end:Int, step:Int = 1) -> [Int] {
    assert(step != 0, "arg 3 must not be zero")

    var result:[Int] = []
    var elem = start
    
    if step > 0 {
        while elem < end {
            result.append(elem)
            elem += step
        }
    } else {
        while elem > end {
            result.append(elem)
            elem += step
        }
    }
    
    return result
}

入出力結果(Console Output)

10 9 8 7 6 5 4 3 2 1 
10 9 8 7 6 5 4 3 2 1 
10 9 8 7 6 5 4 3 2 1 
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
Program ended with exit code: 0

0 コメント:

コメントを投稿