[プログラマー]新しいアイデンティティを推奨



📩 -->問題の説明


KACAに加入した新規開発者NEOは「KACAアカウント開発グループ」に割り当てられ、KACAサービスに加入したユーザのID生成を担当する.「ニオ」の最初のタスクは,新たに加入したユーザがKakao IDルールに合わないIDを入力する際に,入力したIDのようにルールに合ったIDを推薦できるようにするプログラムを開発することである.
次はKakao IDのルール

アイデンティティー・ルール

  • IDの長さは、3文字または15文字を超えてはいけません.
  • IDは、小文字、数字、マイナス記号(-)、下線()および句点(.)を含む.文字のみ使用できます.
  • 段落、ピリオド(.)先頭と末尾では使用できませんし、連続して使用することもできません.
  • きじゅん


    手順1 new idのすべての大文字を対応する小文字に置き換えます.
    ステップ2 newidの小文字、数字、マイナス記号(-)、下線()および句点(.)以外のすべての文字を削除します.
    ステップ3 new idのピリオド(.)1つのポイント(.)に置き換えます.
    ステップ4 new idのピリオド(.)先頭または末尾にある場合は削除します.
    ステップ5 new idが空の文字列の場合、new idに「a」を挿入します.
    ステップ6 new idの長さが16文字を超える場合、new idの最初の15文字以外のすべての他の文字を削除します.
    削除後のピリオド(.)new idの末尾にある場合、終了記号(.)テキストを削除します.
    ステップ7のnew idの長さが2文字未満の場合、new idの長さが3になるまで、new idの最後の文字を最後に繰り返し貼り付けます.

    I/O例


    nonew idresult例1「...!@Bat#*.y.abcdefghijklm」「bat.y.abcdefghi」「例2」z-+.^.」z--「Yes 3」=.=「aaa」例4「123.def」「123.def」「Yes 5」abcdefghijklmn.p「abcdefghijklmn」

    💡 ソリューション(使用言語:python)

    import re
    def solution(new_id):
        # 1단계
        new_id = new_id.lower()
    
        # 2단계
        new_id = re.sub(r"[^a-z0-9_.-]","",new_id)
    
        # 3단계
        while '..' in new_id:
            new_id = new_id.replace('..', '.')
    
        # 4단계
        new_id = new_id.strip('.')
    
        # 5단계
        if new_id == '':
            new_id += 'a'
    
        # 6단계
        if len(new_id) >= 16:
            new_id = new_id[:15]
        if new_id[-1] =='.':
            new_id = new_id.rstrip('.')
    
        # 7단계
        if len(new_id) == 1:
            new_id+=new_id
        if len(new_id) == 2:
            new_id+=new_id[-1]
    
        return new_id

    👉 説明:


    手順1:lower()を小文字で置き換える
    new_id = new_id.lower()
    手順2:正規表現or for文の使い方
        new_id = re.sub(r"[^a-z0-9_.-]","",new_id)
    または
        for id in new_id:
            if id.isalpha() or id.isdigit() or id in ['-', '_', '.']:
                answer += id
                        
    手順3:繰り返し文「...」を使用「ないまで」.置換
        while '..' in new_id:
            new_id = new_id.replace('..', '.')
    ステップ4:strip()は、スペースを削除するときに多く使われ、特定の文字を削除したいときに使えます.rstrip()を行うと右側を削除でき、lstrip()を行うと文字の左側を削除できます.
    new_id = new_id.strip('.')
    手順5:空の文字列「a」を入力
        if new_id == '':
            new_id += 'a'
    手順6:文字数に応じたアイデンティティの調整
        if len(new_id) >= 16:
            new_id = new_id[:15]
        if new_id[-1] =='.':
            new_id = new_id.rstrip('.')
    ステップ7:文字列長が3未満の場合
        if len(new_id) == 1:
            new_id+=new_id
        if len(new_id) == 2:
            new_id+=new_id[-1]

    結果



    別の解釈

    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
    これで正規表現も解決できます!

    🌈 に感銘を与える


    以前は教育を受けていたとき、解くときに目立っていたので、再解く問題、基本的な文字列の性質を考えることができます.
    間違いがあれば、伝言を残してください.🙂
    ソース:プログラマ