Maybe I’m missing some context, but all that actually should be needed in the top-level else block is ‘gradient[idx]’. Pretty much anything else is going to be longer, harder to read, and less efficient.
Logically this still would be a case/switch though...
There's no need for any conditional construct here whatsoever.
You'll note it has already constructed a string in the right order to do that, but then copped out with the if-else.
(char_at s index) # Get ASCII value at index (0-based) (string_from_char code) # Create string from ASCII value