Condition 6
レベル
Conditions
取得条件
Complete the level called "Conditions" using only 6 blue components
レベル "Conditions" を 6 つの青いコンポーネントのみを用いてクリアする
攻略
数値入力が以下の条件を満たしたとき、出力が True となるように組みます。
条件入力は 8 bit (1 Byte) のうち、下位 3 bit のみ用いられます。
便宜上、ここではこの 3 bit を左から C2, C1, C0 と呼ぶことにします。
FFF 常に False
FFT 数値 $ = 0 のとき True
FTF 数値 $ < 0 のとき True
FTT 数値 $ \le 0 のとき True
TFF 常に True
TFT 数値 $ \ne 0 のとき True
TTF 数値 $ \ge 0 のとき True
TTT 数値 $ > 0 のとき True
この表をよく見ると、C2 が True の各条件は C2 が False のときの各条件とちょうど反転していることがわかります。
そのため、出力の直前でそこまでの結果と C2 で XOR をかけると反転できます。
これで組む必要があるのは半分になりました。
以降は C2 が False の場合で進めます。
次に、C1 について見ていきましょう。
C1 が True の場合には 0 を含むかの差異はあれど 0 より数値が小さいかを判断しています。
数値入力の最上位 bit (-128) が True であれば負の値となります。
よって、C1 と数値入力の最上位 bit で AND をとることで負の値であるかが分かります。
最後に、C0 に着目します。
C0 が False のときは 0 を含まず、True のときは 0 を含んでいることがわかります。
0 であるかどうかは数値の全ての bit が False であることで判断できます。
数値入力の全てのビットをケーブルで繋ぐことでコンポーネントを使わずに OR が実装できますが、前述したように最上位 bit は別の条件に使用しているため他の bit と混ざってはいけません。
そのため、ここでは OR コンポーネントを 1 つだけ使用し混ざらないように OR をかけます。
ですが実際に欲しい条件は、全ての bit が False かつ C0 が True なので OR コンポーネントのかわりに NOR コンポーネントを使用します。
C1 と C0 の AND をケーブルで直接結線して OR 回路を構成し、C2 に接続した XOR を挟んで出力すればコンポーネントを 6 つに抑えた回路が完成します。
https://scrapbox.io/files/6241097d200228001d025419.png