この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - JavaScript コーディング問題
141. implement btoa()
以下が自作の解答例です。
function myBtoa(str) { const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; // Convert each character in the string to its ASCII code point. const binaryStr = str .split('') .map(char => char.charCodeAt(0).toString(2).padStart(8, '0')) .join(''); // Pad the binary string with zeroes to make its length a multiple of 6. const numPaddingBytes = (6 - (binaryStr.length % 6)) % 6; const paddedBinaryStr = binaryStr.padEnd(binaryStr.length + numPaddingBytes, '0'); // Split the binary string into chunks of 6 bits and convert each chunk to a base64 character. const chunks = paddedBinaryStr.match(/.{6}/g); const base64Encoded = chunks .map(chunk => base64Chars[parseInt(chunk, 2)]) .join(''); // Add padding characters if necessary. const numPaddingChars = numPaddingBytes / 2; return base64Encoded.padEnd(base64Encoded.length + numPaddingChars, '=');}
この解答では、まず各文字のASCII コードポイントを2進数文字列に変換し、それらを8桁にパディングしてバイナリ文字列に変換します。例えば、文字列 'BFE.dev' は以下のようになります。
B F E . d e v
01000010 01000110 01000101 00101110 01100100 01100101 01110110
バイナリ文字列は6ビットの塊に分割し、それぞれをBase64エンコード文字に変換します。次に、不足分がないようにパディングによってバイナリ文字列を調整し、必要に応じてBase64エンコード文字列に '=' を追加して完了します。 'BFE'と'BFE.dev'の例では、それぞれ'QkZF'と'QkZFLmRldg=='にエンコードされています。