当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。

Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。

広告配信等の詳細については、プライバシーポリシーページに掲載しています。

消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題のある表現がありましたら、問い合わせページよりご連絡ください。

参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

Arithmetic EngineとComponent Factory【Turing Complete編】

はじめに

いつもブログをご覧いただきありがとうございます。

FIRE生活中のIPUSIRONです😀

IPUSIRONのプロフィールを見る

Arithmetic Engineステージ

Arithmetic Engineステージのゴールは、ALU(演算装置)を組むことです。

入力・CODE:8ビット。演算の内容をビット列で指示する。
0000 0000bならOR
0000 0001bならNAND
0000 0010bならNOR
0000 0011bならAND
0000 0100bならADD
0000 0101bならSUB
それ以外はなし。
・Input 1:8ビット。演算対象。
・Input 2:8ビット。演算対象。
出力・Ouput:8ビット
Arithmetic Engine回路の入出力

Arithmetic Engineステージを解く

1:回路の設計方針を検討する

Logic Engine回路が引き継がれて表示されますので、これをベースに作ることにします。

Logic Engine回路ではOR、NAND、NOR、ANDといった4つのビット演算をサポートしていました。一方、今回のArithmetic Engine回路では、ADD、SUBといった演算が追加されます。

演算に対応するCODEについては、0~3まで共通です。

よって、8ビットデコーダーの4番目のワイヤーにADD演算回路、5番目のワイヤーにSUB演算回路をつなげればよいとわかります。

2:3桁のCODEに対応する

CODEの最大値が0000 0101bなので、3桁目(4の位)まで使います。

これに対応させるために、Byte Splitterコンポーネントと8 Bit decoderコンポーネント間に1本のワイヤーを追加します。

3:ADD演算を実装する

2つの1バイトデータを加算するには、(1バイトの入力を想定した)Addコンポーネントを使えばよさそうです。

出力は1バイトであり、桁上がり分を処理しようがないので、桁上がりが起きても捨てることにします。

ADD演算の仕組みを内蔵すると、次のようになります。

4:SUB演算を実装する

Input 1のデータからInput 2のデータを引く処理になります。

言い換えれば、Input 1のデータに「Input 2の反転データ」を足す処理になります。

1バイトデータを反転させるには、Negateコンポーネントを使えます。

なお、Negateコンポーネントの内部処理については、以下の記事を参考にしてください。

以上を踏まえて、SUB演算回路を追加すると、次のようになります。

5:テストする

クリアすると、ALUコンポーネントがアンロックされます。

Component Factoryステージ

自由に回路を作れるサンドボックス的なステージです。

作った回路は、以降のステージでCUSTOMからコンポーネントとして呼び出せます。

解くべき回路はなく、開くだけでクリア扱いになり、次に進めます。