Max【NandGame編】
Maxレベル
Maxレベルのゴールは、2つの入力値(16ビット)のうち最大値(ここでは2つの値を比較するので大きい値)を出力する回路を組むことです。
Maxレベルを解く
1:InputとOutputを端子を見ると、select 16コンポーネントで振り分けるのが自然な発想といえます。
どう振り分けるのかはまだなので、sピンは未接続です。
2:振り分けを実現する回路を考察します。
[1]「入力値Aの方が大きい」⇒「select 16コンポーネントのsピンに0を与える」
[2]「入力値Bの方が大きい」⇒「select 16コンポーネントのsピンに1を与える」
※A=Bのときは、どちらを出力しても問題ありません。
2つの数の大小比較であれば、素朴に差(ここではA-Bとする)を取るのがもっともシンプルです。
[1]「入力値Aの方が大きい」⇒「差>0」⇒「ここをどうするか??」⇒「select 16コンポーネントのsピンに0を与える」
[2]「入力値Bの方が大きい」⇒「差<0」⇒「ここをどうするか??」⇒「select 16コンポーネントのsピンに1を与える」
差についてはsub 16コンポーネントが用意されているので、そのまま使うだけです。
「ここをどうするか??」の部分を実現するのかを考えます。
入力が負の数のときに出力が1、入力が正の数のときに出力が0であるような回路を作ればよいのです。
実際のところ回路を実装するまでもなく、is negコンポーネントを使えばよいだけです。
以上を踏まえて、ステップ1の回路に組み込むと次のようになります。