第79回【JavaScript】NAND 演算の基本、NOR 演算の基本、XNOR 演算の基本

現在取り組んでいるのは、paiza ラーニング問題集「論理演算メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 79 回目です。

詳しくないお客様に、どうやって伝えれば良いか。いつも頭を抱える問題です。時間をかけてゆっくり伝えればなんとかなりそうですが、そんなにのんびり時間があることの方が珍しい。図にしたものを用意したり、身振り手振りで表現したり、「なんとなく・・・わー・・・かりました」。多分、これ、わかってないやつ。

それでは、今日も頑張ってみようと思います。

NAND 演算の基本 (paizaランク D 相当)

0 または 1 の整数 A と B が与えられます。 A NAND B の結果を出力してください。
ここで、 NAND 演算とは、以下の表にしたがって算出する論理演算のことを指します。
入力1 入力2 出力
0 0 1
0 1 1
1 0 1
1 1 0


入力される値

A B

入力値最終行の末尾に改行が1つ入ります。


期待する出力

A NAND B の結果を 0 または 1 で出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ A, B は 0 または 1


入力例

0 0

出力例

1

NAND の意味がわかっていれば、これまでの応用で解ける。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const [a,b] = lines[0].split(/\s/).map(Number);
  console.log(Number(!(a & b)));
});
Python
A,B = map(int,input().split())
print(int(not(A and B)))

NOR 演算の基本 (paizaランク D 相当)

0 または 1 の整数 A と B が与えられます。 A NOR B の結果を出力してください。
ここで、 NOR 演算とは、以下の表にしたがって算出する論理演算のことを指します。

入力1入力2出力
001
010
100
110

入力される値

A B

入力値最終行の末尾に改行が1つ入ります。


期待する出力

A NOR B の結果を 0 または 1 で出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ A, B は 0 または 1


入力例

0 0

出力例

1

こちらも、NOR の意味が理解できていれば解ける問題。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const [a,b] = lines[0].split(/\s/).map(Number);
  console.log(Number(!(a || b)));
});
Python
A,B = map(int,input().split())
print(int(not(A or B)))

XNOR 演算の基本 (paizaランク D 相当)

0 または 1 の整数 A と B が与えられます。 A XNOR B の結果を出力してください。 ここで、 XNOR 演算とは、以下の表にしたがって算出する論理演算のことを指します。

入力1入力2出力
001
010
100
111

入力される値

A B

入力値最終行の末尾に改行が1つ入ります。


期待する出力

A XNOR B の結果を 0 または 1 で出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ A, B は 0 または 1


入力例

0 0

出力例

1

XNOR は、排他的論理和の NOT ってわかれば簡単。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const [a,b] = lines[0].split(/\s/).map(Number);
  console.log(Number(!(a ^ b)));
});
Python
A,B = map(int,input().split())
print(int(not(A ^ B)))

最後に

NAND や NOR や XNOR がどういう意味か分かっていれば簡単なんだけれど、あまり勉強する機会はないかもしれない。学校でやったっけ? あまり記憶にないなぁ。

真理値表は書いた記憶があるから、やったんだろうけれど、本格的に理解を深めたのはこういうことを始めてからだった気がします。

引き続き、よろしくお願いいたします!

Python の第79回はこちら