codingBatのつまづいた所のメモです。
Warmup-1
-
missing_char
Given a non-empty string and an int n, return a new string where the char at index n has been removed. The value of n will be a valid index of a char in the original string (i.e. n will be in the range 0..len(str)-1 inclusive).
ex)
missing_char(‘kitten’, 1) → ‘ktten’
missing_char(‘kitten’, 0) → ‘itten’
missing_char(‘kitten’, 4) → ‘kittn’
要するに、「二つ目の引数で与えられた数字番目の文字を抜かせ」ということだ。
sliceを使って、抜かした文字列の前と後ろで分けて、足してやれば良い
1 2 3 4 5 6 7 8 9 |
#!/usr/bin/env python # -*- coding: utf-8 def missing_char(str, n): front = str[:n] back = str[n+1:] return front + back print(missing_char("hoge",1)) |
実行するとこんな感じ。
1 |
hge |
-
front_back
ex)
front_back(‘code’) → ‘eodc’
front_back(‘a’) → ‘a’
front_back(‘ab’) → ‘ba’
要するに、与えた文字列の最初と最後を入れ替えろということ
1 2 3 4 5 6 7 8 9 10 11 |
#!/usr/bin/env python # -*- coding: utf-8 def front_back(str): if len(str)<= 1: return str mid = str[1:len(str)-1] return str[len(str)-1] + mid + str[0] print(front_back("hoge")) |
答えの文字列を「最後の文字」+「最後と最初以外の真ん中の文字列」+ 「最初の文字」と分割して考えているところがみそ。
実行するとこんな感じ。
1 |
eogh |
-
front3
ex)
front3(‘Java’) → ‘JavJavJav’
front3(‘Chocolate’) → ‘ChoChoCho’
front3(‘abc’) → ‘abcabcabc’
要は、与えられた文字列の前文字を三回繰り返すものを作成しろということ。
1 2 3 4 5 6 7 8 |
#!/usr/bin/env python # -*- coding: utf-8 def front3(str): slice = str[:3] return slice*3 print(front3("hugahuga")) |
特に難しくない.
実行結果はこんな感じ。
1 |
hughughug |
Warmup-2
-
string_splosion
ex)
string_splosion(‘Code’) → ‘CCoCodCode’
string_splosion(‘abc’) → ‘aababc’
string_splosion(‘ab’) → ‘aab’
要は、与えられた文字列の「前1文字抜き出す+前2文字抜き出し+前3文字抜き出し…+最終文字まで抜き出す」 というのを繰り返した文字列を生成しろということ。
1 2 3 4 5 6 7 8 9 |
#!/usr/bin/env python # -*- coding: utf-8 def string_splosion(str): slice = "" for i in range(0,len(str)): slice = slice + str[:i+1] return slice print(string_splosion("MCMC法")) |
for文で最終文字(lenで長さを取得する)番目まで抜き出すのを繰り返し、それまでのを足していくだけ。
実行結果はこんな感じ。
1 |
MMCMCMMCMCMCMC法 |
- last2
last2(‘hixxhi’) → 1
last2(‘xaxxaxaxx’) → 1
last2(‘axxxaaxx’) → 2
要は、最後2文字と同じものが「最後2文字をのぞいたところで、見つかればそれをカウントする」
以下の例であれば、「SS」は「1文字目+2文字目」「2文字目+3文字目」「3文字目+4文字目」と合計三回見つかるので、3が出力されれば正解である。
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/usr/bin/env python # -*- coding: utf-8 def last2(str): slice = str[-2:] count = 0 for i in range(0,len(str)-2):#最終文字まで確認 hoge = str[i:i+2]#頭から2文字抜き出す if hoge == slice :#抜き出した2文字が最後2文字と合致するかの確認 count = count +1 #合致する場合カウント return count print(last2("sssseeess")) |
2文字のngramなので、与えられた文字列を2文字ごとに最終文字である「SS」とあっているか確認すれば良い。
実行結果がいかになれば良い。
1 |
3 |
Coding Bat PythonのWarmup1の途中からWarmup2の途中までやりました。
また勉強したら更新しようと思います。
スポンサードリンク