2023-10: Partition with a Twist
Splitting delimited data into sub-arrays using partitioning on a delimiter character (or characters) is a fairly common operation in APL. For instance, if you partition the character vector 'this is an example' on each occurrence of the space character, there would be 4 sub-arrays: 'this' 'is' 'an' 'example'. This problem adds a slight twist to the operation in that the left argument indicates how many sub-arrays to return.
Write a function that:
- takes a non-negative integer left argument, N
- takes a space-delimited character vector right argument, string
- returns an array of length N where:
- if N is less than or equal to the number of sub-arrays in string, the first N-1 elements of the result are the first N-1 space-delimited partitions in string.
The Nth element of the result is the remaining portion of string. - if N is greater than the number of sub-arrays, pad the result with as many empty arrays as necessary to achieve length N.
- if N is less than or equal to the number of sub-arrays in string, the first N-1 elements of the result are the first N-1 space-delimited partitions in string.
Note: Each space in string be considered as a delimiter. This means that leading, trailing, or contiguous spaces are potentially significant.
Hint: The partitioned enclose function ⊂ could be helpful in solving this problem.
Examples:
1 (your_function) 'this is a sample' ┌────────────────┐ │this is a sample│ └────────────────┘ 2 (your_function) 'this is a sample' ┌────┬───────────┐ │this│is a sample│ └────┴───────────┘ 4 (your_function) 'this is a sample' ┌────┬──┬─┬──────┐ │this│is│a│sample│ └────┴──┴─┴──────┘ ⍴¨4 (your_function) 'this is a sample' ⍝ each sub-array is a vector ┌─┬─┬─┬─┐ │4│2│1│6│ └─┴─┴─┴─┘ 13 (your_function) ' this is a sample ' ⍝ note the leading, trailing, and multiple interior spaces ┌┬┬────┬┬──┬┬─┬──────┬┬┬┬┬┐ │││this││is││a│sample││││││ └┴┴────┴┴──┴┴─┴──────┴┴┴┴┴┘ 0 (your_function) 'this is a sample' ⍝ returns an empty vector 4 (your_function) '' ┌┬┬┬┐ │││││ └┴┴┴┘
your_function ←
Solutions

