Swiftで書く「問題解決のPythonプログラミング」P.16,17 その2

Swiftで書く「問題解決のPythonプログラミング」P.16,17 その2

9a.と10a.対応

Playgroundで実施出来ます。

import Cocoa

var sched = [(6, 8), (6, 12), (6, 7), (7, 8),
             (7, 10), (8, 9), (8, 10), (9, 12),
             (9, 10), (10, 11), (10, 12), (11, 12)]

func bestTimeToParty(schedule:[(Int, Int)]) {
    var start = schedule[0].0
    var end = schedule[0].1
    for c in schedule {
        start = min(c.0, start)
        end = max(c.1, end)
    }
    var count = celebrityDensity(sched: schedule, start: start, end: end)
    let maxcount = count[start...end].max()!
    let time = count.firstIndex(of: count[start...end].max()!)!
    print("Best time to attend the party is at \(time) o'clock : \(maxcount) celebrities will be attending!")
}

func celebrityDensity(sched:[(Int, Int)], start:Int, end:Int) -> [Int] {
    var count = [Int](repeating: 0, count: end + 1)
    for i in start...end {
        for c in sched {
            if (c.0 <= i) && (c.1 > i) {
                count[i] = count[i] + 1
            }
        }
    }
    return count
}

bestTimeToParty(schedule: sched)


問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考

Swiftで書く「問題解決のPythonプログラミング」P.16,17

Swiftで書く「問題解決のPythonプログラミング」P.16,17

Playgroundで実施出来ます。

import Cocoa

var sched = [(6, 8), (6, 12), (6, 7), (7, 8),
             (7, 10), (8, 9), (8, 10), (9, 12),
             (9, 10), (10, 11), (10, 12), (11, 12)]

func bestTimeToParty(schedule:[(Int, Int)]) {
    var start = schedule[0].0
    var end = schedule[0].1
    for c in schedule {
        start = min(c.0, start)
        end = max(c.1, end)
    }
    var count = celebrityDensity(sched: schedule, start: start, end: end)
    var maxcount = 0
    var time = 0
    for i in start...end {
        if count[i] > maxcount {
            maxcount = count[i]
            time = i
        }
    }
    print("Best time to attend the party is at \(time) o'clock : \(maxcount) celebrities will be attending!")
}

func celebrityDensity(sched:[(Int, Int)], start:Int, end:Int) -> [Int] {
    var count = [Int](repeating: 0, count: end + 1)
    for i in start...end {
        for c in sched {
            if (c.0 <= i) && (c.1 > i) {
                count[i] = count[i] + 1
            }
        }
    }
    return count
}

bestTimeToParty(schedule: sched)


問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考

Swiftで書く「問題解決のPythonプログラミング」P.10

Swiftで書く「問題解決のPythonプログラミング」P.10
1パスアルゴリズム

Playgroundで実施出来ます。

func pleaseConformOnepass(caps:[String]) {
    var caps = caps
    caps.append(caps[0])
    for i in 1...caps.count - 1 {
        if caps[i] != caps[i - 1] {
            if caps[i] != caps[0] {
                print("People in positions \(i) end=")
            }
            else {
                print(" through \(i - 1) flip your caps!")
            }
        }
    }
}


問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考

Swiftで書く「問題解決のPythonプログラミング」P.8

Swiftで書く「問題解決のPythonプログラミング」P.8

Playgroundで実施出来ます。

import Cocoa

var cap1:[String] = ["F", "F", "B", "B", "B", "F", "B",
                        "B", "B", "F", "F", "B", "F"]
var cap2:[String] = ["F", "F", "B", "B", "B", "F", "B",
                        "B", "B", "F", "F", "F", "F"]

func pleaseConform(caps:[String]) {
    var start = 0
    var forward = 0
    var backward = 0
    var intervals:[(Int, Int, String)] = []
    var caps = caps
    caps.append("END")
    for i in 1...caps.count - 1 {
        if caps[start] != caps[i] {
            intervals.append((start, i - 1, caps[start]))
            if caps[start] == "F" {
                forward = forward + 1
            }
            else {
                backward = backward + 1
            }
            start = i
        }
    }
    var flip:String
    if forward < backward {
        flip = "F"
    }
    else {
        flip = "B"
    }
    for t in intervals {
        if t.2 == flip {
            print("People in positions \(t.0) through \(t.1) flip your caps!")
        }
    }
}

print("cap1")
pleaseConform(caps: cap1)
print("cap2")
pleaseConform(caps: cap2)


問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考

Swiftで書く「問題解決のPythonプログラミング」P.5

Swiftで書く「問題解決のPythonプログラミング」P.5

Playgroundで実施出来ます。

import Cocoa

var cap1:[Character] = ["F", "F", "B", "B", "B", "F", "B",
                        "B", "B", "F", "F", "B", "F"]

func pleaseConform(caps:[Character]) {
    var start = 0
    var forward = 0
    var backward = 0
    var intervals:[(Int, Int, Character)] = []
    
    for i in 1...caps.count - 1 {
        if caps[start] != caps[i] {
            intervals.append((start, i - 1, caps[start]))
            if caps[start] == "F" {
                forward = forward + 1
            }
            else {
                backward = backward + 1
            }
            start = i
        }
    }
    intervals.append((start, caps.count - 1, caps[start]))
    if caps[start] == "F" {
        forward = forward + 1
    }
    else {
        backward = backward + 1
    }
    var flip:Character
    if forward < backward {
        flip = "F"
    }
    else {
        flip = "B"
    }
    for t in intervals {
        if t.2 == flip {
            print("People in positions \(t.0) through \(t.1) flip your caps!")
        }
    }
}

pleaseConform(caps: cap1)


問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考

Effective Java 第3版 翻訳版 2018/10/31に発売


Effective Java 第3版

Effective Java 第3版 翻訳版 2018/10/31に発売されます。
第2版から10年たっていますね。
私はピアソン・エデュケーションのものを持っています。今は丸善出版から出ています。
Java 8までに追加された機能たちが追記されているとの事。
待ち遠し。※原著で読めばいいという解もありますが。
丸善出版なので、電子書籍版は出なそうですね。自分でPDF化するか。第2版はPDF化してiPadに入れています。
Javaエンジニアは必読だと思います。

[Swift][PDFKit]PDFView表示されている頁番号を取得する

PDFViewに表示されているPDFの頁番号を取得する。
注意:頁番号と言ってもPDF内に書かれている頁番号ではなく、PDFの頁番号です。

pdfViewがPDFViewクラスのインスタンス。

pdfView.currentPage?.pageRef?.pageNumber
  • PDFViewのcurrentPageで表示されているPDFPageを取得。
  • PDFPageのpageRefでCGPDFPageを取得。
  • CGPDFPageのpageNumberで頁番号を取得。
    ドキュメントより
    「Returns the page number of the specified PDF page.」
    「指定されたPDFページのページ番号を返します。」