Question: Say I have text like this (each word on one line, with no spaces)

```
Programming
Puzzles
&
Code
Golf

```

That makes no sense! It totally defies the laws of physics.

Your challenge is to remedy this impossible situation and collapse the text like so:

```
P
Prog
&uzz
Coderam
Golflesming

```

So that there is no empty space underneath any character but the characters retain their vertical order.

The goal is to satisfy the requirements but use the fewest bytes of source code possible.

Answer: 
Matlab / Octave, 99 bytes
-------------------------

```
function f(s)
c=char(strsplit(s,[10 '']));[~,i]=sort(c>32);[m,n]=size(c);c(i+repmat((0:n-1)*m,m,1))

```

**Example**:

Define an input string in a variable, say `s`. `10` is the line feed character:

```
>> s = ['Programming' 10 'Puzzles' 10 '&' 10 'Code' 10 'Golf'];

```

Call function `f` with input `s`: 

```
>> f(s)
ans =
P          
Prog       
&uzz       
Coderam    
Golflesming

```

Or [**try it online**](http://ideone.com/XzvAoZ) (thanks to [@beaker](https://codegolf.stackexchange.com/users/42892/beaker) for help with the online Octave interpreter)
[APL (Dyalog Extended)](https://github.com/abrudz/dyalog-apl-extended), ~~13~~ 11 [bytes](https://codegolf.meta.stackexchange.com/a/9429/43319 "When can APL characters be counted as 1 byte each?")[SBCS](https://github.com/abrudz/SBCS ".dyalog files using a single byte character set")
============================================================================================================================================================================================================================================================================================

-2 with my extensions to Dyalog APL.

Anonymous tacit function, taking and returning a character matrix.

```apl
~∘' '⍤1⍢⍉⍢⊖

```

[Try it online!](https://tio.run/##SyzI0U2pTMzJT9dNrShJzUtJTfn/v@5Rxwx1BfVHvUsMH/UuetTbCSK7pv1Pe9Q24VFv36O@qZ7@j7qaD603ftQ2EcgLDnIGkiEensH/0xSAQuoBRfnpRYm5uZl56UBzAkqrqnJSi4EsNSB2zk9JBVLu@Tlp6gA "APL (Dyalog Extended) – Try It Online")

`~` remove  

`∘` the  

`' '` spaces  

`⍤` from  

`1` rows (lit. 1D sub-arrays)  

`⍢` while  

`⍉` transposed  

`⍢` while  

`⊖` flipped