Skip to content

Instantly share code, notes, and snippets.

@proxpero
proxpero / MergeSort.swift
Last active February 8, 2016 17:29
A simple implementation of Merge Sort in Swift as an extension on Array
// Swift 2.1
extension Array where Element : Comparable {
private func merge(var left: Array<Element>, var _ right: Array<Element>) -> Array<Element> {
var result: Array<Element> = []
while !left.isEmpty && !right.isEmpty {
@proxpero
proxpero / ShellSort.swift
Created January 27, 2016 21:19
Sort a collection using Shell's method. Implemented in Swift as an extension on `MutableCollectionType`.
// Swift 2.1
extension MutableCollectionType where Self.Generator.Element : Comparable, Self.Index == Int {
/// Return a new sorted collection of the elements in `source`
/// using [Shell Sort](https://en.wikipedia.org/wiki/Shellsort).
///
/// Complexity O(n^(3/2)).
@warn_unused_result(mutable_variant="shellSortInPlace")
@proxpero
proxpero / InsertionSort.swift
Last active January 27, 2016 18:38
Insertion Sort in Swift implemented as an extension on `MutableCollectionType`
// Swift 2.1
extension MutableCollectionType where Self.Generator.Element : Comparable {
/// Return a new sorted collection of the elements in `source`
/// using [Insertion Sort](https://en.wikipedia.org/wiki/Insertion_sort).
///
/// Complexity O(n^2).
@warn_unused_result(mutable_variant="insertionSortInPlace")
public func insertionSort() -> Self {
@proxpero
proxpero / SelectionSort.swift
Last active January 27, 2016 18:35
Selection sort in Swift implemented as an extension on `MutableCollectionType`
// Swift 2.1
extension MutableCollectionType where Self.Generator.Element : Comparable {
/// Return a new sorted collection of the elements in `source`
/// using [Selection Sort](https://en.wikipedia.org/wiki/Selection_sort).
///
/// Complexity O(n^2).
@warn_unused_result(mutable_variant="selectionSortInPlace")
public func selectionSort() -> Self {
@proxpero
proxpero / NSColor+RGB
Created January 18, 2016 13:32
An simple extension to NSColor to create a color from a six character RGB string. Written in Swift.
// Swift 2.2
extension NSColor {
convenience init(rgb: String) {
guard rgb.characters.count == 6 else { fatalError("Invalid rgb value: \(rgb)") }
let scanner = NSScanner(string: rgb)
var hexValue: UInt32 = 0
@proxpero
proxpero / project_euler_43.swift
Created October 13, 2015 18:08
Project Euler problem 43 in Swift
//: [Sub-string Divisibility](https://projecteuler.net/problem=43)
/*:
The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property.
Let d[1] be the 1st digit, d[2] be the 2nd digit, and so on. In this way, we note the following:
* d[2]d[3]d[4] = 406 is divisible by 2
* d[3]d[4]d[5] = 063 is divisible by 3
* d[4]d[5]d[6] = 635 is divisible by 5
* d[5]d[6]d[7] = 357 is divisible by 7
@proxpero
proxpero / project_euler_44.swift
Last active October 11, 2015 01:37
Project Euler problem 44: Pentagonal Numbers (Xcode 7.0, Swift 2.0)
//: [Pentagonal Numbers](https://projecteuler.net/problem=44)
/*:
Pentagonal numbers are generated by the formula, P[n]=n[3n−1]/2. The first ten pentagonal numbers are:
1, 5, 12, 22, 35, 51, 70, 92, 117, 145, ...
It can be seen that P[4] + P[7] = 22 + 70 = 92 = P[8]. However, their difference, 70 − 22 = 48, is not pentagonal.
Find the pair of pentagonal numbers, P[j] and P[k], for which their sum and difference are pentagonal and D = |P[k] − P[j]| is minimised; what is the value of D?
*/
@proxpero
proxpero / project_euler_90.swift
Last active October 9, 2015 21:26
Project Euler problem 90 in Swift
//: Cube digit pairs
//: [Problem 90](https://projecteuler.net/problem=90)
//: Xcode 7.0, Swift 2.0
/*:
Each of the six faces on a cube has a different digit (0 to 9) written on it; the same is done to a second cube. By placing the two cubes side-by-side in different positions we can form a variety of 2-digit numbers.
For example, the square number 64 could be formed:
![Two cubes showing 64](https://projecteuler.net/project/images/p090.gif)
In fact, by carefully choosing the digits on both cubes it is possible to display all of the square numbers below one-hundred: 01, 04, 09, 16, 25, 36, 49, 64, and 81.
@proxpero
proxpero / project_euler_42.swift
Last active October 9, 2015 21:27
Project Euler problem # 42 in Swift
//: Coded Triangle Numbers
//: [Problem 42](https://projecteuler.net/problem=42)
//: Xcode 7.0, Swift 2.0
/*:
The nth term of the sequence of triangle numbers is given by, t[n] = ½n(n+1); so the first ten triangle numbers are:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
By converting each letter in a word to a number corresponding to its alphabetical position and adding these values we form a word value. For example, the word value for SKY is 19 + 11 + 25 = 55 = t[10]. If the word value is a triangle number then we shall call the word a triangle word.
Using [words.txt](https://projecteuler.net/project/resources/p042_words.txt), a 16K text file containing nearly two-thousand common English words, how many are triangle words?
*/
//: Note: I found and replaced the double quotes directly in the text file rather than in code since escaping the double quotes in a string kept crashing the playground. I named the file "words.txt" in the "Resources" folder of the playground.
@proxpero
proxpero / SICP_ex_1-11.swift
Last active October 9, 2015 21:27
SICP exercise 1.12 in Swift
//: SICP Exercise 1.12
//: //: Xcode 7.0, Swift 2.0
/* The following pattern of numbers is called Pascal’s triangle.
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . .