-
-
Save ninjaprawn/1cd60999af50334d75855298e1288570 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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