中央値の 2 倍と 3 つの異なる入力の最小値との差を効率的に見つける LMC プログラムを作成したいと考えています。このためのアルゴリズムを理解するのに助けが必要です。
これが私がこれまでに持っているものです:
INPUT 901 - Input first
STO 399 - Store in 99 (a)
INPUT 901 - Input second
STO 398 - Store in 98 (b)
INPUT 901 - Input third
STO 397 - Store in 97 (c)
LOAD 597 - Load 97 (a)
SUB 298 - Subtract 97 - 98 (a - b)
BRP 8xx - If value positive go to xx (if value is positive a > b else b > a)
LOAD 598 - Load 98 (b)
SUB 299 - Subtract 98 - 99 (b - c)
BRP 8xx - If value positive go to xx (if value is positive b > c else c > b)
LOAD 598 - Load 98 (b) which is the median
ADD 198 - Double to get "twice the median"
スニペットの最後で、どの入力が最小であるかがわからず、入力が既にソートされていると想定していたことに気付きました (ソートされていません)。
これを効率的に実行し、同じブランチ内の最小の入力と中央値を決定するには、何らかの方法で入力を最小から最大に並べ替える必要があると思います。