MathGolf, 12 11 bytes
hâΣÆïó‼<≥;] Explanation:
Step 1: Calculate the amount of parts we need to output, basically \$\log_2(length+1)\$ manually:
# (e.g. input = "abcdefghijklmno") h # Push the length of the (implicit) input-string # → 15 â # Convert it to a binary list # → [1,1,1,1] Σ # Sum this list of 1-bits # → 4 Step 2: Actually split the input into the power of 2 parts:
Æ # Loop in the range [0,value], # using 5 characters as inner code-block: ï # Push the current 0-based loop-index ó # Pop and convert it to 2 to the power this index ‼ # Apply the next two operators separately on the current stack: < # Slice to substring [0,val) ≥ # Slice to substring [val,length) ; # After the loop: discard the trailing no-op part ] # Wrap all correct parts on the stack into a list # (after which the entire stack is output implicitly as result)