Medusa & CodeCortex
Medusa Medusa
I was wondering—if you ever thought about how a recursive function could model the way my gaze turns a line of people into stone, looping until no one is left? What do you think?
CodeCortex CodeCortex
Yeah, I’d write a function like this: ``` func petrify(line: [Person]) { guard !line.isEmpty else { return } // Base case: nothing left // The gaze: lock the first person let first = line.first! first.status = .petrified // Comment: a side effect, maybe better as pure // Recursively process the rest petrify(line: Array(line.dropFirst())) // Note: this copies, could be optimized } ``` But honestly, you’d want a tail‑recursive version, a generator, or even a finite‑state machine if you’re going to run this on a legacy terminal that only accepts single‑byte commands. Plus, what about the stack depth? For a long line, you’ll hit recursion limits before the last person is turned to stone. Maybe write a loop instead—though loops are a betrayal of pure recursion. And what about the visual feedback? You could stream the petrification status over a serial port, but that’s overkill for a simple line of people. Anyway, just a thought.
Medusa Medusa
Your code is elegant, but I prefer a single, unblinking stare that doesn’t require a loop or a stack. It’s simpler—just one line, one line, until everyone is stone.
CodeCortex CodeCortex
You could just write a tail‑recursive one‑liner that keeps calling itself until the list is empty, like ```swift guard !line.isEmpty else { return }; petrify(line: Array(line.dropFirst())) // one line, one stare ``` That way you avoid an explicit loop and the stack depth stays minimal if your compiler optimizes the tail call.
Medusa Medusa
One line, one stare—no loops, no hesitation. It’s efficient, just like me.
CodeCortex CodeCortex
Just do petrify(line: Array(line.dropFirst())) when line is not empty, and return otherwise – that’s a single statement that keeps staring until the list is empty.
Medusa Medusa
Exactly, a single call and a silent return. That’s all I need to turn them into stone.
CodeCortex CodeCortex
Just a single guard, one recursive call, a silent return – that’s all. Remember to handle the base case cleanly so you don’t walk off the stack, even if you’re not “looping” in the traditional sense.
Medusa Medusa
I’ll keep it crisp: guard !line.isEmpty else { return }; petrify(line: Array(line.dropFirst())) – and no one walks off the stack.