├── .gitignore ├── Cartfile ├── Cartfile.resolved ├── Carthage └── Checkouts │ └── SwiftyStringExtension │ ├── .gitignore │ ├── LICENSE │ ├── Playground │ └── Playground.playground │ │ ├── Pages │ │ ├── BasicUsage.xcplaygroundpage │ │ │ └── Contents.swift │ │ └── Plain.xcplaygroundpage │ │ │ └── Contents.swift │ │ └── contents.xcplayground │ ├── README.md │ ├── Sources │ ├── Character.extension.swift │ ├── Info.plist │ ├── String.CharacterView.extension.swift │ └── String.extension.swift │ ├── SwiftyStringExtension.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ ├── SwiftyStringExtension-iOS.xcscheme │ │ └── SwiftyStringExtension-macOS.xcscheme │ └── Tests │ ├── CharacterTests.swift │ ├── Info.plist │ ├── String.CharacterViewTests.swift.swift │ └── StringTests.swift ├── LICENSE ├── MyPlayground.playground ├── Contents.swift └── contents.xcplayground ├── NLP100Swift ├── Chapter1.swift ├── Chapter2.swift ├── Collection.extension.swift ├── Info.plist └── NLP100Swift.h ├── NLP100SwiftTests ├── Chapter1Tests.swift ├── Chapter2Tests.swift ├── CollectionTests.swift ├── Info.plist ├── TestUtil.swift ├── hightemp.txt ├── hightemp_c1+2.txt ├── hightemp_c1.txt ├── hightemp_c1sortuniq.txt ├── hightemp_c2.txt ├── hightemp_headn3.txt ├── hightemp_sortf1count.txt ├── hightemp_sortk3r.txt ├── hightemp_tab2space.txt ├── hightemp_tailn3.txt ├── xaa ├── xab └── xac ├── README.md └── nlp100-swift.xcodeproj ├── project.pbxproj └── project.xcworkspace └── contents.xcworkspacedata /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | *.dSYM.zip 28 | *.dSYM 29 | 30 | ## Playgrounds 31 | timeline.xctimeline 32 | playground.xcworkspace 33 | 34 | # Swift Package Manager 35 | # 36 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 37 | # Packages/ 38 | .build/ 39 | 40 | # CocoaPods 41 | # 42 | # We recommend against adding the Pods directory to your .gitignore. However 43 | # you should judge for yourself, the pros and cons are mentioned at: 44 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 45 | # 46 | # Pods/ 47 | 48 | # Carthage 49 | # 50 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 51 | # Carthage/Checkouts 52 | 53 | Carthage/Build 54 | 55 | # fastlane 56 | # 57 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 58 | # screenshots whenever they are needed. 59 | # For more information about the recommended setup visit: 60 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 61 | 62 | fastlane/report.xml 63 | fastlane/Preview.html 64 | fastlane/screenshots 65 | fastlane/test_output 66 | -------------------------------------------------------------------------------- /Cartfile: -------------------------------------------------------------------------------- 1 | github "mono0926/SwiftyStringExtension" -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "mono0926/SwiftyStringExtension" "0.0.5" 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | *.dSYM.zip 28 | *.dSYM 29 | 30 | ## Playgrounds 31 | timeline.xctimeline 32 | playground.xcworkspace 33 | 34 | # Swift Package Manager 35 | # 36 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 37 | # Packages/ 38 | .build/ 39 | 40 | # CocoaPods 41 | # 42 | # We recommend against adding the Pods directory to your .gitignore. However 43 | # you should judge for yourself, the pros and cons are mentioned at: 44 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 45 | # 46 | # Pods/ 47 | 48 | # Carthage 49 | # 50 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 51 | # Carthage/Checkouts 52 | 53 | Carthage/Build 54 | 55 | # fastlane 56 | # 57 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 58 | # screenshots whenever they are needed. 59 | # For more information about the recommended setup visit: 60 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 61 | 62 | fastlane/report.xml 63 | fastlane/Preview.html 64 | fastlane/screenshots 65 | fastlane/test_output 66 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Masayuki Ono 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/Playground/Playground.playground/Pages/BasicUsage.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- 1 | //: Playground - noun: a place where people can play 2 | 3 | #if os(OSX) 4 | import Cocoa 5 | #elseif os(iOS) 6 | import UIKit 7 | #endif 8 | import SwiftyStringExtension 9 | 10 | var str = "Hello, playground" 11 | str[sequentialAccess: 1..<3] -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/Playground/Playground.playground/Pages/Plain.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- 1 | //: [Previous](@previous) 2 | 3 | import Foundation 4 | 5 | var str = "Hello, playground" -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/Playground/Playground.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/README.md: -------------------------------------------------------------------------------- 1 | # SwiftyStringExtension 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/Sources/Character.extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Character.extension.swift 3 | // SwiftyStringExtension 4 | // 5 | // Created by mono on 2016/10/02. 6 | // Copyright © 2016 mono. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension Character 12 | { 13 | public init?(asciiCode: UInt32) { 14 | guard let scalar = UnicodeScalar(asciiCode), scalar.isASCII else { 15 | return nil 16 | } 17 | self = Character(scalar) 18 | } 19 | 20 | public var unicodeScalar: UnicodeScalar { 21 | let characterString = String(self) 22 | let scalars = characterString.unicodeScalars 23 | // more than one scalar is not possible 24 | assert(scalars.index(after: scalars.startIndex) == scalars.endIndex) 25 | return scalars.first! 26 | } 27 | 28 | public var asciiCode: UInt32? { 29 | let unicodeScalar = self.unicodeScalar 30 | guard unicodeScalar.isASCII else { return nil } 31 | return unicodeScalar.value 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/Sources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/Sources/String.CharacterView.extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String.CharacterView.extension.swift 3 | // SwiftyStringExtension 4 | // 5 | // Created by mono on 2016/10/02. 6 | // Copyright © 2016 mono. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension String.CharacterView { 12 | 13 | public subscript(sequentialAccess range: Range) -> String.CharacterView { 14 | let lower = range.lowerBound 15 | let startIndex = index(self.startIndex, offsetBy: lower) 16 | let endIndex = index(startIndex, offsetBy: range.count) 17 | return self[startIndex.. Character { 21 | return self[sequentialAccess: index..) -> String { 18 | return String(characters[sequentialAccess: range]) 19 | } 20 | 21 | public subscript(sequentialAccess index: Int) -> String { 22 | return self[sequentialAccess: index..) -> NSRange { 42 | let from = range.lowerBound.samePosition(in: utf16) 43 | let to = range.upperBound.samePosition(in: utf16) 44 | return NSRange(location: utf16.distance(from: utf16.startIndex, to: from), 45 | length: utf16.distance(from: from, to: to)) 46 | } 47 | 48 | public func makeRange(from range: NSRange) -> Range? { 49 | guard 50 | let from16 = utf16.index(utf16.startIndex, offsetBy: range.location, limitedBy: utf16.endIndex), 51 | let to16 = utf16.index(from16, offsetBy: range.length, limitedBy: utf16.endIndex), 52 | let from = String.Index(from16, within: self), 53 | let to = String.Index(to16, within: self) 54 | else { return nil } 55 | return from ..< to 56 | } 57 | 58 | // MARK: - Convenient 59 | public mutating func replace(of target: String, with replacement: String) { 60 | self = replacingOccurrences(of: target, with: replacement) 61 | } 62 | public func addingUrlEncoding() -> String { 63 | return addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! 64 | } 65 | public func getValueOrNil() -> String? { 66 | if String.isEmpty(self) { 67 | return nil 68 | } 69 | return self 70 | } 71 | public static func isEmpty(_ s: String?) -> Bool { 72 | if let s = s { 73 | return s.isEmpty 74 | } 75 | return true 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/SwiftyStringExtension.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | FE3261811DA0F358002C5A7F /* SwiftyStringExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE3261771DA0F357002C5A7F /* SwiftyStringExtension.framework */; }; 11 | FE6A0E2A1DA0FB3800195B68 /* String.CharacterView.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6A0E291DA0FB3800195B68 /* String.CharacterView.extension.swift */; }; 12 | FE6A0E2C1DA0FB5400195B68 /* Character.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6A0E2B1DA0FB5400195B68 /* Character.extension.swift */; }; 13 | FE6A0E311DA0FBB400195B68 /* StringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6A0E2D1DA0FB9A00195B68 /* StringTests.swift */; }; 14 | FE6A0E321DA0FBB700195B68 /* String.CharacterViewTests.swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6A0E2F1DA0FBAF00195B68 /* String.CharacterViewTests.swift.swift */; }; 15 | FE7F50A41DA1240A00FCD392 /* SwiftyStringExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE7F509B1DA1240A00FCD392 /* SwiftyStringExtension.framework */; }; 16 | FE7F50B21DA1246700FCD392 /* Character.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6A0E2B1DA0FB5400195B68 /* Character.extension.swift */; }; 17 | FE7F50B31DA1246700FCD392 /* String.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECE38041DA0F44C00D12632 /* String.extension.swift */; }; 18 | FE7F50B41DA1246700FCD392 /* String.CharacterView.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6A0E291DA0FB3800195B68 /* String.CharacterView.extension.swift */; }; 19 | FE7F50B51DA1247F00FCD392 /* CharacterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECE380C1DA0F47700D12632 /* CharacterTests.swift */; }; 20 | FE7F50B61DA1247F00FCD392 /* StringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6A0E2D1DA0FB9A00195B68 /* StringTests.swift */; }; 21 | FE7F50B71DA1247F00FCD392 /* String.CharacterViewTests.swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6A0E2F1DA0FBAF00195B68 /* String.CharacterViewTests.swift.swift */; }; 22 | FECE38081DA0F44C00D12632 /* String.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECE38041DA0F44C00D12632 /* String.extension.swift */; }; 23 | FECE380E1DA0F47700D12632 /* CharacterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECE380C1DA0F47700D12632 /* CharacterTests.swift */; }; 24 | /* End PBXBuildFile section */ 25 | 26 | /* Begin PBXContainerItemProxy section */ 27 | FE3261821DA0F358002C5A7F /* PBXContainerItemProxy */ = { 28 | isa = PBXContainerItemProxy; 29 | containerPortal = FE32616E1DA0F357002C5A7F /* Project object */; 30 | proxyType = 1; 31 | remoteGlobalIDString = FE3261761DA0F357002C5A7F; 32 | remoteInfo = SwiftyStringExtension; 33 | }; 34 | FE7F50A51DA1240A00FCD392 /* PBXContainerItemProxy */ = { 35 | isa = PBXContainerItemProxy; 36 | containerPortal = FE32616E1DA0F357002C5A7F /* Project object */; 37 | proxyType = 1; 38 | remoteGlobalIDString = FE7F509A1DA1240A00FCD392; 39 | remoteInfo = SwiftyStringExtension; 40 | }; 41 | /* End PBXContainerItemProxy section */ 42 | 43 | /* Begin PBXFileReference section */ 44 | FE3261771DA0F357002C5A7F /* SwiftyStringExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyStringExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | FE3261801DA0F358002C5A7F /* SwiftyStringExtensionTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftyStringExtensionTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | FE6A0E281DA0F90D00195B68 /* Playground.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; name = Playground.playground; path = Playground/Playground.playground; sourceTree = ""; }; 47 | FE6A0E291DA0FB3800195B68 /* String.CharacterView.extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = String.CharacterView.extension.swift; sourceTree = ""; }; 48 | FE6A0E2B1DA0FB5400195B68 /* Character.extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Character.extension.swift; sourceTree = ""; }; 49 | FE6A0E2D1DA0FB9A00195B68 /* StringTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringTests.swift; sourceTree = ""; }; 50 | FE6A0E2F1DA0FBAF00195B68 /* String.CharacterViewTests.swift.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = String.CharacterViewTests.swift.swift; sourceTree = ""; }; 51 | FE7F509B1DA1240A00FCD392 /* SwiftyStringExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyStringExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | FE7F50A31DA1240A00FCD392 /* SwiftyStringExtensionTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftyStringExtensionTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | FECE38021DA0F44C00D12632 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 54 | FECE38041DA0F44C00D12632 /* String.extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = String.extension.swift; sourceTree = ""; }; 55 | FECE380B1DA0F47700D12632 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | FECE380C1DA0F47700D12632 /* CharacterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CharacterTests.swift; sourceTree = ""; }; 57 | /* End PBXFileReference section */ 58 | 59 | /* Begin PBXFrameworksBuildPhase section */ 60 | FE3261731DA0F357002C5A7F /* Frameworks */ = { 61 | isa = PBXFrameworksBuildPhase; 62 | buildActionMask = 2147483647; 63 | files = ( 64 | ); 65 | runOnlyForDeploymentPostprocessing = 0; 66 | }; 67 | FE32617D1DA0F358002C5A7F /* Frameworks */ = { 68 | isa = PBXFrameworksBuildPhase; 69 | buildActionMask = 2147483647; 70 | files = ( 71 | FE3261811DA0F358002C5A7F /* SwiftyStringExtension.framework in Frameworks */, 72 | ); 73 | runOnlyForDeploymentPostprocessing = 0; 74 | }; 75 | FE7F50971DA1240A00FCD392 /* Frameworks */ = { 76 | isa = PBXFrameworksBuildPhase; 77 | buildActionMask = 2147483647; 78 | files = ( 79 | ); 80 | runOnlyForDeploymentPostprocessing = 0; 81 | }; 82 | FE7F50A01DA1240A00FCD392 /* Frameworks */ = { 83 | isa = PBXFrameworksBuildPhase; 84 | buildActionMask = 2147483647; 85 | files = ( 86 | FE7F50A41DA1240A00FCD392 /* SwiftyStringExtension.framework in Frameworks */, 87 | ); 88 | runOnlyForDeploymentPostprocessing = 0; 89 | }; 90 | /* End PBXFrameworksBuildPhase section */ 91 | 92 | /* Begin PBXGroup section */ 93 | FE32616D1DA0F357002C5A7F = { 94 | isa = PBXGroup; 95 | children = ( 96 | FE6A0E281DA0F90D00195B68 /* Playground.playground */, 97 | FECE38011DA0F44C00D12632 /* Sources */, 98 | FECE380A1DA0F47700D12632 /* Tests */, 99 | FE3261781DA0F357002C5A7F /* Products */, 100 | ); 101 | sourceTree = ""; 102 | }; 103 | FE3261781DA0F357002C5A7F /* Products */ = { 104 | isa = PBXGroup; 105 | children = ( 106 | FE3261771DA0F357002C5A7F /* SwiftyStringExtension.framework */, 107 | FE3261801DA0F358002C5A7F /* SwiftyStringExtensionTests.xctest */, 108 | FE7F509B1DA1240A00FCD392 /* SwiftyStringExtension.framework */, 109 | FE7F50A31DA1240A00FCD392 /* SwiftyStringExtensionTests.xctest */, 110 | ); 111 | name = Products; 112 | sourceTree = ""; 113 | }; 114 | FECE38011DA0F44C00D12632 /* Sources */ = { 115 | isa = PBXGroup; 116 | children = ( 117 | FECE38021DA0F44C00D12632 /* Info.plist */, 118 | FE6A0E2B1DA0FB5400195B68 /* Character.extension.swift */, 119 | FECE38041DA0F44C00D12632 /* String.extension.swift */, 120 | FE6A0E291DA0FB3800195B68 /* String.CharacterView.extension.swift */, 121 | ); 122 | path = Sources; 123 | sourceTree = ""; 124 | }; 125 | FECE380A1DA0F47700D12632 /* Tests */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | FECE380B1DA0F47700D12632 /* Info.plist */, 129 | FECE380C1DA0F47700D12632 /* CharacterTests.swift */, 130 | FE6A0E2D1DA0FB9A00195B68 /* StringTests.swift */, 131 | FE6A0E2F1DA0FBAF00195B68 /* String.CharacterViewTests.swift.swift */, 132 | ); 133 | path = Tests; 134 | sourceTree = ""; 135 | }; 136 | /* End PBXGroup section */ 137 | 138 | /* Begin PBXHeadersBuildPhase section */ 139 | FE3261741DA0F357002C5A7F /* Headers */ = { 140 | isa = PBXHeadersBuildPhase; 141 | buildActionMask = 2147483647; 142 | files = ( 143 | ); 144 | runOnlyForDeploymentPostprocessing = 0; 145 | }; 146 | FE7F50981DA1240A00FCD392 /* Headers */ = { 147 | isa = PBXHeadersBuildPhase; 148 | buildActionMask = 2147483647; 149 | files = ( 150 | ); 151 | runOnlyForDeploymentPostprocessing = 0; 152 | }; 153 | /* End PBXHeadersBuildPhase section */ 154 | 155 | /* Begin PBXNativeTarget section */ 156 | FE3261761DA0F357002C5A7F /* SwiftyStringExtension-iOS */ = { 157 | isa = PBXNativeTarget; 158 | buildConfigurationList = FE32618B1DA0F358002C5A7F /* Build configuration list for PBXNativeTarget "SwiftyStringExtension-iOS" */; 159 | buildPhases = ( 160 | FE3261721DA0F357002C5A7F /* Sources */, 161 | FE3261731DA0F357002C5A7F /* Frameworks */, 162 | FE3261741DA0F357002C5A7F /* Headers */, 163 | FE3261751DA0F357002C5A7F /* Resources */, 164 | ); 165 | buildRules = ( 166 | ); 167 | dependencies = ( 168 | ); 169 | name = "SwiftyStringExtension-iOS"; 170 | productName = SwiftyStringExtension; 171 | productReference = FE3261771DA0F357002C5A7F /* SwiftyStringExtension.framework */; 172 | productType = "com.apple.product-type.framework"; 173 | }; 174 | FE32617F1DA0F358002C5A7F /* SwiftyStringExtensionTests-iOS */ = { 175 | isa = PBXNativeTarget; 176 | buildConfigurationList = FE32618E1DA0F358002C5A7F /* Build configuration list for PBXNativeTarget "SwiftyStringExtensionTests-iOS" */; 177 | buildPhases = ( 178 | FE32617C1DA0F358002C5A7F /* Sources */, 179 | FE32617D1DA0F358002C5A7F /* Frameworks */, 180 | FE32617E1DA0F358002C5A7F /* Resources */, 181 | ); 182 | buildRules = ( 183 | ); 184 | dependencies = ( 185 | FE3261831DA0F358002C5A7F /* PBXTargetDependency */, 186 | ); 187 | name = "SwiftyStringExtensionTests-iOS"; 188 | productName = SwiftyStringExtensionTests; 189 | productReference = FE3261801DA0F358002C5A7F /* SwiftyStringExtensionTests.xctest */; 190 | productType = "com.apple.product-type.bundle.unit-test"; 191 | }; 192 | FE7F509A1DA1240A00FCD392 /* SwiftyStringExtension-macOS */ = { 193 | isa = PBXNativeTarget; 194 | buildConfigurationList = FE7F50AC1DA1240B00FCD392 /* Build configuration list for PBXNativeTarget "SwiftyStringExtension-macOS" */; 195 | buildPhases = ( 196 | FE7F50961DA1240A00FCD392 /* Sources */, 197 | FE7F50971DA1240A00FCD392 /* Frameworks */, 198 | FE7F50981DA1240A00FCD392 /* Headers */, 199 | FE7F50991DA1240A00FCD392 /* Resources */, 200 | ); 201 | buildRules = ( 202 | ); 203 | dependencies = ( 204 | ); 205 | name = "SwiftyStringExtension-macOS"; 206 | productName = SwiftyStringExtension; 207 | productReference = FE7F509B1DA1240A00FCD392 /* SwiftyStringExtension.framework */; 208 | productType = "com.apple.product-type.framework"; 209 | }; 210 | FE7F50A21DA1240A00FCD392 /* SwiftyStringExtensionTests-macOS */ = { 211 | isa = PBXNativeTarget; 212 | buildConfigurationList = FE7F50AF1DA1240B00FCD392 /* Build configuration list for PBXNativeTarget "SwiftyStringExtensionTests-macOS" */; 213 | buildPhases = ( 214 | FE7F509F1DA1240A00FCD392 /* Sources */, 215 | FE7F50A01DA1240A00FCD392 /* Frameworks */, 216 | FE7F50A11DA1240A00FCD392 /* Resources */, 217 | ); 218 | buildRules = ( 219 | ); 220 | dependencies = ( 221 | FE7F50A61DA1240A00FCD392 /* PBXTargetDependency */, 222 | ); 223 | name = "SwiftyStringExtensionTests-macOS"; 224 | productName = SwiftyStringExtensionTests; 225 | productReference = FE7F50A31DA1240A00FCD392 /* SwiftyStringExtensionTests.xctest */; 226 | productType = "com.apple.product-type.bundle.unit-test"; 227 | }; 228 | /* End PBXNativeTarget section */ 229 | 230 | /* Begin PBXProject section */ 231 | FE32616E1DA0F357002C5A7F /* Project object */ = { 232 | isa = PBXProject; 233 | attributes = { 234 | LastSwiftUpdateCheck = 0800; 235 | LastUpgradeCheck = 0800; 236 | ORGANIZATIONNAME = mono; 237 | TargetAttributes = { 238 | FE3261761DA0F357002C5A7F = { 239 | CreatedOnToolsVersion = 8.0; 240 | LastSwiftMigration = 0800; 241 | ProvisioningStyle = Automatic; 242 | }; 243 | FE32617F1DA0F358002C5A7F = { 244 | CreatedOnToolsVersion = 8.0; 245 | ProvisioningStyle = Automatic; 246 | }; 247 | FE7F509A1DA1240A00FCD392 = { 248 | CreatedOnToolsVersion = 8.0; 249 | ProvisioningStyle = Automatic; 250 | }; 251 | FE7F50A21DA1240A00FCD392 = { 252 | CreatedOnToolsVersion = 8.0; 253 | ProvisioningStyle = Automatic; 254 | }; 255 | }; 256 | }; 257 | buildConfigurationList = FE3261711DA0F357002C5A7F /* Build configuration list for PBXProject "SwiftyStringExtension" */; 258 | compatibilityVersion = "Xcode 3.2"; 259 | developmentRegion = English; 260 | hasScannedForEncodings = 0; 261 | knownRegions = ( 262 | en, 263 | ); 264 | mainGroup = FE32616D1DA0F357002C5A7F; 265 | productRefGroup = FE3261781DA0F357002C5A7F /* Products */; 266 | projectDirPath = ""; 267 | projectRoot = ""; 268 | targets = ( 269 | FE3261761DA0F357002C5A7F /* SwiftyStringExtension-iOS */, 270 | FE32617F1DA0F358002C5A7F /* SwiftyStringExtensionTests-iOS */, 271 | FE7F509A1DA1240A00FCD392 /* SwiftyStringExtension-macOS */, 272 | FE7F50A21DA1240A00FCD392 /* SwiftyStringExtensionTests-macOS */, 273 | ); 274 | }; 275 | /* End PBXProject section */ 276 | 277 | /* Begin PBXResourcesBuildPhase section */ 278 | FE3261751DA0F357002C5A7F /* Resources */ = { 279 | isa = PBXResourcesBuildPhase; 280 | buildActionMask = 2147483647; 281 | files = ( 282 | ); 283 | runOnlyForDeploymentPostprocessing = 0; 284 | }; 285 | FE32617E1DA0F358002C5A7F /* Resources */ = { 286 | isa = PBXResourcesBuildPhase; 287 | buildActionMask = 2147483647; 288 | files = ( 289 | ); 290 | runOnlyForDeploymentPostprocessing = 0; 291 | }; 292 | FE7F50991DA1240A00FCD392 /* Resources */ = { 293 | isa = PBXResourcesBuildPhase; 294 | buildActionMask = 2147483647; 295 | files = ( 296 | ); 297 | runOnlyForDeploymentPostprocessing = 0; 298 | }; 299 | FE7F50A11DA1240A00FCD392 /* Resources */ = { 300 | isa = PBXResourcesBuildPhase; 301 | buildActionMask = 2147483647; 302 | files = ( 303 | ); 304 | runOnlyForDeploymentPostprocessing = 0; 305 | }; 306 | /* End PBXResourcesBuildPhase section */ 307 | 308 | /* Begin PBXSourcesBuildPhase section */ 309 | FE3261721DA0F357002C5A7F /* Sources */ = { 310 | isa = PBXSourcesBuildPhase; 311 | buildActionMask = 2147483647; 312 | files = ( 313 | FE6A0E2C1DA0FB5400195B68 /* Character.extension.swift in Sources */, 314 | FE6A0E2A1DA0FB3800195B68 /* String.CharacterView.extension.swift in Sources */, 315 | FECE38081DA0F44C00D12632 /* String.extension.swift in Sources */, 316 | ); 317 | runOnlyForDeploymentPostprocessing = 0; 318 | }; 319 | FE32617C1DA0F358002C5A7F /* Sources */ = { 320 | isa = PBXSourcesBuildPhase; 321 | buildActionMask = 2147483647; 322 | files = ( 323 | FE6A0E311DA0FBB400195B68 /* StringTests.swift in Sources */, 324 | FE6A0E321DA0FBB700195B68 /* String.CharacterViewTests.swift.swift in Sources */, 325 | FECE380E1DA0F47700D12632 /* CharacterTests.swift in Sources */, 326 | ); 327 | runOnlyForDeploymentPostprocessing = 0; 328 | }; 329 | FE7F50961DA1240A00FCD392 /* Sources */ = { 330 | isa = PBXSourcesBuildPhase; 331 | buildActionMask = 2147483647; 332 | files = ( 333 | FE7F50B21DA1246700FCD392 /* Character.extension.swift in Sources */, 334 | FE7F50B41DA1246700FCD392 /* String.CharacterView.extension.swift in Sources */, 335 | FE7F50B31DA1246700FCD392 /* String.extension.swift in Sources */, 336 | ); 337 | runOnlyForDeploymentPostprocessing = 0; 338 | }; 339 | FE7F509F1DA1240A00FCD392 /* Sources */ = { 340 | isa = PBXSourcesBuildPhase; 341 | buildActionMask = 2147483647; 342 | files = ( 343 | FE7F50B61DA1247F00FCD392 /* StringTests.swift in Sources */, 344 | FE7F50B71DA1247F00FCD392 /* String.CharacterViewTests.swift.swift in Sources */, 345 | FE7F50B51DA1247F00FCD392 /* CharacterTests.swift in Sources */, 346 | ); 347 | runOnlyForDeploymentPostprocessing = 0; 348 | }; 349 | /* End PBXSourcesBuildPhase section */ 350 | 351 | /* Begin PBXTargetDependency section */ 352 | FE3261831DA0F358002C5A7F /* PBXTargetDependency */ = { 353 | isa = PBXTargetDependency; 354 | target = FE3261761DA0F357002C5A7F /* SwiftyStringExtension-iOS */; 355 | targetProxy = FE3261821DA0F358002C5A7F /* PBXContainerItemProxy */; 356 | }; 357 | FE7F50A61DA1240A00FCD392 /* PBXTargetDependency */ = { 358 | isa = PBXTargetDependency; 359 | target = FE7F509A1DA1240A00FCD392 /* SwiftyStringExtension-macOS */; 360 | targetProxy = FE7F50A51DA1240A00FCD392 /* PBXContainerItemProxy */; 361 | }; 362 | /* End PBXTargetDependency section */ 363 | 364 | /* Begin XCBuildConfiguration section */ 365 | FE3261891DA0F358002C5A7F /* Debug */ = { 366 | isa = XCBuildConfiguration; 367 | buildSettings = { 368 | ALWAYS_SEARCH_USER_PATHS = NO; 369 | CLANG_ANALYZER_NONNULL = YES; 370 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 371 | CLANG_CXX_LIBRARY = "libc++"; 372 | CLANG_ENABLE_MODULES = YES; 373 | CLANG_ENABLE_OBJC_ARC = YES; 374 | CLANG_WARN_BOOL_CONVERSION = YES; 375 | CLANG_WARN_CONSTANT_CONVERSION = YES; 376 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 377 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 378 | CLANG_WARN_EMPTY_BODY = YES; 379 | CLANG_WARN_ENUM_CONVERSION = YES; 380 | CLANG_WARN_INFINITE_RECURSION = YES; 381 | CLANG_WARN_INT_CONVERSION = YES; 382 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 383 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 384 | CLANG_WARN_UNREACHABLE_CODE = YES; 385 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 386 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 387 | COPY_PHASE_STRIP = NO; 388 | CURRENT_PROJECT_VERSION = 1; 389 | DEBUG_INFORMATION_FORMAT = dwarf; 390 | ENABLE_STRICT_OBJC_MSGSEND = YES; 391 | ENABLE_TESTABILITY = YES; 392 | GCC_C_LANGUAGE_STANDARD = gnu99; 393 | GCC_DYNAMIC_NO_PIC = NO; 394 | GCC_NO_COMMON_BLOCKS = YES; 395 | GCC_OPTIMIZATION_LEVEL = 0; 396 | GCC_PREPROCESSOR_DEFINITIONS = ( 397 | "DEBUG=1", 398 | "$(inherited)", 399 | ); 400 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 401 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 402 | GCC_WARN_UNDECLARED_SELECTOR = YES; 403 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 404 | GCC_WARN_UNUSED_FUNCTION = YES; 405 | GCC_WARN_UNUSED_VARIABLE = YES; 406 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 407 | MACOSX_DEPLOYMENT_TARGET = 10.9; 408 | MTL_ENABLE_DEBUG_INFO = YES; 409 | ONLY_ACTIVE_ARCH = YES; 410 | SDKROOT = iphoneos; 411 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 412 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 413 | TARGETED_DEVICE_FAMILY = "1,2"; 414 | VERSIONING_SYSTEM = "apple-generic"; 415 | VERSION_INFO_PREFIX = ""; 416 | }; 417 | name = Debug; 418 | }; 419 | FE32618A1DA0F358002C5A7F /* Release */ = { 420 | isa = XCBuildConfiguration; 421 | buildSettings = { 422 | ALWAYS_SEARCH_USER_PATHS = NO; 423 | CLANG_ANALYZER_NONNULL = YES; 424 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 425 | CLANG_CXX_LIBRARY = "libc++"; 426 | CLANG_ENABLE_MODULES = YES; 427 | CLANG_ENABLE_OBJC_ARC = YES; 428 | CLANG_WARN_BOOL_CONVERSION = YES; 429 | CLANG_WARN_CONSTANT_CONVERSION = YES; 430 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 431 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 432 | CLANG_WARN_EMPTY_BODY = YES; 433 | CLANG_WARN_ENUM_CONVERSION = YES; 434 | CLANG_WARN_INFINITE_RECURSION = YES; 435 | CLANG_WARN_INT_CONVERSION = YES; 436 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 437 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 438 | CLANG_WARN_UNREACHABLE_CODE = YES; 439 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 440 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 441 | COPY_PHASE_STRIP = NO; 442 | CURRENT_PROJECT_VERSION = 1; 443 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 444 | ENABLE_NS_ASSERTIONS = NO; 445 | ENABLE_STRICT_OBJC_MSGSEND = YES; 446 | GCC_C_LANGUAGE_STANDARD = gnu99; 447 | GCC_NO_COMMON_BLOCKS = YES; 448 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 449 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 450 | GCC_WARN_UNDECLARED_SELECTOR = YES; 451 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 452 | GCC_WARN_UNUSED_FUNCTION = YES; 453 | GCC_WARN_UNUSED_VARIABLE = YES; 454 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 455 | MACOSX_DEPLOYMENT_TARGET = 10.9; 456 | MTL_ENABLE_DEBUG_INFO = NO; 457 | SDKROOT = iphoneos; 458 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 459 | TARGETED_DEVICE_FAMILY = "1,2"; 460 | VALIDATE_PRODUCT = YES; 461 | VERSIONING_SYSTEM = "apple-generic"; 462 | VERSION_INFO_PREFIX = ""; 463 | }; 464 | name = Release; 465 | }; 466 | FE32618C1DA0F358002C5A7F /* Debug */ = { 467 | isa = XCBuildConfiguration; 468 | buildSettings = { 469 | APPLICATION_EXTENSION_API_ONLY = YES; 470 | CLANG_ENABLE_MODULES = YES; 471 | CODE_SIGN_IDENTITY = ""; 472 | DEFINES_MODULE = YES; 473 | DYLIB_COMPATIBILITY_VERSION = 1; 474 | DYLIB_CURRENT_VERSION = 1; 475 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 476 | INFOPLIST_FILE = Sources/Info.plist; 477 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 478 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 479 | PRODUCT_BUNDLE_IDENTIFIER = com.mono0926.SwiftyStringExtension; 480 | PRODUCT_NAME = SwiftyStringExtension; 481 | SKIP_INSTALL = YES; 482 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 483 | SWIFT_VERSION = 3.0; 484 | }; 485 | name = Debug; 486 | }; 487 | FE32618D1DA0F358002C5A7F /* Release */ = { 488 | isa = XCBuildConfiguration; 489 | buildSettings = { 490 | APPLICATION_EXTENSION_API_ONLY = YES; 491 | CLANG_ENABLE_MODULES = YES; 492 | CODE_SIGN_IDENTITY = ""; 493 | DEFINES_MODULE = YES; 494 | DYLIB_COMPATIBILITY_VERSION = 1; 495 | DYLIB_CURRENT_VERSION = 1; 496 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 497 | INFOPLIST_FILE = Sources/Info.plist; 498 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 499 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 500 | PRODUCT_BUNDLE_IDENTIFIER = com.mono0926.SwiftyStringExtension; 501 | PRODUCT_NAME = SwiftyStringExtension; 502 | SKIP_INSTALL = YES; 503 | SWIFT_VERSION = 3.0; 504 | }; 505 | name = Release; 506 | }; 507 | FE32618F1DA0F358002C5A7F /* Debug */ = { 508 | isa = XCBuildConfiguration; 509 | buildSettings = { 510 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 511 | INFOPLIST_FILE = Tests/Info.plist; 512 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 513 | PRODUCT_BUNDLE_IDENTIFIER = com.mono0926.SwiftyStringExtensionTests; 514 | PRODUCT_NAME = SwiftyStringExtensionTests; 515 | SWIFT_VERSION = 3.0; 516 | }; 517 | name = Debug; 518 | }; 519 | FE3261901DA0F358002C5A7F /* Release */ = { 520 | isa = XCBuildConfiguration; 521 | buildSettings = { 522 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 523 | INFOPLIST_FILE = Tests/Info.plist; 524 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 525 | PRODUCT_BUNDLE_IDENTIFIER = com.mono0926.SwiftyStringExtensionTests; 526 | PRODUCT_NAME = SwiftyStringExtensionTests; 527 | SWIFT_VERSION = 3.0; 528 | }; 529 | name = Release; 530 | }; 531 | FE7F50AD1DA1240B00FCD392 /* Debug */ = { 532 | isa = XCBuildConfiguration; 533 | buildSettings = { 534 | APPLICATION_EXTENSION_API_ONLY = YES; 535 | CODE_SIGN_IDENTITY = "-"; 536 | COMBINE_HIDPI_IMAGES = YES; 537 | DEFINES_MODULE = YES; 538 | DYLIB_COMPATIBILITY_VERSION = 1; 539 | DYLIB_CURRENT_VERSION = 1; 540 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 541 | FRAMEWORK_VERSION = A; 542 | INFOPLIST_FILE = Sources/Info.plist; 543 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 544 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 545 | PRODUCT_BUNDLE_IDENTIFIER = com.mono0926.SwiftyStringExtension; 546 | PRODUCT_NAME = SwiftyStringExtension; 547 | SDKROOT = macosx; 548 | SKIP_INSTALL = YES; 549 | SWIFT_VERSION = 3.0; 550 | }; 551 | name = Debug; 552 | }; 553 | FE7F50AE1DA1240B00FCD392 /* Release */ = { 554 | isa = XCBuildConfiguration; 555 | buildSettings = { 556 | APPLICATION_EXTENSION_API_ONLY = YES; 557 | CODE_SIGN_IDENTITY = "-"; 558 | COMBINE_HIDPI_IMAGES = YES; 559 | DEFINES_MODULE = YES; 560 | DYLIB_COMPATIBILITY_VERSION = 1; 561 | DYLIB_CURRENT_VERSION = 1; 562 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 563 | FRAMEWORK_VERSION = A; 564 | INFOPLIST_FILE = Sources/Info.plist; 565 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 566 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 567 | PRODUCT_BUNDLE_IDENTIFIER = com.mono0926.SwiftyStringExtension; 568 | PRODUCT_NAME = SwiftyStringExtension; 569 | SDKROOT = macosx; 570 | SKIP_INSTALL = YES; 571 | SWIFT_VERSION = 3.0; 572 | }; 573 | name = Release; 574 | }; 575 | FE7F50B01DA1240B00FCD392 /* Debug */ = { 576 | isa = XCBuildConfiguration; 577 | buildSettings = { 578 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 579 | CODE_SIGN_IDENTITY = "-"; 580 | COMBINE_HIDPI_IMAGES = YES; 581 | INFOPLIST_FILE = Tests/Info.plist; 582 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 583 | MACOSX_DEPLOYMENT_TARGET = 10.12; 584 | PRODUCT_BUNDLE_IDENTIFIER = com.mono0926.SwiftyStringExtensionTests; 585 | PRODUCT_NAME = SwiftyStringExtensionTests; 586 | SDKROOT = macosx; 587 | SWIFT_VERSION = 3.0; 588 | }; 589 | name = Debug; 590 | }; 591 | FE7F50B11DA1240B00FCD392 /* Release */ = { 592 | isa = XCBuildConfiguration; 593 | buildSettings = { 594 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 595 | CODE_SIGN_IDENTITY = "-"; 596 | COMBINE_HIDPI_IMAGES = YES; 597 | INFOPLIST_FILE = Tests/Info.plist; 598 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 599 | MACOSX_DEPLOYMENT_TARGET = 10.12; 600 | PRODUCT_BUNDLE_IDENTIFIER = com.mono0926.SwiftyStringExtensionTests; 601 | PRODUCT_NAME = SwiftyStringExtensionTests; 602 | SDKROOT = macosx; 603 | SWIFT_VERSION = 3.0; 604 | }; 605 | name = Release; 606 | }; 607 | /* End XCBuildConfiguration section */ 608 | 609 | /* Begin XCConfigurationList section */ 610 | FE3261711DA0F357002C5A7F /* Build configuration list for PBXProject "SwiftyStringExtension" */ = { 611 | isa = XCConfigurationList; 612 | buildConfigurations = ( 613 | FE3261891DA0F358002C5A7F /* Debug */, 614 | FE32618A1DA0F358002C5A7F /* Release */, 615 | ); 616 | defaultConfigurationIsVisible = 0; 617 | defaultConfigurationName = Release; 618 | }; 619 | FE32618B1DA0F358002C5A7F /* Build configuration list for PBXNativeTarget "SwiftyStringExtension-iOS" */ = { 620 | isa = XCConfigurationList; 621 | buildConfigurations = ( 622 | FE32618C1DA0F358002C5A7F /* Debug */, 623 | FE32618D1DA0F358002C5A7F /* Release */, 624 | ); 625 | defaultConfigurationIsVisible = 0; 626 | defaultConfigurationName = Release; 627 | }; 628 | FE32618E1DA0F358002C5A7F /* Build configuration list for PBXNativeTarget "SwiftyStringExtensionTests-iOS" */ = { 629 | isa = XCConfigurationList; 630 | buildConfigurations = ( 631 | FE32618F1DA0F358002C5A7F /* Debug */, 632 | FE3261901DA0F358002C5A7F /* Release */, 633 | ); 634 | defaultConfigurationIsVisible = 0; 635 | defaultConfigurationName = Release; 636 | }; 637 | FE7F50AC1DA1240B00FCD392 /* Build configuration list for PBXNativeTarget "SwiftyStringExtension-macOS" */ = { 638 | isa = XCConfigurationList; 639 | buildConfigurations = ( 640 | FE7F50AD1DA1240B00FCD392 /* Debug */, 641 | FE7F50AE1DA1240B00FCD392 /* Release */, 642 | ); 643 | defaultConfigurationIsVisible = 0; 644 | defaultConfigurationName = Release; 645 | }; 646 | FE7F50AF1DA1240B00FCD392 /* Build configuration list for PBXNativeTarget "SwiftyStringExtensionTests-macOS" */ = { 647 | isa = XCConfigurationList; 648 | buildConfigurations = ( 649 | FE7F50B01DA1240B00FCD392 /* Debug */, 650 | FE7F50B11DA1240B00FCD392 /* Release */, 651 | ); 652 | defaultConfigurationIsVisible = 0; 653 | defaultConfigurationName = Release; 654 | }; 655 | /* End XCConfigurationList section */ 656 | }; 657 | rootObject = FE32616E1DA0F357002C5A7F /* Project object */; 658 | } 659 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/SwiftyStringExtension.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/SwiftyStringExtension.xcodeproj/xcshareddata/xcschemes/SwiftyStringExtension-iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 34 | 40 | 41 | 42 | 43 | 44 | 50 | 51 | 52 | 53 | 54 | 55 | 65 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 84 | 90 | 91 | 92 | 93 | 95 | 96 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/SwiftyStringExtension.xcodeproj/xcshareddata/xcschemes/SwiftyStringExtension-macOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/Tests/CharacterTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Tests.swift 3 | // Tests 4 | // 5 | // Created by mono on 2016/10/02. 6 | // Copyright © 2016 mono. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | import SwiftyStringExtension 11 | 12 | class CharacterTests: XCTestCase { 13 | 14 | func testFromAsciiCode() { 15 | XCTAssertEqual(Character(asciiCode: 65), "A") 16 | XCTAssertEqual(Character(asciiCode: 97), "a") 17 | XCTAssertNil(Character(asciiCode: 1000)) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/Tests/String.CharacterViewTests.swift.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String.CharacterViewTests.swift.swift 3 | // SwiftyStringExtension 4 | // 5 | // Created by mono on 2016/10/02. 6 | // Copyright © 2016 mono. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | import SwiftyStringExtension 11 | 12 | class CharacterViewTests: XCTestCase { 13 | 14 | func testSuscript() { 15 | let input = "abcd".characters 16 | XCTAssertTrue("bc".characters.elementsEqual(input[sequentialAccess: 1..<3])) 17 | XCTAssertEqual(input[sequentialAccess: 3], "d") 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Carthage/Checkouts/SwiftyStringExtension/Tests/StringTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StringTests.swift 3 | // SwiftyStringExtension 4 | // 5 | // Created by mono on 2016/10/02. 6 | // Copyright © 2016 mono. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | import SwiftyStringExtension 11 | import Foundation 12 | 13 | class StringTests: XCTestCase { 14 | 15 | func testSuscript() { 16 | let input = "abcd" 17 | XCTAssertEqual(input[sequentialAccess: 0..<0], "") 18 | XCTAssertEqual(input[sequentialAccess: 0..<1], "a") 19 | XCTAssertEqual(input[sequentialAccess: 0..<2], "ab") 20 | XCTAssertEqual(input[sequentialAccess: 0..<3], "abc") 21 | XCTAssertEqual(input[sequentialAccess: 0..<4], input) 22 | XCTAssertEqual(input[sequentialAccess: 2..<2], "") 23 | XCTAssertEqual(input[sequentialAccess: 2..<3], "c") 24 | XCTAssertEqual(input[sequentialAccess: 2..<4], "cd") 25 | XCTAssertEqual(input[sequentialAccess: 0], "a") 26 | XCTAssertEqual(input[sequentialAccess: 3], "d") 27 | } 28 | 29 | func testToAsciiCode() { 30 | XCTAssertEqual("A".asciiCode, 65) 31 | XCTAssertEqual("a".asciiCode, 97) 32 | XCTAssertNil("".asciiCode) 33 | XCTAssertNil("ab".asciiCode) 34 | XCTAssertNil("あ".asciiCode) 35 | } 36 | 37 | func testRemoveBound() { 38 | var s = "abcde" 39 | s.removeFirst(2) 40 | XCTAssertEqual(s, "cde") 41 | s.removeLast(2) 42 | XCTAssertEqual(s, "c") 43 | } 44 | 45 | func testToNSRange() { 46 | let s1 = "abcd" 47 | XCTAssertEqual(s1.makeNSRange(from: s1.startIndex.. 2 | 3 | 4 | -------------------------------------------------------------------------------- /NLP100Swift/Chapter1.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Chapter1.swift 3 | // nlp100-swift 4 | // 5 | // Created by mono on 8/31/16. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | struct Chapter1 { 12 | /** 13 | # 00. 文字列の逆順 14 | 15 | 文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ. 16 | */ 17 | static func q0(_ input: String) -> String { 18 | return String(input.characters.reversed()) 19 | } 20 | /** 21 | # 01. 「パタトクカシーー」 22 | 23 | 「パタトクカシーー」という文字列の1,3,5,7文字目を取り出して連結した文字列を得よ. 24 | */ 25 | static func q1(_ input: String) -> String { 26 | return String(input.characters.enumerated() 27 | .filter { i, _ in i % 2 == 1 } 28 | .map { $1 }) 29 | } 30 | /** 31 | # 02. 「パトカー」+「タクシー」=「パタトクカシーー」 32 | 33 | 「パトカー」+「タクシー」の文字を先頭から交互に連結して文字列「パタトクカシーー」を得よ. 34 | */ 35 | static func q2(_ input1: String, _ input2: String) -> String { 36 | return zip(input1.characters, input2.characters) 37 | .map { String($0) + String($1) } 38 | .reduce("", +) 39 | } 40 | /** 41 | # 03. 円周率 42 | 43 | "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."という文を単語に分解し,各単語の(アルファベットの)文字数を先頭から出現順に並べたリストを作成せよ. 44 | */ 45 | static func q3(_ input: String) -> [Int] { 46 | return input.components(separatedBy: " ") 47 | .map { $0.trimmingCharacters(in: CharacterSet(charactersIn: ",.")).count } 48 | } 49 | /** 50 | # 04. 元素記号 51 | 52 | "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."という文を単語に分解し,1, 5, 6, 7, 8, 9, 15, 16, 19番目の単語は先頭の1文字,それ以外の単語は先頭に2文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ. 53 | */ 54 | static func q4(_ input: String, condition: [Int]) -> [String: Int] { 55 | return input.components(separatedBy: " ").enumerated() 56 | .map { (i, v) in condition.contains(i + 1) ? (i, v.prefix(1)) : (i, v.prefix(2)) } 57 | .reduce([String: Int]()) { sum, v in 58 | var sum = sum 59 | sum[v.1] = v.0 + 1 60 | return sum 61 | } 62 | } 63 | /** 64 | # 05. n-gram 65 | 66 | 与えられたシーケンス(文字列やリストなど)からn-gramを作る関数を作成せよ.この関数を用い,"I am an NLPer"という文から単語bi-gram,文字bi-gramを得よ. 67 | */ 68 | static func q5Word(_ input: String) -> [[String]] { 69 | return ngramWord(input, n: 2) 70 | } 71 | static func q5Char(_ input: String) -> [String] { 72 | return ngramChar(input, n: 2) 73 | } 74 | /** 75 | # 06. 集合 76 | 77 | "paraparaparadise"と"paragraph"に含まれる文字bi-gramの集合を,それぞれ, XとYとして求め,XとYの和集合,積集合,差集合を求めよ.さらに,'se'というbi-gramがXおよびYに含まれるかどうかを調べよ. 78 | */ 79 | static func q6(_ input1: String, _ input2: String) -> (sum: Set, diff1: Set, diff2: Set, product: Set) { 80 | let n = 2 81 | let X = ngramChar(input1, n: n) 82 | let Y = ngramChar(input2, n: n) 83 | let XSet = Set(X) 84 | let YSet = Set(Y) 85 | let sum = Set(X + Y) 86 | let diff1 = XSet.subtracting(YSet) 87 | let diff2 = YSet.subtracting(XSet) 88 | let product = XSet.intersection(YSet) 89 | return (sum: sum, diff1: diff1, diff2: diff2, product: product) 90 | } 91 | static func q6IsContainAsBiGram(sentence: String, word: String) -> Bool { 92 | let bigram = ngramChar(sentence, n: 2) 93 | return bigram.contains(word) 94 | } 95 | /** 96 | # 07. テンプレートによる文生成 97 | 98 | 引数x, y, zを受け取り「x時のyはz」という文字列を返す関数を実装せよ.さらに,x=12, y="気温", z=22.4として,実行結果を確認せよ. 99 | */ 100 | static func q7(x: Int, y: AnyObject, z: AnyObject) -> String { 101 | return "\(x)時の\(y)は\(z)" 102 | } 103 | /** 104 | # 08. 暗号文 105 | 106 | 与えられた文字列の各文字を,以下の仕様で変換する関数cipherを実装せよ. 107 | 108 | - 英小文字ならば(219 - 文字コード)の文字に置換 109 | - その他の文字はそのまま出力 110 | 111 | この関数を用い,英語のメッセージを暗号化・復号化せよ. 112 | */ 113 | static func q8(_ input: String) -> String { 114 | return cipher(input) 115 | } 116 | /** 117 | # 09. Typoglycemia 118 | 119 | スペースで区切られた単語列に対して,各単語の先頭と末尾の文字は残し,それ以外の文字の順序をランダムに並び替えるプログラムを作成せよ.ただし,長さが4以下の単語は並び替えないこととする.適当な英語の文(例えば"I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind .")を与え,その実行結果を確認せよ. 120 | */ 121 | static func q9(_ input: String) -> String { 122 | let separator = " " 123 | var words = input.components(separatedBy: separator) 124 | guard words.count > 4 else { return input } 125 | let first = words.removeFirst() 126 | let last = words.removeLast() 127 | words.shuffle() 128 | return ([first] + words + [last]).joined(separator: separator) 129 | } 130 | } 131 | 132 | fileprivate extension Chapter1 { 133 | // TODO: ちょっと汚い( ´・‿・`) 134 | fileprivate static func ngramWord(_ input: String, n: Int) -> [[String]] { 135 | let words = input.components(separatedBy: " ") + (0.. [String] in 139 | if let lasts = sum.last?.dropFirst() { 140 | return Array(lasts) 141 | } 142 | return [] 143 | }() 144 | words = (0..<(n - 1 - words.count)).map { _ in "" } + words 145 | sum.append(words + [word]) 146 | return sum 147 | } 148 | } 149 | fileprivate static func ngramChar(_ input: String, n: Int) -> [String] { 150 | return input.characters.reduce([String]()) { sum, char in 151 | var sum = sum 152 | let first = sum.last?.suffix(n - 1) ?? " " 153 | sum.append(first + String(char)) 154 | return sum 155 | } 156 | .filter { !$0.contains(" ") } 157 | } 158 | fileprivate static func cipher(_ input: String) -> String { 159 | return input.characters.map { c -> String in 160 | let s = String(c) 161 | let lowercased = s.lowercased() 162 | return lowercased == s ? String(describing: UnicodeScalar(219 - s.unicodeScalars.first!.value)!) : s 163 | } 164 | .joined(separator: "") 165 | } 166 | } 167 | -------------------------------------------------------------------------------- /NLP100Swift/Chapter2.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Chapter2.swift 3 | // nlp100-swift 4 | // 5 | // Created by mono on 9/1/16. 6 | // 7 | // 8 | 9 | import Foundation 10 | import SwiftyStringExtension 11 | 12 | struct Chapter2 { 13 | /** Linuxのwcコマンドでカウントした行数と同じ結果を返す */ 14 | static func countNumberOfLines(_ input: String) -> Int { 15 | // NOTE: Linuxのwcコマンドは、改行数をカウントするので、それに合わせた。(改行で分割して要素数をcountすると、最終行が空行などの時にズレる) 16 | return input.characters.filter { String($0).rangeOfCharacter(from: CharacterSet.newlines) != nil }.count 17 | } 18 | 19 | static func getCol(from input: String, columnIndex: Int, separator: String) -> [String] { 20 | let lines = input.components(separatedBy: CharacterSet.newlines) 21 | return lines.map { line in 22 | let values = line.components(separatedBy: separator) 23 | return values.count > columnIndex ? values[columnIndex] : "" 24 | } 25 | } 26 | static func merge(_ columns: [String], separator: String) -> String? { 27 | guard let c1 = columns.first else { return nil } 28 | let columns = Array(columns.dropFirst()) 29 | let c1s = c1.components(separatedBy: CharacterSet.newlines) 30 | return columns.reduce(c1s) { sum, column in 31 | return zip(sum, column.components(separatedBy: CharacterSet.newlines)) 32 | .map { [$0, $1].joined(separator: separator) } 33 | } 34 | .map { $0 == separator ? "" : $0 } // 空行にseparator文字が入ってしまっているのを除去 35 | .joined(separator: "\n") 36 | } 37 | static func head(_ input: String, n: Int) -> String { 38 | var newLinesCount = 0 39 | for (i, c) in input.characters.enumerated() { 40 | if newLinesCount == n { 41 | return input.prefix(i) 42 | } 43 | if String(c).rangeOfCharacter(from: CharacterSet.newlines) != nil { 44 | newLinesCount += 1 45 | } 46 | } 47 | return input 48 | } 49 | static func tail(_ input: String, n: Int) -> String { 50 | let nHead = countNumberOfLines(input) - n 51 | var newLinesCount = 0 52 | let count = input.count 53 | for (i, c) in input.characters.enumerated() { 54 | if newLinesCount == nHead { 55 | return input.suffix(from: input.index(input.endIndex, offsetBy: -(count-i))) 56 | } 57 | if String(c).rangeOfCharacter(from: CharacterSet.newlines) != nil { 58 | newLinesCount += 1 59 | } 60 | } 61 | return input 62 | } 63 | static func split(_ input: String, l: Int) -> [String] { 64 | var numberOfLines = countNumberOfLines(input) 65 | var result = [String]() 66 | var input = input 67 | while numberOfLines > 0 { 68 | let block = head(input, n: l) 69 | numberOfLines -= l 70 | input = tail(input, n: numberOfLines) 71 | result.append(block) 72 | } 73 | return result 74 | } 75 | static func getUniqueValue(_ input: String, columnIndex: Int, separator: String) -> Set { 76 | let values = getCol(from: input, columnIndex: columnIndex, separator: separator).filter { !$0.isEmpty } 77 | return Set(values) 78 | } 79 | static func getSortedLines(_ input: String, keyColumnIndex: Int, separator: String) -> [String] { 80 | return input.components(separatedBy: CharacterSet.newlines).filter { !$0.isEmpty }.enumerated().map { (value: $1, key: $1.components(separatedBy: separator)[keyColumnIndex], index: $0) } 81 | .sorted { x, y in 82 | if x.key == y.key { 83 | return x.index < y.index 84 | } 85 | return x.key >= y.key 86 | } 87 | .map { $0.value } 88 | } 89 | static func getUniqValuesSortedByCount(_ input: String, keyColumnIndex: Int, separator: String) -> [Set] { 90 | let values = getCol(from: input, columnIndex: keyColumnIndex, separator: separator).filter { !$0.isEmpty } 91 | let dict = toCountDictionary(values) 92 | return dict.reduce([Int: [String]]()) { sum, v in 93 | var sum = sum 94 | sum[v.value] = (sum[v.value] ?? []) + [v.key] 95 | return sum 96 | } 97 | .sorted { x, y in x.key > y.key } 98 | .map { Set($1) } 99 | } 100 | static func toCountDictionary(_ input: [String]) -> [String: Int] { 101 | return input.reduce([String: Int]()) { sum, v in 102 | var sum = sum 103 | sum[v] = (sum[v] ?? 0) + 1 104 | return sum 105 | } 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /NLP100Swift/Collection.extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Collection.extension.swift 3 | // nlp100-swift 4 | // 5 | // Created by mono on 2016/10/01. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | extension Collection { 12 | 13 | public func shuffled() -> [Generator.Element] { 14 | var list = Array(self) 15 | list.shuffle() 16 | return list 17 | } 18 | 19 | } 20 | 21 | extension MutableCollection where Index == Int { 22 | 23 | public mutating func shuffle() { 24 | let c = Int(count.toIntMax()) 25 | guard c > 1 else { return } 26 | 27 | for i in 0..<(c - 1) { 28 | let j = Int(arc4random_uniform(UInt32(c - i))) + i 29 | guard i != j else { continue } 30 | swap(&self[i], &self[j]) 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /NLP100Swift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /NLP100Swift/NLP100Swift.h: -------------------------------------------------------------------------------- 1 | // 2 | // NLP100Swift.h 3 | // NLP100Swift 4 | // 5 | // Created by mono on 8/31/16. 6 | // 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for NLP100Swift. 12 | FOUNDATION_EXPORT double NLP100SwiftVersionNumber; 13 | 14 | //! Project version string for NLP100Swift. 15 | FOUNDATION_EXPORT const unsigned char NLP100SwiftVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /NLP100SwiftTests/Chapter1Tests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NLP100SwiftTests.swift 3 | // NLP100SwiftTests 4 | // 5 | // Created by mono on 8/31/16. 6 | // 7 | // 8 | 9 | import XCTest 10 | @testable import NLP100Swift 11 | import SwiftyStringExtension 12 | 13 | class Chapter1Tests: XCTestCase { 14 | func testQ0() { 15 | XCTAssertEqual(Chapter1.q0("stressed"), "desserts") 16 | } 17 | func testQ1() { 18 | XCTAssertEqual(Chapter1.q1("パタトクカシーー"), "タクシー") 19 | } 20 | func testQ2() { 21 | XCTAssertEqual(Chapter1.q2("パトカー", "タクシー"), "パタトクカシーー") 22 | } 23 | func testQ3() { 24 | XCTAssertEqual(Chapter1.q3("Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."), [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]) 25 | } 26 | func testQ4() { 27 | XCTAssertEqual( 28 | Chapter1.q4("Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.", condition: [1, 5, 6, 7, 8, 9, 15, 16, 19]), 29 | ["H": 1, "Ne": 10, "Be": 4, "Al": 13, "B": 5, "O": 8, "Li": 3, "F": 9, "He": 2, "S": 16, "Cl": 17, "K": 19, "Ar": 18, "C": 6, "N": 7, "Mi": 12, "Si": 14, "Ca": 20, "P": 15, "Na": 11]) 30 | } 31 | func testQ5Word() { 32 | let result = Chapter1.q5Word("I am an NLPer") 33 | print(result) 34 | let expected = [["", "I"], ["I", "am"], ["am", "an"], ["an", "NLPer"], ["NLPer", ""]] 35 | XCTAssertEqual(result.count, expected.count) 36 | result.enumerated().forEach { 37 | XCTAssertEqual($1[0], expected[$0][0]) 38 | XCTAssertEqual($1[1], expected[$0][1]) 39 | } 40 | } 41 | func testQ5Char() { 42 | let result = Chapter1.q5Char("I am an NLPer") 43 | let expected = ["am", "an", "NL", "LP", "Pe", "er"] 44 | XCTAssertEqual(result, expected) 45 | } 46 | func testQ6() { 47 | let input1 = "paraparaparadise" 48 | let input2 = "paragraph" 49 | let result = Chapter1.q6(input1, input2) 50 | XCTAssertEqual(result.sum, Set(["pa", "se", "ad", "ap", "ra", "gr", "ag", "ph", "ar", "di", "is"])) 51 | XCTAssertEqual(result.diff1, Set(["se", "ad", "di", "is"])) 52 | XCTAssertEqual(result.diff2, Set(["gr", "ag", "ph"])) 53 | XCTAssertEqual(result.product, Set(["pa", "ar", "ap", "ra"])) 54 | let word = "se" 55 | XCTAssertTrue(Chapter1.q6IsContainAsBiGram(sentence: input1, word: word)) 56 | XCTAssertFalse(Chapter1.q6IsContainAsBiGram(sentence: input2, word: word)) 57 | } 58 | func testQ7() { 59 | XCTAssertEqual(Chapter1.q7(x: 12, y: "気温" as AnyObject, z: 22.4 as AnyObject), "12時の気温は22.4") 60 | } 61 | func testQ8() { 62 | XCTAssertEqual(Chapter1.q8("Masayuki Ono"), "Mzhzbfpr»Oml") 63 | XCTAssertEqual(Chapter1.q8("Mzhzbfpr»Oml"), "Masayuki Ono") 64 | } 65 | func testQ9() { 66 | let inputLong = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ." 67 | let resultLong = Chapter1.q9(inputLong) 68 | print("Q9. resultLong: \(resultLong)") 69 | XCTAssertNotEqual(resultLong, inputLong) 70 | XCTAssertTrue(resultLong.hasPrefix("I ")) 71 | XCTAssertTrue(resultLong.hasSuffix(" .")) 72 | let inputShort = "I couldn't believe ." 73 | let resultShort = Chapter1.q9(inputShort) 74 | XCTAssertEqual(resultShort, inputShort) 75 | 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /NLP100SwiftTests/Chapter2Tests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Chapter2Tests.swift 3 | // nlp100-swift 4 | // 5 | // Created by mono on 9/1/16. 6 | // 7 | // 8 | 9 | import XCTest 10 | @testable import NLP100Swift 11 | import SwiftyStringExtension 12 | 13 | class Chapter2Tests: XCTestCase { 14 | private let filename = "hightemp" 15 | private var targetContent: String { return TestUtil.read(fromFile: filename) } 16 | /** 17 | # 10. 行数のカウント 18 | 19 | 行数をカウントせよ.確認にはwcコマンドを用いよ. 20 | 注: `wc hightemp.txt`と同一結果 21 | */ 22 | func test10() { 23 | XCTAssertEqual(Chapter2.countNumberOfLines(targetContent), 24) 24 | } 25 | /** 26 | # 11. タブをスペースに置換 27 | 28 | タブ1文字につきスペース1文字に置換せよ.確認にはsedコマンド,trコマンド,もしくはexpandコマンドを用いよ. 29 | 注: `cat hightemp.txt | tr '\t' ' '`と同一結果 30 | */ 31 | func test11() { 32 | let expected = TestUtil.read(fromFile: "hightemp_tab2space") 33 | // NOTE: 標準メソッド呼ぶだけで完結 34 | XCTAssertEqual(targetContent.replacingOccurrences(of: "\t", with: " "), expected) 35 | } 36 | /** 37 | # 12. 1列目をcol1.txtに,2列目をcol2.txtに保存 38 | 39 | 各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ. 40 | 注: 以下で結果を得た 41 | 42 | - `cut -f1 hightemp.txt > hightemp_c1.txt` 43 | - `cut -f2 hightemp.txt > hightemp_c2.txt` 44 | */ 45 | func test12() { 46 | let separator = "\t" 47 | let col1 = Chapter2.getCol(from: targetContent, columnIndex: 0, separator: separator) 48 | let col2 = Chapter2.getCol(from: targetContent, columnIndex: 1, separator: separator) 49 | XCTAssertEqual(col1.joined(separator: "\n"), TestUtil.read(fromFile: "hightemp_c1")) 50 | XCTAssertEqual(col2.joined(separator: "\n"), TestUtil.read(fromFile: "hightemp_c2")) 51 | } 52 | /** 53 | # 13. col1.txtとcol2.txtをマージ 54 | 55 | 12で作ったcol1.txtとcol2.txtを結合し,元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを作成せよ.確認にはpasteコマンドを用いよ. 56 | 57 | 注: `paste hightemp_c1.txt hightemp_c2.txt `で結果を得た 58 | */ 59 | func test13() { 60 | let result = Chapter2.merge([TestUtil.read(fromFile: "hightemp_c1"), TestUtil.read(fromFile: "hightemp_c2")], separator: "\t") 61 | print("result: \(result)") 62 | XCTAssertEqual(result, TestUtil.read(fromFile: "hightemp_c1+2")) 63 | } 64 | /** 65 | # 14. 先頭からN行を出力 66 | 67 | 自然数Nをコマンドライン引数などの手段で受け取り,入力のうち先頭のN行だけを表示せよ.確認にはheadコマンドを用いよ. 68 | 69 | 注: `head -n 3 hightemp.txt > hightemp_headn3.txt`で結果を得た 70 | */ 71 | func test14() { 72 | XCTAssertEqual(Chapter2.head(targetContent, n: 3), TestUtil.read(fromFile: "hightemp_headn3")) 73 | } 74 | /** 75 | # 15. 末尾のN行を出力 76 | 77 | 自然数Nをコマンドライン引数などの手段で受け取り,入力のうち末尾のN行だけを表示せよ.確認にはtailコマンドを用いよ. 78 | 79 | 注: `tail -n 3 hightemp.txt > hightemp_tailn3.txt`で結果を得た 80 | */ 81 | func test15() { 82 | XCTAssertEqual(Chapter2.tail(targetContent, n: 3), TestUtil.read(fromFile: "hightemp_tailn3")) 83 | } 84 | /** 85 | # 16. ファイルをN分割する 86 | 87 | 自然数Nをコマンドライン引数などの手段で受け取り,入力のファイルを行単位でN分割せよ.同様の処理をsplitコマンドで実現せよ. 88 | 89 | 注: `plit -l 10 hightemp.txt`で結果を得た。 90 | */ 91 | func test16() { 92 | let result = Chapter2.split(targetContent, l: 10) 93 | XCTAssertEqual(result.count, 3) 94 | XCTAssertEqual(result[0], TestUtil.read(fromFile: "xaa", type: nil)) 95 | XCTAssertEqual(result[1], TestUtil.read(fromFile: "xab", type: nil)) 96 | XCTAssertEqual(result[2], TestUtil.read(fromFile: "xac", type: nil)) 97 | } 98 | /** 99 | # 17. 1列目の文字列の異なり 100 | 101 | 1列目の文字列の種類(異なる文字列の集合)を求めよ.確認にはsort, uniqコマンドを用いよ. 102 | 103 | 注: `cut -f1 hightemp.txt | sort | uniq > hightemp_c1sortuniq.txt`で結果を得た。 104 | */ 105 | func test17() { 106 | let expected = Set(TestUtil.read(fromFile: "hightemp_c1sortuniq").components(separatedBy: CharacterSet.newlines).filter { !$0.isEmpty }) 107 | XCTAssertEqual(Chapter2.getUniqueValue(targetContent, columnIndex: 0, separator: "\t"), expected) 108 | } 109 | /** 110 | # 18. 各行を3コラム目の数値の降順にソート 111 | 112 | 各行を3コラム目の数値の逆順で整列せよ(注意: 各行の内容は変更せずに並び替えよ).確認にはsortコマンドを用いよ(この問題はコマンドで実行した時の結果と合わなくてもよい) 113 | 114 | 注: `sort -k3 -r hightemp.txt > hightemp_sortk3r.txt`の結果が安定ソートでは無かったので、2・3行目を手動で入れ替えた(問題の注釈にもあり) 115 | */ 116 | func test18() { 117 | let expected = TestUtil.read(fromFile: "hightemp_sortk3r").components(separatedBy: CharacterSet.newlines).filter { !$0.isEmpty } 118 | XCTAssertEqual(Chapter2.getSortedLines(targetContent, keyColumnIndex: 2, separator: "\t"), expected) 119 | } 120 | /** 121 | # 19. 各行の1コラム目の文字列の出現頻度を求め,出現頻度の高い順に並べる 122 | 123 | 各行の1列目の文字列の出現頻度を求め,その高い順に並べて表示せよ.確認にはcut, uniq, sortコマンドを用いよ. 124 | 125 | 注: `cut -f1 hightemp.txt | sort | uniq -c | sort -k1 -r > hightemp_sortf1count.txt`した結果を手で加工 126 | */ 127 | func test19() { 128 | let expected1 = Set(["群馬県","山梨県","山形県","埼玉県"]) 129 | let expected2 = Set(["静岡県","愛知県","岐阜県","千葉県"]) 130 | let expected3 = Set(["和歌山県","高知県","愛媛県","大阪府"]) 131 | let result = Chapter2.getUniqValuesSortedByCount(targetContent, keyColumnIndex: 0, separator: "\t") 132 | XCTAssertEqual(result.count, 3) 133 | XCTAssertEqual(result[0], expected1) 134 | XCTAssertEqual(result[1], expected2) 135 | XCTAssertEqual(result[2], expected3) 136 | 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /NLP100SwiftTests/CollectionTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StringExtensionsTests.swift 3 | // nlp100-swift 4 | // 5 | // Created by mono on 8/31/16. 6 | // 7 | // 8 | import XCTest 9 | @testable import NLP100Swift 10 | 11 | class ExtensionsTests: XCTestCase { 12 | // TODO: ランダムなので、たまに失敗するのが課題🤔 13 | func testShuffle() { 14 | let input = ["a", "b", "c", "d", "e"] 15 | let result = input.shuffled() 16 | XCTAssertNotEqual(result, input) 17 | XCTAssertEqual(Set(result), Set(input)) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /NLP100SwiftTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /NLP100SwiftTests/TestUtil.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TestUtil.swift 3 | // nlp100-swift 4 | // 5 | // Created by mono on 9/3/16. 6 | // 7 | // 8 | 9 | import Foundation 10 | import SwiftyStringExtension 11 | 12 | class TestUtil { 13 | private static let bundle = Bundle(for: TestUtil.self) 14 | static func read(fromFile name: String, type: String? = "txt") -> String { 15 | let path = bundle.path(forResource: name, ofType: type)! 16 | return try! String(contentsOfFile: path) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /NLP100SwiftTests/hightemp.txt: -------------------------------------------------------------------------------- 1 | 高知県 江川崎 41 2013-08-12 2 | 埼玉県 熊谷 40.9 2007-08-16 3 | 岐阜県 多治見 40.9 2007-08-16 4 | 山形県 山形 40.8 1933-07-25 5 | 山梨県 甲府 40.7 2013-08-10 6 | 和歌山県 かつらぎ 40.6 1994-08-08 7 | 静岡県 天竜 40.6 1994-08-04 8 | 山梨県 勝沼 40.5 2013-08-10 9 | 埼玉県 越谷 40.4 2007-08-16 10 | 群馬県 館林 40.3 2007-08-16 11 | 群馬県 上里見 40.3 1998-07-04 12 | 愛知県 愛西 40.3 1994-08-05 13 | 千葉県 牛久 40.2 2004-07-20 14 | 静岡県 佐久間 40.2 2001-07-24 15 | 愛媛県 宇和島 40.2 1927-07-22 16 | 山形県 酒田 40.1 1978-08-03 17 | 岐阜県 美濃 40 2007-08-16 18 | 群馬県 前橋 40 2001-07-24 19 | 千葉県 茂原 39.9 2013-08-11 20 | 埼玉県 鳩山 39.9 1997-07-05 21 | 大阪府 豊中 39.9 1994-08-08 22 | 山梨県 大月 39.9 1990-07-19 23 | 山形県 鶴岡 39.9 1978-08-03 24 | 愛知県 名古屋 39.9 1942-08-02 25 | -------------------------------------------------------------------------------- /NLP100SwiftTests/hightemp_c1+2.txt: -------------------------------------------------------------------------------- 1 | 高知県 江川崎 2 | 埼玉県 熊谷 3 | 岐阜県 多治見 4 | 山形県 山形 5 | 山梨県 甲府 6 | 和歌山県 かつらぎ 7 | 静岡県 天竜 8 | 山梨県 勝沼 9 | 埼玉県 越谷 10 | 群馬県 館林 11 | 群馬県 上里見 12 | 愛知県 愛西 13 | 千葉県 牛久 14 | 静岡県 佐久間 15 | 愛媛県 宇和島 16 | 山形県 酒田 17 | 岐阜県 美濃 18 | 群馬県 前橋 19 | 千葉県 茂原 20 | 埼玉県 鳩山 21 | 大阪府 豊中 22 | 山梨県 大月 23 | 山形県 鶴岡 24 | 愛知県 名古屋 25 | -------------------------------------------------------------------------------- /NLP100SwiftTests/hightemp_c1.txt: -------------------------------------------------------------------------------- 1 | 高知県 2 | 埼玉県 3 | 岐阜県 4 | 山形県 5 | 山梨県 6 | 和歌山県 7 | 静岡県 8 | 山梨県 9 | 埼玉県 10 | 群馬県 11 | 群馬県 12 | 愛知県 13 | 千葉県 14 | 静岡県 15 | 愛媛県 16 | 山形県 17 | 岐阜県 18 | 群馬県 19 | 千葉県 20 | 埼玉県 21 | 大阪府 22 | 山梨県 23 | 山形県 24 | 愛知県 25 | -------------------------------------------------------------------------------- /NLP100SwiftTests/hightemp_c1sortuniq.txt: -------------------------------------------------------------------------------- 1 | 千葉県 2 | 埼玉県 3 | 大阪府 4 | 山形県 5 | 山梨県 6 | 岐阜県 7 | 愛媛県 8 | 愛知県 9 | 群馬県 10 | 静岡県 11 | 高知県 12 | 和歌山県 13 | -------------------------------------------------------------------------------- /NLP100SwiftTests/hightemp_c2.txt: -------------------------------------------------------------------------------- 1 | 江川崎 2 | 熊谷 3 | 多治見 4 | 山形 5 | 甲府 6 | かつらぎ 7 | 天竜 8 | 勝沼 9 | 越谷 10 | 館林 11 | 上里見 12 | 愛西 13 | 牛久 14 | 佐久間 15 | 宇和島 16 | 酒田 17 | 美濃 18 | 前橋 19 | 茂原 20 | 鳩山 21 | 豊中 22 | 大月 23 | 鶴岡 24 | 名古屋 25 | -------------------------------------------------------------------------------- /NLP100SwiftTests/hightemp_headn3.txt: -------------------------------------------------------------------------------- 1 | 高知県 江川崎 41 2013-08-12 2 | 埼玉県 熊谷 40.9 2007-08-16 3 | 岐阜県 多治見 40.9 2007-08-16 4 | -------------------------------------------------------------------------------- /NLP100SwiftTests/hightemp_sortf1count.txt: -------------------------------------------------------------------------------- 1 | 群馬県,山梨県,山形県,埼玉県 2 | 静岡県,愛知県,岐阜県,千葉県 3 | 和歌山県,高知県,愛媛県,大阪府 4 | -------------------------------------------------------------------------------- /NLP100SwiftTests/hightemp_sortk3r.txt: -------------------------------------------------------------------------------- 1 | 高知県 江川崎 41 2013-08-12 2 | 埼玉県 熊谷 40.9 2007-08-16 3 | 岐阜県 多治見 40.9 2007-08-16 4 | 山形県 山形 40.8 1933-07-25 5 | 山梨県 甲府 40.7 2013-08-10 6 | 和歌山県 かつらぎ 40.6 1994-08-08 7 | 静岡県 天竜 40.6 1994-08-04 8 | 山梨県 勝沼 40.5 2013-08-10 9 | 埼玉県 越谷 40.4 2007-08-16 10 | 群馬県 館林 40.3 2007-08-16 11 | 群馬県 上里見 40.3 1998-07-04 12 | 愛知県 愛西 40.3 1994-08-05 13 | 千葉県 牛久 40.2 2004-07-20 14 | 静岡県 佐久間 40.2 2001-07-24 15 | 愛媛県 宇和島 40.2 1927-07-22 16 | 山形県 酒田 40.1 1978-08-03 17 | 岐阜県 美濃 40 2007-08-16 18 | 群馬県 前橋 40 2001-07-24 19 | 千葉県 茂原 39.9 2013-08-11 20 | 埼玉県 鳩山 39.9 1997-07-05 21 | 大阪府 豊中 39.9 1994-08-08 22 | 山梨県 大月 39.9 1990-07-19 23 | 山形県 鶴岡 39.9 1978-08-03 24 | 愛知県 名古屋 39.9 1942-08-02 25 | -------------------------------------------------------------------------------- /NLP100SwiftTests/hightemp_tab2space.txt: -------------------------------------------------------------------------------- 1 | 高知県 江川崎 41 2013-08-12 2 | 埼玉県 熊谷 40.9 2007-08-16 3 | 岐阜県 多治見 40.9 2007-08-16 4 | 山形県 山形 40.8 1933-07-25 5 | 山梨県 甲府 40.7 2013-08-10 6 | 和歌山県 かつらぎ 40.6 1994-08-08 7 | 静岡県 天竜 40.6 1994-08-04 8 | 山梨県 勝沼 40.5 2013-08-10 9 | 埼玉県 越谷 40.4 2007-08-16 10 | 群馬県 館林 40.3 2007-08-16 11 | 群馬県 上里見 40.3 1998-07-04 12 | 愛知県 愛西 40.3 1994-08-05 13 | 千葉県 牛久 40.2 2004-07-20 14 | 静岡県 佐久間 40.2 2001-07-24 15 | 愛媛県 宇和島 40.2 1927-07-22 16 | 山形県 酒田 40.1 1978-08-03 17 | 岐阜県 美濃 40 2007-08-16 18 | 群馬県 前橋 40 2001-07-24 19 | 千葉県 茂原 39.9 2013-08-11 20 | 埼玉県 鳩山 39.9 1997-07-05 21 | 大阪府 豊中 39.9 1994-08-08 22 | 山梨県 大月 39.9 1990-07-19 23 | 山形県 鶴岡 39.9 1978-08-03 24 | 愛知県 名古屋 39.9 1942-08-02 25 | -------------------------------------------------------------------------------- /NLP100SwiftTests/hightemp_tailn3.txt: -------------------------------------------------------------------------------- 1 | 山梨県 大月 39.9 1990-07-19 2 | 山形県 鶴岡 39.9 1978-08-03 3 | 愛知県 名古屋 39.9 1942-08-02 4 | -------------------------------------------------------------------------------- /NLP100SwiftTests/xaa: -------------------------------------------------------------------------------- 1 | 高知県 江川崎 41 2013-08-12 2 | 埼玉県 熊谷 40.9 2007-08-16 3 | 岐阜県 多治見 40.9 2007-08-16 4 | 山形県 山形 40.8 1933-07-25 5 | 山梨県 甲府 40.7 2013-08-10 6 | 和歌山県 かつらぎ 40.6 1994-08-08 7 | 静岡県 天竜 40.6 1994-08-04 8 | 山梨県 勝沼 40.5 2013-08-10 9 | 埼玉県 越谷 40.4 2007-08-16 10 | 群馬県 館林 40.3 2007-08-16 11 | -------------------------------------------------------------------------------- /NLP100SwiftTests/xab: -------------------------------------------------------------------------------- 1 | 群馬県 上里見 40.3 1998-07-04 2 | 愛知県 愛西 40.3 1994-08-05 3 | 千葉県 牛久 40.2 2004-07-20 4 | 静岡県 佐久間 40.2 2001-07-24 5 | 愛媛県 宇和島 40.2 1927-07-22 6 | 山形県 酒田 40.1 1978-08-03 7 | 岐阜県 美濃 40 2007-08-16 8 | 群馬県 前橋 40 2001-07-24 9 | 千葉県 茂原 39.9 2013-08-11 10 | 埼玉県 鳩山 39.9 1997-07-05 11 | -------------------------------------------------------------------------------- /NLP100SwiftTests/xac: -------------------------------------------------------------------------------- 1 | 大阪府 豊中 39.9 1994-08-08 2 | 山梨県 大月 39.9 1990-07-19 3 | 山形県 鶴岡 39.9 1978-08-03 4 | 愛知県 名古屋 39.9 1942-08-02 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nlp100-swift 2 | http://www.cl.ecei.tohoku.ac.jp/nlp100/ 3 | 4 | ## Qiita 5 | 6 | - [言語処理100本ノック 2015 第1章: 準備運動 (Swift 3) - Qiita](http://qiita.com/mono0926/items/c4c717cb4aeffaec8d17) 7 | -------------------------------------------------------------------------------- /nlp100-swift.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | FE26C8451DA4A393009EBFD9 /* SwiftyStringExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE26C8441DA4A393009EBFD9 /* SwiftyStringExtension.framework */; }; 11 | FE484F271DA4A57700E9A9A9 /* SwiftyStringExtension.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FE26C8441DA4A393009EBFD9 /* SwiftyStringExtension.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 12 | FE8D5F2E1D78138A006DF186 /* Chapter2.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE8D5F2D1D78138A006DF186 /* Chapter2.swift */; }; 13 | FE8D5F301D78139B006DF186 /* Chapter2Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE8D5F2F1D78139B006DF186 /* Chapter2Tests.swift */; }; 14 | FE96F88F1D7BB20900834C97 /* xaa in Resources */ = {isa = PBXBuildFile; fileRef = FE96F88C1D7BB20900834C97 /* xaa */; }; 15 | FE96F8901D7BB20900834C97 /* xab in Resources */ = {isa = PBXBuildFile; fileRef = FE96F88D1D7BB20900834C97 /* xab */; }; 16 | FE96F8911D7BB20900834C97 /* xac in Resources */ = {isa = PBXBuildFile; fileRef = FE96F88E1D7BB20900834C97 /* xac */; }; 17 | FE96F8931D7BB99F00834C97 /* hightemp_c1sortuniq.txt in Resources */ = {isa = PBXBuildFile; fileRef = FE96F8921D7BB99F00834C97 /* hightemp_c1sortuniq.txt */; }; 18 | FE96F8951D7BBBD500834C97 /* hightemp_sortk3r.txt in Resources */ = {isa = PBXBuildFile; fileRef = FE96F8941D7BBBD500834C97 /* hightemp_sortk3r.txt */; }; 19 | FE96F8971D7BC23C00834C97 /* hightemp_sortf1count.txt in Resources */ = {isa = PBXBuildFile; fileRef = FE96F8961D7BC23C00834C97 /* hightemp_sortf1count.txt */; }; 20 | FEB07E671D7AA2FB00040B90 /* hightemp.txt in Resources */ = {isa = PBXBuildFile; fileRef = FEB07E661D7AA2FB00040B90 /* hightemp.txt */; }; 21 | FEB07E6B1D7AA3C400040B90 /* TestUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEB07E6A1D7AA3C400040B90 /* TestUtil.swift */; }; 22 | FEB07E6D1D7AF43C00040B90 /* hightemp_tab2space.txt in Resources */ = {isa = PBXBuildFile; fileRef = FEB07E6C1D7AF43C00040B90 /* hightemp_tab2space.txt */; }; 23 | FEB07E701D7AFDED00040B90 /* hightemp_c1.txt in Resources */ = {isa = PBXBuildFile; fileRef = FEB07E6E1D7AFDED00040B90 /* hightemp_c1.txt */; }; 24 | FEB07E711D7AFDED00040B90 /* hightemp_c2.txt in Resources */ = {isa = PBXBuildFile; fileRef = FEB07E6F1D7AFDED00040B90 /* hightemp_c2.txt */; }; 25 | FEB07E731D7B021100040B90 /* hightemp_c1+2.txt in Resources */ = {isa = PBXBuildFile; fileRef = FEB07E721D7B021100040B90 /* hightemp_c1+2.txt */; }; 26 | FEB07E751D7B076800040B90 /* hightemp_headn3.txt in Resources */ = {isa = PBXBuildFile; fileRef = FEB07E741D7B076800040B90 /* hightemp_headn3.txt */; }; 27 | FEB07E771D7B0BC800040B90 /* hightemp_tailn3.txt in Resources */ = {isa = PBXBuildFile; fileRef = FEB07E761D7B0BC800040B90 /* hightemp_tailn3.txt */; }; 28 | FEBC028C1D9F450D005B52E6 /* Collection.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEBC028B1D9F450D005B52E6 /* Collection.extension.swift */; }; 29 | FED26D7B1D76F37900FF0DEA /* NLP100Swift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FED26D721D76F37800FF0DEA /* NLP100Swift.framework */; }; 30 | FED26D801D76F37900FF0DEA /* Chapter1Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED26D7F1D76F37900FF0DEA /* Chapter1Tests.swift */; }; 31 | FED26D821D76F37900FF0DEA /* NLP100Swift.h in Headers */ = {isa = PBXBuildFile; fileRef = FED26D741D76F37900FF0DEA /* NLP100Swift.h */; settings = {ATTRIBUTES = (Public, ); }; }; 32 | FED26D8A1D76F38D00FF0DEA /* Chapter1.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED26D891D76F38D00FF0DEA /* Chapter1.swift */; }; 33 | FED26D8E1D76FE1800FF0DEA /* CollectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED26D8D1D76FE1800FF0DEA /* CollectionTests.swift */; }; 34 | /* End PBXBuildFile section */ 35 | 36 | /* Begin PBXContainerItemProxy section */ 37 | FED26D7C1D76F37900FF0DEA /* PBXContainerItemProxy */ = { 38 | isa = PBXContainerItemProxy; 39 | containerPortal = FED26D481D76F2BB00FF0DEA /* Project object */; 40 | proxyType = 1; 41 | remoteGlobalIDString = FED26D711D76F37800FF0DEA; 42 | remoteInfo = NLP100Swift; 43 | }; 44 | /* End PBXContainerItemProxy section */ 45 | 46 | /* Begin PBXCopyFilesBuildPhase section */ 47 | FE484F261DA4A56500E9A9A9 /* CopyFiles */ = { 48 | isa = PBXCopyFilesBuildPhase; 49 | buildActionMask = 2147483647; 50 | dstPath = ""; 51 | dstSubfolderSpec = 10; 52 | files = ( 53 | FE484F271DA4A57700E9A9A9 /* SwiftyStringExtension.framework in CopyFiles */, 54 | ); 55 | runOnlyForDeploymentPostprocessing = 0; 56 | }; 57 | /* End PBXCopyFilesBuildPhase section */ 58 | 59 | /* Begin PBXFileReference section */ 60 | FE26C8441DA4A393009EBFD9 /* SwiftyStringExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftyStringExtension.framework; path = Carthage/Build/Mac/SwiftyStringExtension.framework; sourceTree = ""; }; 61 | FE8D5F2D1D78138A006DF186 /* Chapter2.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Chapter2.swift; sourceTree = ""; }; 62 | FE8D5F2F1D78139B006DF186 /* Chapter2Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Chapter2Tests.swift; sourceTree = ""; }; 63 | FE96F88C1D7BB20900834C97 /* xaa */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = xaa; sourceTree = ""; }; 64 | FE96F88D1D7BB20900834C97 /* xab */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = xab; sourceTree = ""; }; 65 | FE96F88E1D7BB20900834C97 /* xac */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = xac; sourceTree = ""; }; 66 | FE96F8921D7BB99F00834C97 /* hightemp_c1sortuniq.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hightemp_c1sortuniq.txt; sourceTree = ""; }; 67 | FE96F8941D7BBBD500834C97 /* hightemp_sortk3r.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hightemp_sortk3r.txt; sourceTree = ""; }; 68 | FE96F8961D7BC23C00834C97 /* hightemp_sortf1count.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hightemp_sortf1count.txt; sourceTree = ""; }; 69 | FEB07E661D7AA2FB00040B90 /* hightemp.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hightemp.txt; sourceTree = ""; }; 70 | FEB07E6A1D7AA3C400040B90 /* TestUtil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestUtil.swift; sourceTree = ""; }; 71 | FEB07E6C1D7AF43C00040B90 /* hightemp_tab2space.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hightemp_tab2space.txt; sourceTree = ""; }; 72 | FEB07E6E1D7AFDED00040B90 /* hightemp_c1.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hightemp_c1.txt; sourceTree = ""; }; 73 | FEB07E6F1D7AFDED00040B90 /* hightemp_c2.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hightemp_c2.txt; sourceTree = ""; }; 74 | FEB07E721D7B021100040B90 /* hightemp_c1+2.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "hightemp_c1+2.txt"; sourceTree = ""; }; 75 | FEB07E741D7B076800040B90 /* hightemp_headn3.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hightemp_headn3.txt; sourceTree = ""; }; 76 | FEB07E761D7B0BC800040B90 /* hightemp_tailn3.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hightemp_tailn3.txt; sourceTree = ""; }; 77 | FEBC02871D9F4411005B52E6 /* MyPlayground.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = MyPlayground.playground; sourceTree = ""; }; 78 | FEBC028B1D9F450D005B52E6 /* Collection.extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Collection.extension.swift; sourceTree = ""; }; 79 | FED26D721D76F37800FF0DEA /* NLP100Swift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NLP100Swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 80 | FED26D741D76F37900FF0DEA /* NLP100Swift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NLP100Swift.h; sourceTree = ""; }; 81 | FED26D751D76F37900FF0DEA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 82 | FED26D7A1D76F37900FF0DEA /* NLP100SwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NLP100SwiftTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 83 | FED26D7F1D76F37900FF0DEA /* Chapter1Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Chapter1Tests.swift; sourceTree = ""; }; 84 | FED26D811D76F37900FF0DEA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 85 | FED26D891D76F38D00FF0DEA /* Chapter1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Chapter1.swift; sourceTree = ""; }; 86 | FED26D8D1D76FE1800FF0DEA /* CollectionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionTests.swift; sourceTree = ""; }; 87 | /* End PBXFileReference section */ 88 | 89 | /* Begin PBXFrameworksBuildPhase section */ 90 | FED26D6E1D76F37800FF0DEA /* Frameworks */ = { 91 | isa = PBXFrameworksBuildPhase; 92 | buildActionMask = 2147483647; 93 | files = ( 94 | FE26C8451DA4A393009EBFD9 /* SwiftyStringExtension.framework in Frameworks */, 95 | ); 96 | runOnlyForDeploymentPostprocessing = 0; 97 | }; 98 | FED26D771D76F37900FF0DEA /* Frameworks */ = { 99 | isa = PBXFrameworksBuildPhase; 100 | buildActionMask = 2147483647; 101 | files = ( 102 | FED26D7B1D76F37900FF0DEA /* NLP100Swift.framework in Frameworks */, 103 | ); 104 | runOnlyForDeploymentPostprocessing = 0; 105 | }; 106 | /* End PBXFrameworksBuildPhase section */ 107 | 108 | /* Begin PBXGroup section */ 109 | FE26C8431DA4A393009EBFD9 /* Frameworks */ = { 110 | isa = PBXGroup; 111 | children = ( 112 | FE26C8441DA4A393009EBFD9 /* SwiftyStringExtension.framework */, 113 | ); 114 | name = Frameworks; 115 | sourceTree = ""; 116 | }; 117 | FE43B9AE1DA130B100C0A3AF /* Extensions */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | FED26D8D1D76FE1800FF0DEA /* CollectionTests.swift */, 121 | ); 122 | name = Extensions; 123 | sourceTree = ""; 124 | }; 125 | FEB07E651D7AA2D300040B90 /* Resources */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | FEB07E661D7AA2FB00040B90 /* hightemp.txt */, 129 | FEB07E6C1D7AF43C00040B90 /* hightemp_tab2space.txt */, 130 | FEB07E6E1D7AFDED00040B90 /* hightemp_c1.txt */, 131 | FEB07E6F1D7AFDED00040B90 /* hightemp_c2.txt */, 132 | FEB07E721D7B021100040B90 /* hightemp_c1+2.txt */, 133 | FEB07E741D7B076800040B90 /* hightemp_headn3.txt */, 134 | FEB07E761D7B0BC800040B90 /* hightemp_tailn3.txt */, 135 | FE96F88C1D7BB20900834C97 /* xaa */, 136 | FE96F88D1D7BB20900834C97 /* xab */, 137 | FE96F88E1D7BB20900834C97 /* xac */, 138 | FE96F8921D7BB99F00834C97 /* hightemp_c1sortuniq.txt */, 139 | FE96F8941D7BBBD500834C97 /* hightemp_sortk3r.txt */, 140 | FE96F8961D7BC23C00834C97 /* hightemp_sortf1count.txt */, 141 | ); 142 | name = Resources; 143 | sourceTree = ""; 144 | }; 145 | FEBC02881D9F44CF005B52E6 /* Extensions */ = { 146 | isa = PBXGroup; 147 | children = ( 148 | FEBC028B1D9F450D005B52E6 /* Collection.extension.swift */, 149 | ); 150 | name = Extensions; 151 | sourceTree = ""; 152 | }; 153 | FED26D471D76F2BB00FF0DEA = { 154 | isa = PBXGroup; 155 | children = ( 156 | FEBC02871D9F4411005B52E6 /* MyPlayground.playground */, 157 | FED26D731D76F37900FF0DEA /* NLP100Swift */, 158 | FED26D7E1D76F37900FF0DEA /* NLP100SwiftTests */, 159 | FED26D541D76F2CE00FF0DEA /* Products */, 160 | FE26C8431DA4A393009EBFD9 /* Frameworks */, 161 | ); 162 | sourceTree = ""; 163 | }; 164 | FED26D541D76F2CE00FF0DEA /* Products */ = { 165 | isa = PBXGroup; 166 | children = ( 167 | FED26D721D76F37800FF0DEA /* NLP100Swift.framework */, 168 | FED26D7A1D76F37900FF0DEA /* NLP100SwiftTests.xctest */, 169 | ); 170 | name = Products; 171 | sourceTree = ""; 172 | }; 173 | FED26D731D76F37900FF0DEA /* NLP100Swift */ = { 174 | isa = PBXGroup; 175 | children = ( 176 | FEBC02881D9F44CF005B52E6 /* Extensions */, 177 | FED26D741D76F37900FF0DEA /* NLP100Swift.h */, 178 | FED26D751D76F37900FF0DEA /* Info.plist */, 179 | FED26D891D76F38D00FF0DEA /* Chapter1.swift */, 180 | FE8D5F2D1D78138A006DF186 /* Chapter2.swift */, 181 | ); 182 | path = NLP100Swift; 183 | sourceTree = ""; 184 | }; 185 | FED26D7E1D76F37900FF0DEA /* NLP100SwiftTests */ = { 186 | isa = PBXGroup; 187 | children = ( 188 | FEB07E651D7AA2D300040B90 /* Resources */, 189 | FE43B9AE1DA130B100C0A3AF /* Extensions */, 190 | FED26D7F1D76F37900FF0DEA /* Chapter1Tests.swift */, 191 | FE8D5F2F1D78139B006DF186 /* Chapter2Tests.swift */, 192 | FED26D811D76F37900FF0DEA /* Info.plist */, 193 | FEB07E6A1D7AA3C400040B90 /* TestUtil.swift */, 194 | ); 195 | path = NLP100SwiftTests; 196 | sourceTree = ""; 197 | }; 198 | /* End PBXGroup section */ 199 | 200 | /* Begin PBXHeadersBuildPhase section */ 201 | FED26D6F1D76F37800FF0DEA /* Headers */ = { 202 | isa = PBXHeadersBuildPhase; 203 | buildActionMask = 2147483647; 204 | files = ( 205 | FED26D821D76F37900FF0DEA /* NLP100Swift.h in Headers */, 206 | ); 207 | runOnlyForDeploymentPostprocessing = 0; 208 | }; 209 | /* End PBXHeadersBuildPhase section */ 210 | 211 | /* Begin PBXNativeTarget section */ 212 | FED26D711D76F37800FF0DEA /* NLP100Swift */ = { 213 | isa = PBXNativeTarget; 214 | buildConfigurationList = FED26D831D76F37900FF0DEA /* Build configuration list for PBXNativeTarget "NLP100Swift" */; 215 | buildPhases = ( 216 | FED26D6D1D76F37800FF0DEA /* Sources */, 217 | FED26D6E1D76F37800FF0DEA /* Frameworks */, 218 | FED26D6F1D76F37800FF0DEA /* Headers */, 219 | FED26D701D76F37800FF0DEA /* Resources */, 220 | ); 221 | buildRules = ( 222 | ); 223 | dependencies = ( 224 | ); 225 | name = NLP100Swift; 226 | productName = NLP100Swift; 227 | productReference = FED26D721D76F37800FF0DEA /* NLP100Swift.framework */; 228 | productType = "com.apple.product-type.framework"; 229 | }; 230 | FED26D791D76F37900FF0DEA /* NLP100SwiftTests */ = { 231 | isa = PBXNativeTarget; 232 | buildConfigurationList = FED26D861D76F37900FF0DEA /* Build configuration list for PBXNativeTarget "NLP100SwiftTests" */; 233 | buildPhases = ( 234 | FED26D761D76F37900FF0DEA /* Sources */, 235 | FED26D771D76F37900FF0DEA /* Frameworks */, 236 | FED26D781D76F37900FF0DEA /* Resources */, 237 | FE484F261DA4A56500E9A9A9 /* CopyFiles */, 238 | ); 239 | buildRules = ( 240 | ); 241 | dependencies = ( 242 | FED26D7D1D76F37900FF0DEA /* PBXTargetDependency */, 243 | ); 244 | name = NLP100SwiftTests; 245 | productName = NLP100SwiftTests; 246 | productReference = FED26D7A1D76F37900FF0DEA /* NLP100SwiftTests.xctest */; 247 | productType = "com.apple.product-type.bundle.unit-test"; 248 | }; 249 | /* End PBXNativeTarget section */ 250 | 251 | /* Begin PBXProject section */ 252 | FED26D481D76F2BB00FF0DEA /* Project object */ = { 253 | isa = PBXProject; 254 | attributes = { 255 | LastSwiftUpdateCheck = 0800; 256 | LastUpgradeCheck = 0800; 257 | TargetAttributes = { 258 | FED26D711D76F37800FF0DEA = { 259 | CreatedOnToolsVersion = 8.0; 260 | LastSwiftMigration = 0800; 261 | ProvisioningStyle = Automatic; 262 | }; 263 | FED26D791D76F37900FF0DEA = { 264 | CreatedOnToolsVersion = 8.0; 265 | ProvisioningStyle = Automatic; 266 | }; 267 | }; 268 | }; 269 | buildConfigurationList = FED26D4B1D76F2BB00FF0DEA /* Build configuration list for PBXProject "nlp100-swift" */; 270 | compatibilityVersion = "Xcode 3.2"; 271 | developmentRegion = English; 272 | hasScannedForEncodings = 0; 273 | knownRegions = ( 274 | en, 275 | ); 276 | mainGroup = FED26D471D76F2BB00FF0DEA; 277 | productRefGroup = FED26D541D76F2CE00FF0DEA /* Products */; 278 | projectDirPath = ""; 279 | projectRoot = ""; 280 | targets = ( 281 | FED26D711D76F37800FF0DEA /* NLP100Swift */, 282 | FED26D791D76F37900FF0DEA /* NLP100SwiftTests */, 283 | ); 284 | }; 285 | /* End PBXProject section */ 286 | 287 | /* Begin PBXResourcesBuildPhase section */ 288 | FED26D701D76F37800FF0DEA /* Resources */ = { 289 | isa = PBXResourcesBuildPhase; 290 | buildActionMask = 2147483647; 291 | files = ( 292 | ); 293 | runOnlyForDeploymentPostprocessing = 0; 294 | }; 295 | FED26D781D76F37900FF0DEA /* Resources */ = { 296 | isa = PBXResourcesBuildPhase; 297 | buildActionMask = 2147483647; 298 | files = ( 299 | FE96F8901D7BB20900834C97 /* xab in Resources */, 300 | FEB07E6D1D7AF43C00040B90 /* hightemp_tab2space.txt in Resources */, 301 | FEB07E751D7B076800040B90 /* hightemp_headn3.txt in Resources */, 302 | FE96F8951D7BBBD500834C97 /* hightemp_sortk3r.txt in Resources */, 303 | FE96F8911D7BB20900834C97 /* xac in Resources */, 304 | FEB07E731D7B021100040B90 /* hightemp_c1+2.txt in Resources */, 305 | FE96F8931D7BB99F00834C97 /* hightemp_c1sortuniq.txt in Resources */, 306 | FEB07E771D7B0BC800040B90 /* hightemp_tailn3.txt in Resources */, 307 | FEB07E671D7AA2FB00040B90 /* hightemp.txt in Resources */, 308 | FE96F88F1D7BB20900834C97 /* xaa in Resources */, 309 | FEB07E701D7AFDED00040B90 /* hightemp_c1.txt in Resources */, 310 | FEB07E711D7AFDED00040B90 /* hightemp_c2.txt in Resources */, 311 | FE96F8971D7BC23C00834C97 /* hightemp_sortf1count.txt in Resources */, 312 | ); 313 | runOnlyForDeploymentPostprocessing = 0; 314 | }; 315 | /* End PBXResourcesBuildPhase section */ 316 | 317 | /* Begin PBXSourcesBuildPhase section */ 318 | FED26D6D1D76F37800FF0DEA /* Sources */ = { 319 | isa = PBXSourcesBuildPhase; 320 | buildActionMask = 2147483647; 321 | files = ( 322 | FED26D8A1D76F38D00FF0DEA /* Chapter1.swift in Sources */, 323 | FE8D5F2E1D78138A006DF186 /* Chapter2.swift in Sources */, 324 | FEBC028C1D9F450D005B52E6 /* Collection.extension.swift in Sources */, 325 | ); 326 | runOnlyForDeploymentPostprocessing = 0; 327 | }; 328 | FED26D761D76F37900FF0DEA /* Sources */ = { 329 | isa = PBXSourcesBuildPhase; 330 | buildActionMask = 2147483647; 331 | files = ( 332 | FE8D5F301D78139B006DF186 /* Chapter2Tests.swift in Sources */, 333 | FED26D8E1D76FE1800FF0DEA /* CollectionTests.swift in Sources */, 334 | FED26D801D76F37900FF0DEA /* Chapter1Tests.swift in Sources */, 335 | FEB07E6B1D7AA3C400040B90 /* TestUtil.swift in Sources */, 336 | ); 337 | runOnlyForDeploymentPostprocessing = 0; 338 | }; 339 | /* End PBXSourcesBuildPhase section */ 340 | 341 | /* Begin PBXTargetDependency section */ 342 | FED26D7D1D76F37900FF0DEA /* PBXTargetDependency */ = { 343 | isa = PBXTargetDependency; 344 | target = FED26D711D76F37800FF0DEA /* NLP100Swift */; 345 | targetProxy = FED26D7C1D76F37900FF0DEA /* PBXContainerItemProxy */; 346 | }; 347 | /* End PBXTargetDependency section */ 348 | 349 | /* Begin XCBuildConfiguration section */ 350 | FED26D4C1D76F2BB00FF0DEA /* Debug */ = { 351 | isa = XCBuildConfiguration; 352 | buildSettings = { 353 | }; 354 | name = Debug; 355 | }; 356 | FED26D4D1D76F2BB00FF0DEA /* Release */ = { 357 | isa = XCBuildConfiguration; 358 | buildSettings = { 359 | }; 360 | name = Release; 361 | }; 362 | FED26D841D76F37900FF0DEA /* Debug */ = { 363 | isa = XCBuildConfiguration; 364 | buildSettings = { 365 | ALWAYS_SEARCH_USER_PATHS = NO; 366 | CLANG_ANALYZER_NONNULL = YES; 367 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 368 | CLANG_CXX_LIBRARY = "libc++"; 369 | CLANG_ENABLE_MODULES = YES; 370 | CLANG_ENABLE_OBJC_ARC = YES; 371 | CLANG_WARN_BOOL_CONVERSION = YES; 372 | CLANG_WARN_CONSTANT_CONVERSION = YES; 373 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 374 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 375 | CLANG_WARN_EMPTY_BODY = YES; 376 | CLANG_WARN_ENUM_CONVERSION = YES; 377 | CLANG_WARN_INFINITE_RECURSION = YES; 378 | CLANG_WARN_INT_CONVERSION = YES; 379 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 380 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 381 | CLANG_WARN_UNREACHABLE_CODE = YES; 382 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 383 | CODE_SIGN_IDENTITY = "-"; 384 | COMBINE_HIDPI_IMAGES = YES; 385 | COPY_PHASE_STRIP = NO; 386 | CURRENT_PROJECT_VERSION = 1; 387 | DEBUG_INFORMATION_FORMAT = dwarf; 388 | DEFINES_MODULE = YES; 389 | DYLIB_COMPATIBILITY_VERSION = 1; 390 | DYLIB_CURRENT_VERSION = 1; 391 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 392 | ENABLE_STRICT_OBJC_MSGSEND = YES; 393 | ENABLE_TESTABILITY = YES; 394 | FRAMEWORK_SEARCH_PATHS = ( 395 | "$(inherited)", 396 | "$(PROJECT_DIR)/Carthage/Build/Mac", 397 | ); 398 | FRAMEWORK_VERSION = A; 399 | GCC_C_LANGUAGE_STANDARD = gnu99; 400 | GCC_DYNAMIC_NO_PIC = NO; 401 | GCC_NO_COMMON_BLOCKS = YES; 402 | GCC_OPTIMIZATION_LEVEL = 0; 403 | GCC_PREPROCESSOR_DEFINITIONS = ( 404 | "DEBUG=1", 405 | "$(inherited)", 406 | ); 407 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 408 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 409 | GCC_WARN_UNDECLARED_SELECTOR = YES; 410 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 411 | GCC_WARN_UNUSED_FUNCTION = YES; 412 | GCC_WARN_UNUSED_VARIABLE = YES; 413 | INFOPLIST_FILE = NLP100Swift/Info.plist; 414 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 415 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 416 | MACOSX_DEPLOYMENT_TARGET = 10.11; 417 | MTL_ENABLE_DEBUG_INFO = YES; 418 | ONLY_ACTIVE_ARCH = YES; 419 | PRODUCT_BUNDLE_IDENTIFIER = com.mono0926.NLP100Swift; 420 | PRODUCT_NAME = "$(TARGET_NAME)"; 421 | SDKROOT = macosx; 422 | SKIP_INSTALL = YES; 423 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 424 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 425 | SWIFT_VERSION = 3.0; 426 | VERSIONING_SYSTEM = "apple-generic"; 427 | VERSION_INFO_PREFIX = ""; 428 | }; 429 | name = Debug; 430 | }; 431 | FED26D851D76F37900FF0DEA /* Release */ = { 432 | isa = XCBuildConfiguration; 433 | buildSettings = { 434 | ALWAYS_SEARCH_USER_PATHS = NO; 435 | CLANG_ANALYZER_NONNULL = YES; 436 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 437 | CLANG_CXX_LIBRARY = "libc++"; 438 | CLANG_ENABLE_MODULES = YES; 439 | CLANG_ENABLE_OBJC_ARC = YES; 440 | CLANG_WARN_BOOL_CONVERSION = YES; 441 | CLANG_WARN_CONSTANT_CONVERSION = YES; 442 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 443 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 444 | CLANG_WARN_EMPTY_BODY = YES; 445 | CLANG_WARN_ENUM_CONVERSION = YES; 446 | CLANG_WARN_INFINITE_RECURSION = YES; 447 | CLANG_WARN_INT_CONVERSION = YES; 448 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 449 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 450 | CLANG_WARN_UNREACHABLE_CODE = YES; 451 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 452 | CODE_SIGN_IDENTITY = "-"; 453 | COMBINE_HIDPI_IMAGES = YES; 454 | COPY_PHASE_STRIP = NO; 455 | CURRENT_PROJECT_VERSION = 1; 456 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 457 | DEFINES_MODULE = YES; 458 | DYLIB_COMPATIBILITY_VERSION = 1; 459 | DYLIB_CURRENT_VERSION = 1; 460 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 461 | ENABLE_NS_ASSERTIONS = NO; 462 | ENABLE_STRICT_OBJC_MSGSEND = YES; 463 | FRAMEWORK_SEARCH_PATHS = ( 464 | "$(inherited)", 465 | "$(PROJECT_DIR)/Carthage/Build/Mac", 466 | ); 467 | FRAMEWORK_VERSION = A; 468 | GCC_C_LANGUAGE_STANDARD = gnu99; 469 | GCC_NO_COMMON_BLOCKS = YES; 470 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 471 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 472 | GCC_WARN_UNDECLARED_SELECTOR = YES; 473 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 474 | GCC_WARN_UNUSED_FUNCTION = YES; 475 | GCC_WARN_UNUSED_VARIABLE = YES; 476 | INFOPLIST_FILE = NLP100Swift/Info.plist; 477 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 478 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 479 | MACOSX_DEPLOYMENT_TARGET = 10.11; 480 | MTL_ENABLE_DEBUG_INFO = NO; 481 | PRODUCT_BUNDLE_IDENTIFIER = com.mono0926.NLP100Swift; 482 | PRODUCT_NAME = "$(TARGET_NAME)"; 483 | SDKROOT = macosx; 484 | SKIP_INSTALL = YES; 485 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 486 | SWIFT_VERSION = 3.0; 487 | VERSIONING_SYSTEM = "apple-generic"; 488 | VERSION_INFO_PREFIX = ""; 489 | }; 490 | name = Release; 491 | }; 492 | FED26D871D76F37900FF0DEA /* Debug */ = { 493 | isa = XCBuildConfiguration; 494 | buildSettings = { 495 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 496 | ALWAYS_SEARCH_USER_PATHS = NO; 497 | CLANG_ANALYZER_NONNULL = YES; 498 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 499 | CLANG_CXX_LIBRARY = "libc++"; 500 | CLANG_ENABLE_MODULES = YES; 501 | CLANG_ENABLE_OBJC_ARC = YES; 502 | CLANG_WARN_BOOL_CONVERSION = YES; 503 | CLANG_WARN_CONSTANT_CONVERSION = YES; 504 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 505 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 506 | CLANG_WARN_EMPTY_BODY = YES; 507 | CLANG_WARN_ENUM_CONVERSION = YES; 508 | CLANG_WARN_INFINITE_RECURSION = YES; 509 | CLANG_WARN_INT_CONVERSION = YES; 510 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 511 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 512 | CLANG_WARN_UNREACHABLE_CODE = YES; 513 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 514 | CODE_SIGN_IDENTITY = "-"; 515 | COMBINE_HIDPI_IMAGES = YES; 516 | COPY_PHASE_STRIP = NO; 517 | DEBUG_INFORMATION_FORMAT = dwarf; 518 | ENABLE_STRICT_OBJC_MSGSEND = YES; 519 | ENABLE_TESTABILITY = YES; 520 | FRAMEWORK_SEARCH_PATHS = ( 521 | "$(inherited)", 522 | "$(PROJECT_DIR)/Carthage/Build/Mac", 523 | ); 524 | GCC_C_LANGUAGE_STANDARD = gnu99; 525 | GCC_DYNAMIC_NO_PIC = NO; 526 | GCC_NO_COMMON_BLOCKS = YES; 527 | GCC_OPTIMIZATION_LEVEL = 0; 528 | GCC_PREPROCESSOR_DEFINITIONS = ( 529 | "DEBUG=1", 530 | "$(inherited)", 531 | ); 532 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 533 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 534 | GCC_WARN_UNDECLARED_SELECTOR = YES; 535 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 536 | GCC_WARN_UNUSED_FUNCTION = YES; 537 | GCC_WARN_UNUSED_VARIABLE = YES; 538 | INFOPLIST_FILE = NLP100SwiftTests/Info.plist; 539 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 540 | MACOSX_DEPLOYMENT_TARGET = 10.11; 541 | MTL_ENABLE_DEBUG_INFO = YES; 542 | ONLY_ACTIVE_ARCH = YES; 543 | PRODUCT_BUNDLE_IDENTIFIER = com.mono0926.NLP100SwiftTests; 544 | PRODUCT_NAME = "$(TARGET_NAME)"; 545 | SDKROOT = macosx; 546 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 547 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 548 | SWIFT_VERSION = 3.0; 549 | }; 550 | name = Debug; 551 | }; 552 | FED26D881D76F37900FF0DEA /* Release */ = { 553 | isa = XCBuildConfiguration; 554 | buildSettings = { 555 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 556 | ALWAYS_SEARCH_USER_PATHS = NO; 557 | CLANG_ANALYZER_NONNULL = YES; 558 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 559 | CLANG_CXX_LIBRARY = "libc++"; 560 | CLANG_ENABLE_MODULES = YES; 561 | CLANG_ENABLE_OBJC_ARC = YES; 562 | CLANG_WARN_BOOL_CONVERSION = YES; 563 | CLANG_WARN_CONSTANT_CONVERSION = YES; 564 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 565 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 566 | CLANG_WARN_EMPTY_BODY = YES; 567 | CLANG_WARN_ENUM_CONVERSION = YES; 568 | CLANG_WARN_INFINITE_RECURSION = YES; 569 | CLANG_WARN_INT_CONVERSION = YES; 570 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 571 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 572 | CLANG_WARN_UNREACHABLE_CODE = YES; 573 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 574 | CODE_SIGN_IDENTITY = "-"; 575 | COMBINE_HIDPI_IMAGES = YES; 576 | COPY_PHASE_STRIP = NO; 577 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 578 | ENABLE_NS_ASSERTIONS = NO; 579 | ENABLE_STRICT_OBJC_MSGSEND = YES; 580 | FRAMEWORK_SEARCH_PATHS = ( 581 | "$(inherited)", 582 | "$(PROJECT_DIR)/Carthage/Build/Mac", 583 | ); 584 | GCC_C_LANGUAGE_STANDARD = gnu99; 585 | GCC_NO_COMMON_BLOCKS = YES; 586 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 587 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 588 | GCC_WARN_UNDECLARED_SELECTOR = YES; 589 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 590 | GCC_WARN_UNUSED_FUNCTION = YES; 591 | GCC_WARN_UNUSED_VARIABLE = YES; 592 | INFOPLIST_FILE = NLP100SwiftTests/Info.plist; 593 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 594 | MACOSX_DEPLOYMENT_TARGET = 10.11; 595 | MTL_ENABLE_DEBUG_INFO = NO; 596 | PRODUCT_BUNDLE_IDENTIFIER = com.mono0926.NLP100SwiftTests; 597 | PRODUCT_NAME = "$(TARGET_NAME)"; 598 | SDKROOT = macosx; 599 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 600 | SWIFT_VERSION = 3.0; 601 | }; 602 | name = Release; 603 | }; 604 | /* End XCBuildConfiguration section */ 605 | 606 | /* Begin XCConfigurationList section */ 607 | FED26D4B1D76F2BB00FF0DEA /* Build configuration list for PBXProject "nlp100-swift" */ = { 608 | isa = XCConfigurationList; 609 | buildConfigurations = ( 610 | FED26D4C1D76F2BB00FF0DEA /* Debug */, 611 | FED26D4D1D76F2BB00FF0DEA /* Release */, 612 | ); 613 | defaultConfigurationIsVisible = 0; 614 | defaultConfigurationName = Release; 615 | }; 616 | FED26D831D76F37900FF0DEA /* Build configuration list for PBXNativeTarget "NLP100Swift" */ = { 617 | isa = XCConfigurationList; 618 | buildConfigurations = ( 619 | FED26D841D76F37900FF0DEA /* Debug */, 620 | FED26D851D76F37900FF0DEA /* Release */, 621 | ); 622 | defaultConfigurationIsVisible = 0; 623 | defaultConfigurationName = Release; 624 | }; 625 | FED26D861D76F37900FF0DEA /* Build configuration list for PBXNativeTarget "NLP100SwiftTests" */ = { 626 | isa = XCConfigurationList; 627 | buildConfigurations = ( 628 | FED26D871D76F37900FF0DEA /* Debug */, 629 | FED26D881D76F37900FF0DEA /* Release */, 630 | ); 631 | defaultConfigurationIsVisible = 0; 632 | defaultConfigurationName = Release; 633 | }; 634 | /* End XCConfigurationList section */ 635 | }; 636 | rootObject = FED26D481D76F2BB00FF0DEA /* Project object */; 637 | } 638 | -------------------------------------------------------------------------------- /nlp100-swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | --------------------------------------------------------------------------------