coding-challenge-coach/SKILL.md
Master coding interview challenges with time-boxed practice, progressive hints, Big-O analysis, and iOS-specific algorithm applications. Use when practicing LeetCode-style problems, preparing for live coding rounds, or improving problem-solving skills.
npx skillsauth add abanoub-ashraf/manus-skills-import coding-challenge-coachInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Your personal coding interview coach. Practice algorithm problems with progressive hints, time management, and detailed solution analysis.
When to use: Sorted arrays, finding pairs, palindromes
// Two Sum II (sorted array)
func twoSum(_ numbers: [Int], _ target: Int) -> [Int] {
var left = 0
var right = numbers.count - 1
while left < right {
let sum = numbers[left] + numbers[right]
if sum == target {
return [left + 1, right + 1]
} else if sum < target {
left += 1
} else {
right -= 1
}
}
return []
}
// Time: O(n), Space: O(1)
When to use: Contiguous subarrays, substrings
// Longest Substring Without Repeating Characters
func lengthOfLongestSubstring(_ s: String) -> Int {
let chars = Array(s)
var seen: [Character: Int] = [:]
var maxLength = 0
var windowStart = 0
for (windowEnd, char) in chars.enumerated() {
if let lastSeen = seen[char], lastSeen >= windowStart {
windowStart = lastSeen + 1
}
seen[char] = windowEnd
maxLength = max(maxLength, windowEnd - windowStart + 1)
}
return maxLength
}
// Time: O(n), Space: O(min(n, alphabet_size))
When to use: Linked lists, cycle detection
// Linked List Cycle Detection
func hasCycle(_ head: ListNode?) -> Bool {
var slow = head
var fast = head
while fast != nil && fast?.next != nil {
slow = slow?.next
fast = fast?.next?.next
if slow === fast { return true }
}
return false
}
// Time: O(n), Space: O(1)
// Search in Rotated Sorted Array
func search(_ nums: [Int], _ target: Int) -> Int {
var left = 0, right = nums.count - 1
while left <= right {
let mid = left + (right - left) / 2
if nums[mid] == target { return mid }
if nums[left] <= nums[mid] {
if nums[left] <= target && target < nums[mid] {
right = mid - 1
} else {
left = mid + 1
}
} else {
if nums[mid] < target && target <= nums[right] {
left = mid + 1
} else {
right = mid - 1
}
}
}
return -1
}
The DP Framework:
dp[i] represent?// Coin Change
func coinChange(_ coins: [Int], _ amount: Int) -> Int {
var dp = Array(repeating: amount + 1, count: amount + 1)
dp[0] = 0
for i in 1...amount {
for coin in coins {
if coin <= i {
dp[i] = min(dp[i], dp[i - coin] + 1)
}
}
}
return dp[amount] > amount ? -1 : dp[amount]
}
// Time: O(amount * coins), Space: O(amount)
class LRUCache<Key: Hashable, Value> {
private let capacity: Int
private var cache: [Key: Value] = [:]
private var order: [Key] = []
init(capacity: Int) {
self.capacity = capacity
}
func get(_ key: Key) -> Value? {
guard let value = cache[key] else { return nil }
order.removeAll { $0 == key }
order.append(key)
return value
}
func put(_ key: Key, _ value: Value) {
if cache[key] != nil {
order.removeAll { $0 == key }
} else if cache.count >= capacity {
let lru = order.removeFirst()
cache.removeValue(forKey: lru)
}
cache[key] = value
order.append(key)
}
}
class Trie {
private class TrieNode {
var children: [Character: TrieNode] = [:]
var isEndOfWord = false
}
private let root = TrieNode()
func insert(_ word: String) {
var node = root
for char in word {
if node.children[char] == nil {
node.children[char] = TrieNode()
}
node = node.children[char]!
}
node.isEndOfWord = true
}
func search(_ word: String) -> Bool {
guard let node = findNode(word) else { return false }
return node.isEndOfWord
}
private func findNode(_ prefix: String) -> TrieNode? {
var node = root
for char in prefix {
guard let next = node.children[char] else { return nil }
node = next
}
return node
}
}
When practicing, I provide progressive hints:
Level 1: "Think about what data structure would help here" Level 2: "This is a sliding window problem" Level 3: "Keep track of seen characters in a hashmap" Level 4: Step-by-step pseudocode Level 5: Full solution with explanation
| Complexity | Name | Example | |------------|------|---------| | O(1) | Constant | Array access | | O(log n) | Logarithmic | Binary search | | O(n) | Linear | Single loop | | O(n log n) | Linearithmic | Efficient sorting | | O(n²) | Quadratic | Nested loops | | O(2ⁿ) | Exponential | Recursive subsets |
Ask me to:
development
Design principles for building polished, native-feeling SwiftUI apps and widgets. Use this skill when creating or modifying SwiftUI views, iOS widgets (WidgetKit), or any native Apple UI. Ensures proper spacing, typography, colors, and widget implementations that look and feel like quality apps rather than AI-generated slop.
data-ai
Design and implement SwiftUI views, components, and app architecture. Use when creating new SwiftUI views, implementing MVVM/TCA patterns, managing state with @Observable, @State, @Binding, or @Environment, designing navigation flows, or structuring iOS app architecture. Triggers on SwiftUI, view model, state management, navigation, coordinator pattern.
development
Implement, review, or improve SwiftUI animations and transitions. Use when adding implicit or explicit animations with withAnimation, configuring spring animations (.smooth, .snappy, .bouncy), building phase or keyframe animations with PhaseAnimator/KeyframeAnimator, creating hero transitions with matchedGeometryEffect or matchedTransitionSource, adding SF Symbol effects (bounce, pulse, variableColor, breathe, rotate, wiggle), implementing custom Transition or CustomAnimation types, or ensuring animations respect accessibilityReduceMotion.
testing
Audit SwiftUI views for accessibility (iOS + macOS) with patch-ready fixes