[codekata]



codekata week3 day4
指定した数値配列で、0を配列の最後に移動します.元の数字の順番を変えないでください.
新しいアレイは作成しないでください.
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
def move_zeroes(nums):
  length = len(nums)
  num = 0
  while num < length:
    if nums[num] == 0:
      nums.append(0)
      nums.remove(0)
    num += 1
  return nums
codekata week3 day1
2つの入力は、文字列形式で1つの複素数(複素数)を与えます.複素数はa+bi形式の実数と虚数である.
受け取った2つの数にinputを乗じて返してください.返される表現も複数形の文字列でなければなりません.
複数定義により、(i^2)は-1なので(i^2)の場合は-1で計算してください.
iの2平方(i^2)を平方で表すことはできません.

  • 例1:
    Input:「1+1 i」,「1+1 i」出力:「0+2 i」説明:(1+i)*(1+i)=1+i+i^2=2 i 2 i 2 iが複数形に変換された場合は0+2 iとなる.

  • 例2:
    Input:「1+-1 i」,「1+-1 i」出力:「0+-2 i」説明:(1-i)*(1-i)=1-i+i^2=-2 i,-2 iを複数形に変換すると0+-2 iとなる.

  • 例3:
    Input:「1+3 i」,「1+-2 i」出力:「7+1 i」説明:(1+3 i)*(1-2 i)=1-2 i+3 i-6(i^2)=1+i+6,7+iを7+1 iに変換します.

  • 家庭
    inputは常にa+bi形式である.outputもa+biの形で現れなければならない.
  • def complex_number_multiply(a, b):
        
      m1, m2 = map(int, a[:-1].split('+'))
      m3, m4 = map(int, b[:-1].split('+'))
      s1 = m1*m3
      s2 = (m1*m4)+(m2*m3)
      s3 = -(m2*m4)
         
      total =str(s1+s3)+'+'+str(s2)+'i' 
      return total
    codekata week2 day2
    数値配列numsをパラメータとして渡します.
    数字のうち半数を超える(多数、半を超える)数字を返してください.
    たとえば、

  • nums = [3,2,3]
    return 3

  • nums = [2,2,1,1,1,2,2]
    return 2
  • 
    def more_than_half(nums):
        a = len(nums) / 2
        for i in nums:
          if nums.count(i) >= a:
            return i
    
    
    
    def more_than_half(nums):
       a = max(set(nums), key = nums.count)
       if nums.count(a) > len(nums)/2:
         return a
         
    codekata week2 day1
    アルファベットを数字1~3999の間のアルファベットsに変換してパラメータとして使用する場合は、該当する数字を返します.
    ローマ数字を数字としてマークします.
    Symbol Value
    I 1
    V 5
    X 10
    L 50
    C 100
    D 500
    M 1000
    ローマ字を数字で読む方法は、左からローマ字を順番に付けます.III=3個のXII=12個のXXXVII=27.
    しかし表現4の場合はIIIではなくIV後ろの数字から前の数字を引けばいいです9はIXです.
    私はVとXの前に来て、4,9 XはL,Cの前に来て、40,90 CはD,Mの前に来て、400900
    
    def roman_to_num(s):
      
      total = 0
      si = { 'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
      
      for i in range(len(s)-1):
        if si[s[i]] < si[s[i+1]]:
          total -= si[s[i]]
        else:
          total += si[s[i]]
      return total + si[s[i+1]]
    roman_to_num('XXVII')
    
    codekata week1 day4
    数値numをパラメータとして渡す場合は、反転した形状がnumと同じかどうかを返します.
    num:数値
    return:true or false(反転した形状がnumと同じかどうか)
    たとえば、

  • num = 123
    return false
    裏返した姿が321だったからだ.

  • num = 1221
    return true
    ->反転した形状が1221なので.

  • num = -121
    return false
    ->ひっくり返った様子が121-

  • num = 10
    return false
    ひっくり返った様子が01だったからだ.
  • 
    def same_reverse(num):
      reversed_str = str(num)[::-1]
      if reversed_str == str(num):
        return True
      else:
        return False
        
    codekata week1 day3
    String型str因子の中で重複しないアルファベットからなる最長単語の長さを返してください.
    str:テキスト
    return:重複しないアルファベットの長さ(数値を返す)
    たとえば、

  • str = "abcabcabc"
    戻る
    ->abcが一番長いから

  • str = "aaaaa"
    戻る
    ->aが一番長いから

  • str = "sttrg"
    戻る
    ->trgが一番長いから
  • 
    def get_len_of_str(s):
      str_list = []
      count_list = []
      
      for i in range(len(s)):
        if s[i] not in str_list:
          str_list.append(s[i])
          count_list.append(len(str_list))
        else:
          str_list = []
          str_list.append(s[i])
          count_list.append(1)
    
      if len(count_list) > 1:    
        return max(count_list)
      
      return len(str_list)
      
    codekata week1 day1
    two sum関数で、数値リストと「特定数」をパラメータとして渡す場合は、「特定数」が表示されるindexを配列に入れて返します.
    nums:数値配列
    target:2つの数の合計を加算できます
    return:2つのインデックスの配列
    たとえば、

  • numsは[4,9,11,14]
    目標は13

  • nums[0]+nums[1]=4+9=13でしょう?
    [0,1]を返さなければなりません.
  • 
    def two_sum(nums, target):
      for i in range(len(nums)):
        s = nums[i]
        result = []
        for j in range(i+1, len(nums)):
          total = s + nums[j]
          if total == target:
            result.append(i)
            result.append(j)
            return result