学習コードテスト5
11916 ワード
ラーニングコーディングテスト
Programmers - level1
新しいIDの推奨
python 3
Problem:
My Solution:
import string
import re
def solution(new_id):
answer = ''
answer = new_id.lower()
symbols = string.punctuation.replace("-", "").replace("_","").replace(".","")
for symbol in symbols:
answer = answer.replace(symbol, "")
# answer.replace("..", ".")
answer = re.sub("[.]+",".", answer)
if answer[0] == ".":
answer = answer[1:]
# if answer[-1] == ".":
if len(answer) > 0 and answer[-1] == ".":
answer = answer[:-1]
if answer == "":
answer = "a"
if len(answer) >= 16:
answer = answer[:15]
# if answer[-1] == ".":
if len(answer) > 0 and answer[-1] == ".":
answer = answer[:-1]
if len(answer) <= 2:
while len(answer) != 3:
answer += answer[-1]
return answer
問題を読むときは正規表現を使うべきだと思います.
しかし、正規表現の使い方を覚えていないため、長い間悩んでいました.
これを探してString句読点がわかった
正規表現がなくても特殊文字をフィルタできます.
連続」.削除されたコードは次のとおりです.
answer.replace("..", “.”この繰り返しはフィルタリングできないと思うので、正規表現を使いました.
でもwhile loopで解決した人もいました...
そして最後.削除したコードはresponse[1]を使用しており、文字列の長さが0の場合はエラーが発生するため、文字列の長さを一緒に選択に変更します.
Better Solution
import re
def solution(new_id):
st = new_id
st = st.lower()
st = re.sub('[^a-z0-9\-_.]', '', st)
st = re.sub('\.+', '.', st)
st = re.sub('^[.]|[.]$', '', st)
st = 'a' if len(st) == 0 else st[:15]
st = re.sub('^[.]|[.]$', '', st)
st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
return st
こんな簡単に終わる人もいますが….
正規表現の達人ですか...for c in new_id:
if c.isalpha() or c.isdigit() or c in ['-', '_', '.']:
answer += c
ライブラリを追加しないで、このように特殊文字をフィルタする人もいます.
いつか他のソリューションとして記録され、より良いソリューションではないことを望んでいます.
がんばってください.
Reference
この問題について(学習コードテスト5), 我々は、より多くの情報をここで見つけました
https://velog.io/@tacohun21/코딩테스트-공부5
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import string
import re
def solution(new_id):
answer = ''
answer = new_id.lower()
symbols = string.punctuation.replace("-", "").replace("_","").replace(".","")
for symbol in symbols:
answer = answer.replace(symbol, "")
# answer.replace("..", ".")
answer = re.sub("[.]+",".", answer)
if answer[0] == ".":
answer = answer[1:]
# if answer[-1] == ".":
if len(answer) > 0 and answer[-1] == ".":
answer = answer[:-1]
if answer == "":
answer = "a"
if len(answer) >= 16:
answer = answer[:15]
# if answer[-1] == ".":
if len(answer) > 0 and answer[-1] == ".":
answer = answer[:-1]
if len(answer) <= 2:
while len(answer) != 3:
answer += answer[-1]
return answer
import re
def solution(new_id):
st = new_id
st = st.lower()
st = re.sub('[^a-z0-9\-_.]', '', st)
st = re.sub('\.+', '.', st)
st = re.sub('^[.]|[.]$', '', st)
st = 'a' if len(st) == 0 else st[:15]
st = re.sub('^[.]|[.]$', '', st)
st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
return st
for c in new_id:
if c.isalpha() or c.isdigit() or c in ['-', '_', '.']:
answer += c
Reference
この問題について(学習コードテスト5), 我々は、より多くの情報をここで見つけました https://velog.io/@tacohun21/코딩테스트-공부5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol