0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「落ちものシミュレーション」を解くために : part1

0
Posted at

今回は paiza の「「落ちものシミュレーション」を解くために : part1」の問題に挑戦!


🧩 問題概要

問題の位置づけ

  • Aランク「落ちものシミュレーション」シリーズの 最初の段階
  • ブロックは1つだけ

何をする問題か

  • H × 横 W のフィールドがある
  • 上から 1つの長方形ブロックが落ちてくる
  • 下に他のブロックは存在しないため、必ずフィールドの底まで落ちる
  • 落下後のフィールド状態を出力する

入力

  • 1行目
    • H:フィールドの高さ
    • W:フィールドの幅
    • N:落ちてくる長方形の数(この問題では必ず 1)
  • 2行目
    • h_1:ブロックの高さ
    • w_1:ブロックの幅
    • x_1:左端の位置(0-index)

※ ブロックがフィールド内に収まることは保証されている

H W N
h_1 w_1 x_1

ブロックの挙動

  • 横位置 x_1 は固定
  • 下に障害物がない
  • 必ずフィールドの最下部で停止
  • 高さ h_1 分だけ、底から上に伸びる

出力

  • フィールドを 上から下へ H 行出力
  • 各行は長さ W
  • ブロックがある場所は #
  • 何もない場所は .



入力例:

7 10 1
1 8 1

出力例:

..........
..........
..........
..........
..........
..........
.########.






✅OK例:

const rl = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});

const lines = [];

rl.on('line', line => lines.push(line));

rl.on('close', () => {
    // 入力の読み取り
    const [H, W, N] = lines[0].split(' ').map(Number);

    // フィールドを "." で初期化
    const field = Array.from({ length: H }, () => Array(W).fill('.'));

    // ブロック情報
    const [h1, w1, x1] = lines[1].split(' ').map(Number);

    // ブロックを配置
    for (let i = H - h1; i < H; i++) {
        for (let j = x1; j < x1 + w1; j++) {
            field[i][j] = '#';
        }
    }

    // 出力
    for (let i = 0; i < H; i++) {
        console.log(field[i].join(''));
    }
});

🔍コードの流れ

  • readline` を使って標準入力を受け取る準備をする
  • 入力を1行ずつ lines 配列に格納する
  • 入力終了時(close)に以下を実行

入力の処理

  • 1行目から
    • フィールドの高さ H
    • W
    • ブロック数 N
      を取得
  • 2行目から
    • 最初のブロックの情報
    • h1(高さ), w1(幅), x1(左端位置)を取得

フィールドの初期化

  • 高さ H × 幅 W の2次元配列 field を作成
  • 全マスを "."(空)で初期化

ブロックの配置

  • ブロックは フィールドの最下部に直接配置
  • 縦方向:H - h1H - 1
  • 横方向:x1x1 + w1 - 1
  • 対象マスを "#" にする

※ このコードは「ブロックが1つだけ落ちてくる場合」の最小例

出力

  • フィールドを上から順に
  • 各行を文字列として出力






📝まとめ

入力 → フィールド初期化 → ブロック配置 → 出力

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?