今回は paiza の「アルファベット探し」に 挑戦!
JavaScirptでは、比較を連鎖できないことを忘れてた(´;ω;`)
問題概要
入力:
- 1行目 → 英大文字
X - 2行目 → 英大文字
Y - 3行目 → 英大文字
C
求めること:
- X から Y までのアルファベット範囲内に C が含まれていれば "true"
- そうでなければ "false"
- ただし X > Y(逆順) の場合は必ず "false"
出力:
-
trueまたはfalse
入力例:
A
D
C
出力例:
true
❌ NG例:
const rl = require('readline').createInterface({ input:process.stdin });
const lines = [];
rl.on('line', (input) => lines.push(input));
rl.on('close', () => {
const X = lines[0].charCodeAt();
const Y = lines[1].charCodeAt();
const C = lines[2].charCodeAt();
console.log(X > Y ? false : X <= C <= Y); // ❌
});
❌ 問題点:X <= C <= Y
Pythonみたいに連鎖して比較できない。
✅ OK例:
const rl = require('readline').createInterface({ input:process.stdin });
const lines = [];
rl.on('line', (input) => lines.push(input));
rl.on('close', () => {
// 入力を文字コード(数値)に変換
const X = lines[0].charCodeAt();
const Y = lines[1].charCodeAt();
const C = lines[2].charCodeAt();
// XがYより後ならfalse
// そうでなければ C が [X, Y] の範囲にあるか判定
console.log(X > Y ? false : X <= C && C <= Y);
});
-
.charCodeAt()で文字を数値に変換。 -
X > Yの場合は範囲が逆なので即false。 -
範囲チェックは
X <= C && C <= Y。 -
console.log()の結果は “true” / “false” が自動で出力される。
🔍 charCodeAt()
charCodeAt() メソッドは、指定された位置にある UTF-16 コード単位を表す 0 から 65535 までの整数を返す。
◯ 基本の使い方
const str = "ABC";
console.log(str.charCodeAt(0)); // 65
console.log(str.charCodeAt(1)); // 66
console.log(str.charCodeAt(2)); // 67
👉 “A” の文字コードは 65、”B” は 66、”C” は 67。
◯ 書式
string.charCodeAt(index)
-
index: 文字列内の位置(0始まり)。 -
戻り値: その位置の文字の Unicode コードポイント(0〜65535 の整数)。
- 範囲外を指定した場合は
NaNを返す。
"ABC".charCodeAt(10); // NaN
◯ 用途例:アルファベットの範囲判定
const c = "F";
const code = c.charCodeAt(0);
// 'A'〜'Z' の判定
if (65 <= code && code <= 90) {
console.log("大文字アルファベットです");
}
🔍 UTF
UTFとは「Unicodeをバイト列で表現する方法(エンコーディング方式)」のこと。
UTF-8とUTF-16はどちらもUnicodeの文字を表現するためのエンコーディング方式だが、それぞれ特徴が異なる。
→ 一般的には、ウェブやモバイルアプリケーションではUTF-8が、システムやプラットフォームに依存する場合にはUTF-16が使われることが多い。
🗒️ まとめ
-
charCodeAt()- 文字を 数値 に変換できる
- "A" → 65, "B" → 66, "C" → 67
- アルファベットの順序比較が可能になる
-
範囲チェックの書き方
- Python のように
X <= C <= Yは書けない - JavaScript では
X <= C && C <= Yと分ける必要がある
- Python のように
-
処理の流れ
-
X,Y,Cを読み取る -
charCodeAt()で数値に変換 -
X > Yなら即false - そうでなければ
X <= C && C <= Yを判定 - 結果を
true/false出力
-
-
ポイント
- JS の比較演算は連鎖できない
-
console.log()は自動的に "true" / "false" を文字列出力してくれる