今回は paiza の「「決まり字」を解くために : part2」の問題に挑戦!
問題概要
2つの和歌の上の句(文字列)を比べ、
各文字が同じかどうか を順番に調べる問題。
具体的には:
- 1文字目同士が同じ → 「
Yes」 - 違う → 「
No」 - これを 短い方の文字数分だけ 繰り返す。
入力例:
2
aaaaaa
aaab
出力例:
Yes
Yes
Yes
No
✅ OK例:
const rl = require('readline').createInterface({ input:process.stdin });
const lines = [];
rl.on('line', (input) => lines.push(input));
rl.on('close', () => {
const N = Number(lines[0]); // 和歌の数(今回は 2)
const s = lines.slice(1); // 2つの和歌文字列
const a = s[0];
const b = s[1];
// 文字数の短い方までループ
for (let i = 0; i < Math.min(a.length, b.length); i++) {
if (a[i] === b[i]) {
console.log('Yes'); // j文字目が同じ
} else {
console.log('No'); // j文字目が違う
}
}
});
🧩 コードの流れ
-
readlineモジュールを準備
→ 標準入力(process.stdin)からデータを1行ずつ受け取る仕組みを作る。 - 入力行を配列に格納
→rl.on('line', …)で読み取った各行をlines配列に追加。 - 入力がすべて終わったら処理開始
→rl.on('close', …)内で、メインの処理を実行。 - 1行目(
lines[0])から和歌の数Nを取得
→ この問題では常に2が入る。 - 残りの2行を取得
→lines.slice(1)で和歌の上の句2つを配列sにまとめる。
→a = s[0], b = s[1]としてそれぞれ取り出す。 - 短い方の文字数までループ
→for (let i = 0; i < Math.min(a.length, b.length); i++) - 各文字を比較
→a[i] === b[i]が真なら"Yes"、違えば"No"を出力。 - すべての文字を比較し終えたら終了
🎓 まとめ
- 文字列のインデックスアクセス
→a[i]やb[i]で i文字目を取得できる。 - 短い方の長さまでループ
→Math.min(a.length, b.length)を使うのが安全。 - シンプルな比較問題
→if文とループで実現可能。文字列処理の基本。