TIL.54符号化試験-js
5959 ワード
出版する プログラマーの質問を見に行きます 質問する
kakaoに加入した新規開発者neoはkakaoアカウント開発グループに割り当てられ、kakaoサービスに加入したユーザのIDの作成を担当する.ニオへの最初のタスクは,新たに加入したユーザがKakao IDルールに適合しないIDを入力する際に,入力したIDと類似してルールに適合したIDを推薦するプログラムを開発することである.
次はKakao IDのルール
IDの長さは3文字または15文字を超えてはいけません.
IDは小文字、数字、マイナス(-)、アンダースコア()、ピリオド(.)文字のみ使用できます.
しかし、句号(.)先頭と末尾では使用できませんし、連続して使用することもできません.
ニオは、新規ユーザが入力したIDがKACO IDルールに適合しているか否かを、以下の7つのステップのシーケンス処理手順により確認し、ルールに適合していない場合は、新規のルールに適合しているIDを推奨する.
新しいプレイヤーが入力したIDがnew idであれば、
せいげんじょうけん
手順1 newidのすべての大文字を対応する小文字に変換します.
ステップ2 new idでは、小文字、数字、マイナス記号(-)、下線()および句点(.)以外のすべての文字を削除します.
ステップ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例
nreturn"...!@BaT#*..y.abcdefghijklm""bat.y.abcdefghi""z-+.^.""aaa""=.=""z--"
問題を解く
kakaoに加入した新規開発者neoはkakaoアカウント開発グループに割り当てられ、kakaoサービスに加入したユーザのIDの作成を担当する.ニオへの最初のタスクは,新たに加入したユーザがKakao IDルールに適合しないIDを入力する際に,入力したIDと類似してルールに適合したIDを推薦するプログラムを開発することである.
次はKakao IDのルール
IDの長さは3文字または15文字を超えてはいけません.
IDは小文字、数字、マイナス(-)、アンダースコア()、ピリオド(.)文字のみ使用できます.
しかし、句号(.)先頭と末尾では使用できませんし、連続して使用することもできません.
ニオは、新規ユーザが入力したIDがKACO IDルールに適合しているか否かを、以下の7つのステップのシーケンス処理手順により確認し、ルールに適合していない場合は、新規のルールに適合しているIDを推奨する.
新しいプレイヤーが入力したIDがnew idであれば、
せいげんじょうけん
手順1 newidのすべての大文字を対応する小文字に変換します.
ステップ2 new idでは、小文字、数字、マイナス記号(-)、下線()および句点(.)以外のすべての文字を削除します.
ステップ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例
nreturn"...!@BaT#*..y.abcdefghijklm""bat.y.abcdefghi""z-+.^.""aaa""=.=""z--"
問題を解く
// 정규식 표현
function solution(new_id) {
let answer = new_id
.toLowerCase()
.replace(/[^\w-_.]/gi, "") // (1)
.replace(/\.{2,}/g, ".") // (2)
.replace(/^\.|\.$/g, "") // (3)
.replace(/^$/, "a") // (4)
.slice(0, 15) // (5)
.replace(/\.$/, ""); // (6)
let length = answer.length;
return length > 2 ? answer : answer.padEnd(3, answer[length - 1]); // (7)
}
// (1)
// [^abc] --- a또는 b또는 c가 아닌 나머지 문자에 일치(부정)
// \w --- 63개 문자(word, 영문 대소문자 52개 + 숫자 10개 + _)에 일치
// 63개문자, -, _, . 가 아닌 나머지 문자를 ""로 대체
// (2)
// {2,} --- 2개 이상 연속 일치
// . 이 2개 이상 연속 일치 하면 . 으로 대체
// (3)
// \ --- 다음에는 이스케이프 문자가 온다.
// ^ --- 시작지점에서 검색
// $ --- 라인 끝 지점에서 검색
// \. 이 앞 또는 뒤 있으면 "" 으로 대체
// (4)
// 시작, 끝이 없으면 (빈 문자열 이면) "a" 로 대체
// (5)
// 인덱스 0 부터 15번째까지 갖고 옴 ( 15자리로 자름)
// (6)
// 마지막이 . 으로 끝나면 "" 로 대체
// (7)
// 글자수가 3보다 작으면 마지막 문자로 3자리 채워주기
Reference
この問題について(TIL.54符号化試験-js), 我々は、より多くの情報をここで見つけました https://velog.io/@h986680/TIL.54-코딩테스트-jsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol