TIL 38. CodeKata-Python 3週目コメント


1.🤯 複素数を掛ける


1-1. 質問する


2つの入力は、文字列形式で1つの複素数(複素数)を与えます.複素数はa+bi形式の実数と虚数である.
受け取った2つの数にinputを乗じて返してください.
返される表現も複数形の文字列でなければなりません.
複数定義により、(i^2)は-1なので(i^2)の場合は-1で計算してください.(i * i = -1)
iの2平方(i^2)を平方で表すことはできません.
Input: "1+1i", "1+1i" Output: "0+2i" 
설명: (1 + i) * (1 + i) = 1 + i + i + i^2 = 2i
2i를 복소수 형태로 바꾸면 0+2i
Input: "1+-1i", "1+-1i" Output: "0+-2i"
설명: (1 - i) * (1 - i) = 1 - i - i + i^2 = -2i
-2i를 복소수 형태로 바꾸면 0+-2i.
Input: "1+3i", "1+-2i" Output: "7+1i"
설명: (1 + 3i) * (1 - 2i) = 1 - 2i + 3i -6(i^2) = 1 + i + 6
7+i를 복소수 형태로 바꾸면 7+1i.
  • 世帯
    inputは常にa+bi形式である.outputもa+biの形で現れなければならない.
  • 1-2. に答える

    def complex_number_multiply(a, b):
      a_nums = a[:-1].split("+")
      b_nums = b[:-1].split("+")
      a1 = int(a_nums[0])
      a2 = int(a_nums[1])
      b1 = int(b_nums[0])
      b2 = int(b_nums[1])
    
      x = (a1*b1)-(a2*b2)
      y = (a2*b1)+(a1*b2)
      
      return f'{x}+{y}i'

  • a+bi形態ではaとbをそれぞれ探し出し,整数にする.

  • 最終的に返される複素数をx+y形式とする.

  • (a 1 x b 1)−(a 2 x b 2)はxである.
    a 2とb 2は後ろにiがいる子で、iに-1を乗じる

  • (a 2 x b 1)+(a 1 x b 2)はyである.
    a 2とb 2は後ろのiがつながっている子で、iが乗っている場合ではないので、計算すればいいです.
  • 2.テキストの反転


    2-1. 質問する


    文字で構成された配列をinputで伝える場合は、文字を逆に戻してください.
    新しいシナリオは宣言できません.
    受信したパラメータ配列を変更してください.
    Input: ["h","e","l","l","o"]
    Output: ["o","l","l","e","h"]
    
    Input: ["H","a","n","n","a","h"]
    Output: ["h","a","n","n","a","H"]

    2-2. に答える

    def reverse_string(s):
      return s[::-1]
    # 배열이 아닌 문자열을 그대로 뒤집을때
    def reverse_string(s):
      return "".join(reversed(s))

  • シート増幅(step)を-1としてシーケンスオブジェクトを反転します.

  • 文字列を完全に反転すると、->逆()の逆ループ反復器が返され、joinを使用して各要素がマージされます.
  • 3. 🤯 m xnグリッドでのルーティング


    3-1. 質問する


    パラメータとして正のmxnグリッドを使用します.上から左へ、下から右へ行く道のすべての要素を加える場合は、最小の和を見つけて返します.
    1つのポイントでのみ右または下に移動できます.
    Input: [ [1,3,1], 
    	 [1,5,1],
         	 [4,2,1] ]
    
    Output: 7
    説明:1→3→1→1→1→1→1の和最小

    3-2. に答える

    def min_path_sum(grid):
        n = len(grid[0]) # 가로길이
        m = len(grid)    # 세로길이   
    
        # 첫번째 가로와 첫번째 세로줄을 통해 올때
        for i in range(1, n):
          grid[0][i] += grid[0][i-1]
        for i in range(1, m):
          grid[i][0] += grid[i-1][0]
            
        # 나머지 경우 (안쪽으로 오는 경로)
        for i in range(1, m):
            for j in range(1, n):
                grid[i][j] += min(grid[i-1][j], grid[i][j-1])
    
        return grid[-1][-1]

  • 最初はgrid[0][0]、最後はgrid[1][-1]

  • 通過するすべての要素を追加し、座標を移動します.

  • 移動は右(横)または下(縦)のみです.

  • 一番上の線と一番左の線が最後まで移動すると一方向になり、また和を求めます.

  • 奥に進むと、どの経路を通るかによって最小総和を探します.
  • 4.アレイの後ろに特定の要素を送信


    4-1. 質問する


    指定した数値配列で、0を配列の最後に移動します.元の数字の順番を変えないでください.
    新しいアレイは作成しないでください.
    Input: [0,1,0,3,12]
    Output: [1,3,12,0,0]

    4-2. に答える

    def move_zeroes(nums):
      for i in range(len(nums)):
        if nums[i] == 0:
          nums.append(nums[i])
          nums.remove(nums[i])
      return nums

  • 0を含むインデックスを見つけます.

  • 配列の追加()と削除()
    ->removeは最初の値のみを削除するので可能です.

  • 先に削除するとインデックスが違います.
  • 5.再帰関数によるファクトリの作成


    5-1. 質問する


    再帰実装求実関数を使用してください.工場は1からnまでの整数の積です.
    1! = 1 
    2! = 1 * 2 
    5! = 1 * 2 * 3 * 4 * 5

    5-2. に答える

    def factorial(n):
      if n == 1 or n == 0:
        return 1
      return n * factorial(n-1)

  • 1! レッスン0の値は1です.

  • nが1になるまで関数(factorial(1)を呼び出し続けます.

  • 最後のコールから戻り始め、戻りを開始します.
    注意:符号化スタンプ再帰関数ファクトリ解析