コンテンツにスキップ

025: 「左に寄せれば二倍になる」の解答

問題 / ヒント

難易度:

方針

入力は Read 31 で31番地に置きます。 Shift はAccumulatorだけを変えるので、先に Load 31 でAccumulatorへ読み込みます。 出力する前に Store 31 で結果をメモリへ戻します。

実装

def double_program():
    lines = [
        "Read 31",
        "Load 31",
        "Shift 1",
        "Store 31",
        "Write 31",
        "Stop",
    ]
    program = []
    for line in lines:
        program.append(assemble_line(line))
    return program

確認

assert run(double_program(), [21]) == [42]
assert run(double_program(), [-3]) == [-6]

発展

Shift 2 は2ビット左シフトです。 Python整数では、これは4倍と同じ結果になります。