Skip to content

Instantly share code, notes, and snippets.

View airspeedswift's full-sized avatar

Ben Cohen airspeedswift

View GitHub Profile
@airspeedswift
airspeedswift / keybase.md
Created January 7, 2015 16:55
Keybase verification

Keybase proof

I hereby claim:

  • I am airspeedswift on github.
  • I am airspeedvelocity (https://keybase.io/airspeedvelocity) on keybase.
  • I have a public key whose fingerprint is BAC5 2735 2DC2 8822 2A8B EFC1 ECB5 1983 1587 0DBE

To claim this, I am signing this object:

@airspeedswift
airspeedswift / 1.swift
Created February 5, 2015 22:04
3 Dynamic Type Crashes
import Foundation
protocol P {
func f(i: Int)
}
func g<T: P>(t: T) {
let f = { t.dynamicType.f($0) }
}
@airspeedswift
airspeedswift / AnyObjVs.swift
Last active August 29, 2015 14:17
AnyObject.property is slower than ActualClass.property
import Foundation
@objc class MyClass: NSObject {
var someProperty: Int
init(_ x: Int) { someProperty = x }
}
let classes: [AnyObject] = (0..<10_000).map { _ in MyClass(Int(arc4random())) }
func timeRun<T>(name: String, f: ()->T) -> String {
let start = CFAbsoluteTimeGetCurrent()
@airspeedswift
airspeedswift / shuffle.swift
Created April 4, 2015 22:06
Fisher-Yates Shuffle in Swift 1.2
import Darwin
func shuffle<C: MutableCollectionType where C.Index.Distance == Int>(var list: C) -> C {
var n = count(list)
if n == 0 { return list }
let oneBeforeEnd = advance(list.startIndex, n.predecessor())
for i in list.startIndex..<oneBeforeEnd {
let ran = Int(arc4random_uniform(UInt32(n--)))
let j = advance(i,ran)
swap(&list[i], &list[j])
@airspeedswift
airspeedswift / CSV.swift
Created May 11, 2015 16:19
CSV-parsing code in Swift
// after http://www.cocoawithlove.com/2009/11/writing-parser-using-nsscanner-csv.html
import Foundation
extension NSScanner {
func scanUpToCharactersFromSet(set: NSCharacterSet) -> String? {
var str: NSString?
return self.scanUpToCharactersFromSet(set, intoString: &str)
? str as? String
: nil
import Darwin
func mid<T: RandomAccessIndexType>(r: Range<T>)->T {
return r.startIndex.advancedBy(
r.startIndex.distanceTo(r.endIndex) / 2
)
}
func merge<T: Comparable>(inout source: [T], lhs: Range<Int>, rhs: Range<Int>) {
var tmp: [T] = []
@airspeedswift
airspeedswift / subscript.swift
Created June 3, 2015 19:25
subscript mutation example
extension Int {
mutating func increment() {
self = self.successor()
}
}
struct S {
var x: Int = 0
subscript()->Int {
@airspeedswift
airspeedswift / rbt.swift
Last active August 29, 2015 14:23
Persistent Red/Black Tree in Swift using 2.0 Pattern Matching
final class Box<T> {
let unbox: T
init(_ x: T) { self.unbox = x }
}
enum Color { case R, B }
enum Tree { //<T: Comparable> { // something not working when I make this generic
case Empty
@airspeedswift
airspeedswift / mid.swift
Created June 25, 2015 20:09
Range midpoint
extension Range where T: RandomAccessIndexType {
var mid: T {
return startIndex.advancedBy(
startIndex.distanceTo(endIndex) / 2
)
}
}
@airspeedswift
airspeedswift / mergesort.swift
Created June 25, 2015 20:43
Sliceable mergesort extension
extension Range where T: RandomAccessIndexType {
var mid: T {
return startIndex.advancedBy(
startIndex.distanceTo(endIndex) / 2
)
}
}
extension Sliceable