>>832 Pharo/Squeak Smalltalk

| fn |
fn := [:arr |
| sortedOdds |
sortedOdds := (arr select: #odd) sort readStream.
arr collect: [:x | x odd ifTrue: [sortedOdds next] ifFalse: [x]]
].

fn value: #(6 5 4 3 2 1) "=> #(6 1 4 3 2 5) "


>>835

| fn |
fn := [:arr |
| sortedOdds sortedHalfEvens |
sortedOdds := (arr select: #odd) sort readStream.
sortedHalfEvens := ((arr select: #even) sort reversed / 2) readStream.
arr collect: [:x | x odd ifTrue: [sortedOdds next] ifFalse: [sortedHalfEvens next]]
].

fn value: #(0 9 8 4 6 5 1 2 7 3) "=> #(4 1 3 2 1 3 5 0 7 9) "