Skip to content

Instantly share code, notes, and snippets.

@proxpero
proxpero / Permutations.swift
Last active September 18, 2023 13:17
Generate the permutations of a Swift array.
//: Permutations
// based on https://www.objc.io/blog/2014/12/08/functional-snippet-10-permutations/
// but updated for Swift 2.0 (Xcode 7.0)
extension Array {
func decompose() -> (Generator.Element, [Generator.Element])? {
guard let x = first else { return nil }
return (x, Array(self[1..<count]))
}
}
@proxpero
proxpero / problem_1_of_5.swift
Last active October 5, 2015 12:44
Solution to problem 1 from "5 Programming Problems, 1 Hour"
//: Problem 1
// "Write three functions that compute the sum of the numbers in a given list using a for-loop, a while-loop, and recursion."
// https://www.shiftedup.com/2015/05/07/five-programming-problems-every-software-engineer-should-be-able-to-solve-in-less-than-1-hour
// Xcode 7.0, Swift 2.0
let series = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
let realSum = series.reduce(0, combine: +)
@proxpero
proxpero / problem_2_of_5.swift
Last active October 5, 2015 12:44
Solution to problem 2 from "5 Programming Problems, 1 Hour"
//: Problem 2
// "Write a function that combines two lists by alternatingly taking elements. For example: given the two lists [a, b, c] and [1, 2, 3], the function should return [a, 1, b, 2, c, 3]."
// https://www.shiftedup.com/2015/05/07/five-programming-problems-every-software-engineer-should-be-able-to-solve-in-less-than-1-hour
// Xcode 7.0, Swift 2.0
// Assumption: homogeneous arrays, same length
let first = ["a", "b", "c"]
@proxpero
proxpero / problem_3_of_5.swift
Last active October 5, 2015 12:53
Solution to problem 3 from "5 Programming Problems, 1 Hour"
//: Problem 3
// "Write a function that computes the list of the first 100 Fibonacci numbers. By definition, the first two numbers in the Fibonacci sequence are 0 and 1, and each subsequent number is the sum of the previous two. As an example, here are the first 10 Fibonnaci numbers: 0, 1, 1, 2, 3, 5, 8, 13, 21, and 34."
// https://www.shiftedup.com/2015/05/07/five-programming-problems-every-software-engineer-should-be-able-to-solve-in-less-than-1-hour
// Xcode 7.0, Swift 2.0
func fibonacci(count: Int) -> [Double] {
var n1: Double = 0
var n2: Double = 1
@proxpero
proxpero / problem_4_of_5.swift
Last active October 5, 2015 12:43
Solution to problem 4 from "5 Programming Problems, 1 Hour"
//: Problem 4
// "Write a function that given a list of non-negative integers, arranges them such that they form the largest possible number. For example, given [50, 2, 1, 9], the largest formed number is 95021."
// https://www.shiftedup.com/2015/05/07/five-programming-problems-every-software-engineer-should-be-able-to-solve-in-less-than-1-hour
// This solution first finds the permutations of the integers in the given array. A string is made out of the digits of each permutation, the string is converted to an integer, and the maximum of all these integers is returned.
// It is expensive! but it's short and guaranteed to work every time.
// I updated objc.io's permutation snippet to Swift 2.0 and used it in my solution
// https://www.objc.io/blog/2014/12/08/functional-snippet-10-permutations/
@proxpero
proxpero / Matrix.swift
Last active December 17, 2021 04:31
Rotating a matrix 90 degrees in place in Swift
//: Rotate a matrix 90 degrees in place
// "Write a function to rotate an NxN matrix by 90 degrees. You should rotate it in place, meaning you can't use another matrix to perform the rotation, but instead you have to use the same given structure."
// https://www.shiftedup.com/2015/05/10/programming-challenge-rotating-a-matrix-90-degrees-in-place
// This implementation of a matrix is taken from Apple's own.
// https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Subscripts.html
// The extensions are my own.
// Xcode 7.0, Swift 2.0
@proxpero
proxpero / MergingOverlappingIntervals.swift
Last active September 25, 2022 17:06
Merging Overlapping Intervals (`Range<Int>`s) in Swift
//: [Merging Overlapping Intervals](https://www.shiftedup.com/2015/05/17/programming-challenge-merging-overlapping-intervals)
//: Xcode 7.0, Swift 2.0
/*: Given a collection of intervals, write a function that merges all overlapping intervals and prints them out.
For example, given [1, 3], [2, 6], [8, 10], and [7, 11], the function should print [1, 6], [7, 11]. Or given [5, 12], and [8, 10] the function should print [5, 12].
You can assume that the first element of each interval is always less or equal than the second element of the interval.
*/
//: Note: The challenge suggests that each interval is an `Array<Int>` where `interval.count == 2` and `interval[0] <= interval[1]`. In Swift, these intervals should be modeled by the `Range<Int>` type. I am altering the challenge to suit the language, I know. [TKO]
@proxpero
proxpero / SICP_ex_1-11.swift
Last active October 9, 2015 21:27
SICP exercise 1.11 in Swift
//: SICP Exercise 1.11
//: Xcode 7.0, Swift 2.0
//: A function f is defined by the rule that f(n)=n if n<3 and f(n)=f(n−1)+2f(n−2)+3f(n−3) if n≥3. Write a procedure that computes f by means of a recursive process. Write a procedure that computes f by means of an iterative process.
func recursive(n: Int) -> Int {
if n < 3 { return n }
else { return recursive(n-1) + 2 * recursive(n-2) + 3 * recursive(n-3) }
}
for n in (0...10) {
@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
. . .
@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.