Largest int from concatenated ints: Difference between revisions

Line 2,381:
(1 34 3 98 9 76 45 4)
) do:[:ints |
|resultString|
"sort by padded strings (sort a copy - literals are immudatble)"
 
concatString :=
"sort ints by padded strings (sort a copy - literals are immudatble)",
then collect their strings, then concatenate"
resultString :=
((ints copy sort:[:a :b |
|pad|
pad := (a integerLog10) max:(b integerLog10).
(a printString paddedTo:pad with:$0) > (b printString paddedTo:pad with:$0)])
collect:#printString) asStringWith:''.
Stdout printCR:concatString resultString.
].</lang>
alternative: sort by concatenated pair's strings:
Line 2,395 ⟶ 2,398:
(1 34 3 98 9 76 45 4)
) do:[:ints |
|resultString|
"sort by concatenated pairs (sort a copy - literals are immudatble)"
 
concatString :=
resultString :=
((ints copy sort:[:a :b |
(a printString,b printString) > (b printString,a printString)])
collect:#printString) asStringWith:''.
Stdout printCR:concatString resultString.
].</lang>
no need to collect the resultString; print the sorted list as well (if printing is all we want):
<lang smalltalk>#(
(54 546 548 60)
(1 34 3 98 9 76 45 4)
) do:[:ints |
(ints copy sort:[:a :b |
(a printString,b printString) > (b printString,a printString)])
do:[:eachNr | eachNr printOn:Stdout].
Stdout cr.
]</lang>
{{out}}
<pre>6054854654
Anonymous user