Skip to content

Instantly share code, notes, and snippets.

@ninjaprawn
Created July 15, 2017 16:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ninjaprawn/1cd60999af50334d75855298e1288570 to your computer and use it in GitHub Desktop.
Save ninjaprawn/1cd60999af50334d75855298e1288570 to your computer and use it in GitHub Desktop.
import Foundation
import CoreFoundation
class one {
var asdf: Int
init(asdf: Int) {
self.asdf = asdf
}
}
class two: one {
var value: UInt8
init(asdf: Int, s: UInt8) {
self.value = s
super.init(asdf: asdf)
}
}
class three: two {
var idgaf: two
var kthxbye: two
init(idgaf: two, kthxbye: two) {
self.idgaf = idgaf
self.kthxbye = kthxbye
super.init(asdf: self.idgaf.asdf + self.kthxbye.asdf, s: 0)
}
}
let fancy = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque suscipit, ligula vitae fringilla fringilla, lectus tortor eleifend ligula, vitae sodales mauris nibh a elit. Maecenas nec pellentesque massa. Curabitur volutpat lobortis risus id aliquet. Donec eget viverra enim. Etiam massa nibh, lobortis id pretium quis, consequat ut libero. Integer aliquet lacinia ex sed porttitor. Maecenas auctor eget nisl et mollis. Mauris et suscipit lorem, a facilisis magna. Etiam at facilisis lacus, mollis rhoncus lorem. Morbi vitae volutpat lectus. Donec ut vestibulum justo. Nullam ullamcorper ligula vel dignissim viverra. Quisque mi sapien, auctor quis quam ac, gravida ullamcorper purus. Morbi ut mi vitae massa dapibus rhoncus sed ut ipsum. Suspendisse accumsan dui at velit ultrices, ac hendrerit metus ullamcorper.Duis volutpat condimentum faucibus. Aliquam ex nisl, sodales in urna vel, vestibulum faucibus metus. Donec dapibus ante magna, luctus hendrerit felis commodo vitae. Vivamus quis sodales quam. Nullam dictum venenatis eros, vitae feugiat erat sollicitudin eu. Mauris aliquam, purus id porta porttitor, ligula felis egestas ex, non feugiat urna sem a nisi. Nunc eget tincidunt lorem, et dictum diam. Integer sodales tempus finibus. Donec pharetra ut risus sit amet bibendum. Morbi molestie lacinia varius. Duis diam dui, pulvinar non orci a, malesuada dictum metus. Morbi semper at ante in dignissim. Maecenas at molestie nibh. Mauris sollicitudin, ipsum eu imperdiet tristique, neque purus tristique sem, quis porta leo libero et orci. Fusce sed odio lobortis, pharetra justo et, tristique mauris. Vestibulum in interdum libero, et euismod lacus. Nulla volutpat pulvinar tortor at placerat. In non magna eget nibh egestas lacinia eleifend eu metus. Nullam ac mattis nisi. Curabitur porttitor enim sed elementum interdum. Duis sed molestie enim. Nullam varius ex efficitur efficitur mollis. Vestibulum in sollicitudin erat. Quisque in turpis eget leo eleifend ultricies at blandit arcu. Vivamus at pretium quam. Praesent laoreet ligula faucibus ante tincidunt, in euismod massa auctor.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}_"
var countedSet = NSCountedSet()
for char in fancy {
let num = NSNumber(value: char.unicodeScalars.filter{$0.isASCII}.first!.value)
countedSet.add(num)
}
var arr = [two]()
var callbacks = CFBinaryHeapCallBacks()
callbacks.compare = { a, b, _ in
let afoo = a!.assumingMemoryBound(to: two.self).pointee
let bfoo = b!.assumingMemoryBound(to: two.self).pointee
if ( afoo.asdf == bfoo.asdf ) { return CFComparisonResult(rawValue: 0)! }
if ( afoo.asdf > bfoo.asdf ) { return CFComparisonResult(rawValue: 1)! }
return CFComparisonResult(rawValue: -1)!
}
let callbacksPointer = UnsafeMutablePointer<CFBinaryHeapCallBacks>.allocate(capacity: 1)
callbacksPointer.initialize(to: callbacks)
var bh = CFBinaryHeapCreate(nil, 0, callbacksPointer, nil)
for char in countedSet {
let count = countedSet.count(for: char)
let val = char as! UInt8
if count > 0 {
let cls = two(asdf: count, s: val)
let fooPointer: UnsafeMutablePointer<two>! = UnsafeMutablePointer<two>.allocate(capacity: 1)
fooPointer.initialize(to: cls)
CFBinaryHeapAddValue(bh, fooPointer)
}
}
while CFBinaryHeapGetCount(bh) > 1 {
let tmp1 = CFBinaryHeapGetMinimum(bh).assumingMemoryBound(to: two.self)
CFBinaryHeapRemoveMinimumValue(bh)
let tmp2 = CFBinaryHeapGetMinimum(bh).assumingMemoryBound(to: two.self)
CFBinaryHeapRemoveMinimumValue(bh)
let cls = three(idgaf: tmp1.pointee, kthxbye: tmp2.pointee)
let fooPointer: UnsafeMutablePointer<two>! = UnsafeMutablePointer<two>.allocate(capacity: 1)
fooPointer.initialize(to: cls as two)
CFBinaryHeapAddValue(bh, fooPointer)
}
let tmp1 = CFBinaryHeapGetMinimum(bh).assumingMemoryBound(to: two.self)
let real = tmp1.pointee
func test(type: two, currentStr: NSMutableString, dict: NSMutableDictionary) {
if type is three {
let real = type as! three
currentStr.append("0")
test(type: real.idgaf, currentStr: currentStr, dict: dict)
currentStr.deleteCharacters(in: NSRange.init(location: currentStr.length - 1, length: 1))
currentStr.append("1")
test(type: real.kthxbye, currentStr: currentStr, dict: dict)
currentStr.deleteCharacters(in: NSRange.init(location: currentStr.length - 1, length: 1))
} else {
let val = String(UnicodeScalar(type.value))
dict[val] = currentStr as String
}
}
var str = NSMutableString()
var dict = NSMutableDictionary()
test(type: real, currentStr: str, dict: dict)
print(dict)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment