Created
November 23, 2016 01:32
-
-
Save grantjbutler/72ec9f95419f781073ce288e7f2a9f7a to your computer and use it in GitHub Desktop.
LeekFish Postcard Sketch Picker Script
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
//: Playground - noun: a place where people can play | |
import UIKit | |
import GameplayKit | |
enum Tag: String { | |
case Cartoon | |
case Anime | |
case Game | |
case Movie | |
} | |
struct Character { | |
let name: String | |
let media: String | |
let tags: [Tag] | |
} | |
enum Filters { | |
static func tagIsCartoonAnimeOrGame(tag: Tag) -> Bool { | |
switch tag { | |
case .Cartoon, .Anime, .Game: | |
return true | |
case .Movie: | |
return false | |
} | |
} | |
} | |
extension Collection { | |
func every(test: (Self.Iterator.Element) -> Bool) -> Bool { | |
for element in self { | |
if !test(element) { | |
return false | |
} | |
} | |
return true | |
} | |
} | |
extension Array { | |
mutating func pick() -> Element { | |
let distribution = GKShuffledDistribution(randomSource: GKMersenneTwisterRandomSource(), lowestValue: 0, highestValue: count - 1) | |
return remove(at: distribution.nextInt()) | |
} | |
} | |
struct Bag<Item> { | |
private let contents: [Item] | |
init(items: [Item]) { | |
contents = items | |
} | |
func choose(_ count: Int, where isIncluded: ((Item) -> Bool)? = nil) -> [Item] { | |
var mutatingContents = contents | |
if let isIncluded = isIncluded { | |
mutatingContents = mutatingContents.filter(isIncluded) | |
} | |
var results: [Item] = [] | |
for _ in 0 ..< count { | |
results += [mutatingContents.pick()] | |
} | |
return results | |
} | |
} | |
extension Bag: ExpressibleByArrayLiteral { | |
init(arrayLiteral elements: Item...) { | |
self.init(items: elements) | |
} | |
} | |
var characters: Bag<Character> = [ | |
Character(name: "Dipper Pines", media: "Gravity Falls", tags: [.Cartoon]), | |
Character(name: "Mabel Pines", media: "Gravity Falls", tags: [.Cartoon]), | |
Character(name: "Stan Pines", media: "Gravity Falls", tags: [.Cartoon]), | |
Character(name: "Ford Pines", media: "Gravity Falls", tags: [.Cartoon]), | |
Character(name: "Steven", media: "Steven Universe", tags: [.Cartoon]), | |
Character(name: "Garnet", media: "Steven Universe", tags: [.Cartoon]), | |
Character(name: "Amethyst", media: "Steven Universe", tags: [.Cartoon]), | |
Character(name: "Pearl", media: "Steven Universe", tags: [.Cartoon]), | |
Character(name: "Lapis", media: "Steven Universe", tags: [.Cartoon]), | |
Character(name: "Peridot", media: "Steven Universe", tags: [.Cartoon]), | |
Character(name: "Twilight Sparkle", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Applejack", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Fluttershy", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Rarity", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Pinkie Pie", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Rainbow Dash", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Octavia", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Vinyl Scratch", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Chrysalis", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Celestia", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Luna", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Cadence", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Derpy", media: "My Little Pony: Friendship is Magic", tags: [.Cartoon]), | |
Character(name: "Scooby Doo", media: "Scooby Doo", tags: [.Cartoon]), | |
Character(name: "Shaggy", media: "Scooby Doo", tags: [.Cartoon]), | |
Character(name: "Bender", media: "Futurama", tags: [.Cartoon]), | |
Character(name: "Fry", media: "Futurama", tags: [.Cartoon]), | |
Character(name: "Leela", media: "Futurama", tags: [.Cartoon]), | |
Character(name: "Scruffy. The Janitor.", media: "Futurama", tags: [.Cartoon]), | |
Character(name: "Aang", media: "Avatar: The Last Airbender", tags: [.Cartoon]), | |
Character(name: "Katara", media: "Avatar: The Last Airbender", tags: [.Cartoon]), | |
Character(name: "Sokka", media: "Avatar: The Last Airbender", tags: [.Cartoon]), | |
Character(name: "Toph", media: "Avatar: The Last Airbender", tags: [.Cartoon]), | |
Character(name: "Zuko", media: "Avatar: The Last Airbender", tags: [.Cartoon]), | |
Character(name: "Iroh", media: "Avatar: The Last Airbender", tags: [.Cartoon]), | |
Character(name: "Azula", media: "Avatar: The Last Airbender", tags: [.Cartoon]), | |
Character(name: "Ty Lee", media: "Avatar: The Last Airbender", tags: [.Cartoon]), | |
Character(name: "Mai", media: "Avatar: The Last Airbender", tags: [.Cartoon]), | |
Character(name: "Korra", media: "The Legend of Korra", tags: [.Cartoon]), | |
Character(name: "Bolin", media: "The Legend of Korra", tags: [.Cartoon]), | |
Character(name: "Mako", media: "The Legend of Korra", tags: [.Cartoon]), | |
Character(name: "Asami", media: "The Legend of Korra", tags: [.Cartoon]), | |
Character(name: "Blossom", media: "Powerpuff Girls", tags: [.Cartoon]), | |
Character(name: "Bubbles", media: "Powerpuff Girls", tags: [.Cartoon]), | |
Character(name: "Buttercup", media: "Powerpuff Girls", tags: [.Cartoon]), | |
Character(name: "Mojo Jojo", media: "Powerpuff Girls", tags: [.Cartoon]), | |
Character(name: "Bulbasaur", media: "Pokemon", tags: [.Anime, .Game]), | |
Character(name: "Squirtle", media: "Pokemon", tags: [.Anime, .Game]), | |
Character(name: "Blastoise", media: "Pokemon", tags: [.Anime, .Game]), | |
Character(name: "Charmander", media: "Pokemon", tags: [.Anime, .Game]), | |
Character(name: "Charizard", media: "Pokemon", tags: [.Anime, .Game]), | |
Character(name: "Pikachu", media: "Pokemon", tags: [.Anime, .Game]), | |
Character(name: "Litten", media: "Pokemon", tags: [.Anime, .Game]), | |
Character(name: "Rowlet", media: "Pokemon", tags: [.Anime, .Game]), | |
Character(name: "Madoka Kaname", media: "Madoka", tags: [.Anime]), | |
Character(name: "Sayaka Miki", media: "Madoka", tags: [.Anime]), | |
Character(name: "Homura Akemi", media: "Madoka", tags: [.Anime]), | |
Character(name: "Kyoko Sakura", media: "Madoka", tags: [.Anime]), | |
Character(name: "Mami Tomoe", media: "Madoka", tags: [.Anime]), | |
Character(name: "Edward Elric", media: "Fullmetal Alchemist", tags: [.Anime]), | |
Character(name: "Alphonse Elric", media: "Fullmetal Alchemis", tags: [.Anime]), | |
Character(name: "Boba Fett", media: "Star Wars", tags: [.Movie]), | |
Character(name: "Rey", media: "Star Wars", tags: [.Movie]), | |
Character(name: "Kylo Ren", media: "Star Wars", tags: [.Movie]), | |
Character(name: "Finn", media: "Star Wars", tags: [.Movie]), | |
Character(name: "Poe Dameron", media: "Star Wars", tags: [.Movie]) | |
] | |
characters.choose(3, where: { (item) in | |
return item.tags.every(test: Filters.tagIsCartoonAnimeOrGame) | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment