 public extension Array {
     // MARK: - Functions
     
+    /// Simulates the array as a circle. When it is out of range, begins again.
+    ///
+    /// - Parameter index: The index.
+    /// - Returns: Returns the object at a given index.
+    public func circleObject(at index: Int) -> Element {
+        return self[self.superCircle(at: index, size: self.count)]
+    }
+    
+    /// Randomly selects an element from self and returns it.
+    ///
+    /// - returns: An element that was randomly selected from the array.
+    public func random() -> Element {
+        let arrayCount = UInt32(self.count)
+        #if os(Linux)
+            let random = Int(Glibc.random()) % Int(arrayCount)
+            let randomNumber = Int(random)
+            return self[randomNumber]
+        #else
+            let random = arc4random_uniform(arrayCount)
+            let randomNumber = Int(random)
+            return self[randomNumber]
+        #endif
+    }
+    
+    
+    /// Removes the element from self that is passed in.
+    /// 
+    /// - parameter object: The element that is removed from self.
+    public mutating func remove(_ object: Element) {
+        var array: [String] = []
+        for i in self {
+            array.append("\(i)")
+        }
+        let item = array.index(of: "\(object)")
+        if let obj = item {
+            self.remove(at: obj)
+        }
+    }
+    
     /// Get the object at a given index in safe mode (nil if self is empty or out of range).
     ///
     /// - Parameter index: The index.

        } else {
            return nil
        }
    }
    
    /// Simulates the array as a circle. When it is out of range, begins again.
    ///
    /// - Parameter index: The index.
    /// - Returns: Returns the object at a given index.
    public func circleObject(at index: Int) -> Element {
        return self[self.superCircle(at: index, size: self.count)]
    }
    
    /// Get the index as a circle.

        list.shuffle()
        return list
    }
}
