Code Kata - 10


今日のコードディレクトリがうまく方法をまとめることができれば、実現には大きな困難はありません.
しかし、コンピューターのような事故で問題に近づき、解決するのは容易ではない.

? Question


2つの入力は、文字列形式で1つの複素数(複素数)を与えます.複素数はa+bi形式の実数と虚数である.受け取った2つの数にinputを乗じて返してください.
返される表現も複数形の文字列でなければなりません.
複数定義により、(i^2)は-1なので(i^2)の場合は-1で計算してください.
(二乗表示がないので、iの2二乗は(i^2)となります.)
Input: "1+1i", "1+1i"
Output: "0+2i"

Input: "1+-1i", "1+-1i"
Output: "0+-2i

Input: "1+3i", "1+-2i"
Output: "7+1i"

! Answer


最初はsplit()メソッドを用いて,「+」を基準として入力を[1,1 i]に分割しようとした.その後、各要素に乗算された値を繰り返し文で配列に抽出しようとしました.問題は、文字iが数値タイプではないため、演算できません.
そのため、よく考えてみると、以下の解決策が可能だと思います.
  • は、まず文字列からiを削除する.
  • 以降、"+"を基準として、文字列split()が作成される.
  • パラメータaおよびbから抽出された2文字列の値は、位置に乗じて加算される.
  • 最後にiを貼り付けます.
  • 上記の方法が可能であるのは,最終的な結果値が複素形式(a+bi)であるためである.
    (数字に乗じる)および(iiを乗じる)は、aの位置(数字にiを乗じる)がbに到達しなければならない位置であるからである.
    上記のように実現されるコードは以下の通りである.
    const complexNumberMultiply = (a, b) => {
      const numA = a.substring(0, a.length-1).split('+');
      const numB = b.substring(0, b.length-1).split('+');
      
      return `${numA[0]*numB[0]+(numA[1]*numB[1]*-1)}+${numA[0]*numB[1]+numA[1]*numB[0]}i`;
    }
    aとbを格納するために新しい変数を宣言し、それぞれ追加して結果を返すことができますが、backtic(`)を使用しました.backticはstring内部で変数を使用できるためです.
    文字と数字、stringとnumberは実生活で区別しやすいが、本当にコンピューターの世界に来たら、また違った存在だと改めて感じる.各要素のタイプを覚え、問題に近づくことは、計算思考の一歩です.