[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 day12つの入力は、文字列形式で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 day3String型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 day1two 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
Reference
この問題について([codekata]), 我々は、より多くの情報をここで見つけました https://velog.io/@kimlilo/codekataテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol