Sort three variables: Difference between revisions

Added solution for EDSAC.
(Added a FALSE solution)
(Added solution for EDSAC.)
Line 903:
BEFORE: x=[lions, tigers, and]; y=[bears, oh my!]; z=[(from the "Wizard of OZ")]
AFTER: x=[(from the "Wizard of OZ")]; y=[bears, oh my!]; z=[lions, tigers, and]</pre>
 
=={{header|EDSAC order code}}==
<lang edsac>
[Sort three variables, for Rosetta Code.
EDSAC, Initial Orders 2]
[---------------------------------------------------------------------------
Sorts three 35-bit variables x, y, x, stored at 0#V, 2#V, 4#V respectively.
Uses the algortihm:
if x > z then swap( x,z)
if y > z then swap( y,z)
if x > y then swap( x,y)
At most two swaps are carried out in any particular case.
----------------------------------------------------------------------------]
[Arrange the storage]
T47K P96F [M parameter: main routine]
T55K P128F [V parameter: variables to be sorted]
 
[Compressed form of library subroutine R2.
Reads integers at load time and is then overwritten.]
GKT20FVDL8FA40DUDTFI40FA40FS39FG@S2FG23FA5@T5@E4@E13Z
T#V [tell R2 where to store integers]
[EDIT: List of 35-bit integers separated by 'F', list terminated by '#TZ'.]
987654321F500000000F123456789#TZ
 
[Main routine]
E25K TM GK
[0] A4#V S#V [accumulator := z - x]
E8@ [skip the swap if x <= z]
TD [0D := z - x]
A#V U4#V [z := x]
AD [acc := old z]
T#V [x := old z]
[8] TF [clear acc]
A4#V S2#V [acc := z - y]
E17@ [skip the swap if y <= z]
TD [0D := z - y]
A2#V U4#V [z := y]
AD [acc := old z]
T2#V [y := old z]
[17] TF [clear acc]
A2#V S#V [acc := y - x]
E26@ [skip the swap if x <= y]
TD [0D := y - x]
A#V U2#V [y := x]
AD [acc := old y]
T#V [x := old y]
[26] ZF [halt the machine]
EZ [define entry point]
PF [acc = 0 on entry]
[end]
</lang>
 
=={{header|Elena}}==
113

edits