【sim4】位置情報システム《新・Bランクup》

新・Bランクレベルアップ【シミュレーション 4】位置情報システム

【位置情報システム】  コード 1 (95点)

reader.on('close', () => {
   const n = Number(lines[0]);
   const L = new Array(101);  // 0 ~ 100 の位置情報
   const T = [];  // 位置情報を取得した時間
   for (let i = 1; i <= n; i++) {
      const [t, y, x] = lines[i].split(' ').map(Number);
      L[t] = [y, x]; // L の t番目は[y, x]
      T.push(t);
   }
   for (let i = 0; i < n - 1; i++) {
      const [t1, y1, x1] = [T[i], L[T[i]][0], L[T[i]][1]];  // 移動前の情報
      const [t2, y2, x2] = [T[i + 1], L[T[i + 1]][0], L[T[i + 1]][1]];  // 移動後の情報
      const [t3, y3, x3] = [t2 - t1, y2 - y1, x2 - x1];  // 移動後の情報 - 移動前の情報 = 移動時間と移動量
      const [yy, xx] = [y3 / t3, x3 / t3];  // 移動量÷移動時間= 1あたりの移動量
      for (let j = 1; j < t2 - t1; j++) {
         const [Y, X] = [L[t1][0] + Math.trunc(yy * j), L[t1][1] + Math.trunc(xx * j)];
         L[t1 + j] = [Y, X];  // Lのj番目に[Y, X]を保存
      }
 }
   L.forEach(a => {
      console.log(...a);
   });
});
hogeちゃんの画像

いろいろ試したけど 結局 100点にはならなかった。誤差が出るみたいね。

採点の仕方にちょっと不満があるかも…( ´~`).。

【位置情報システム】  コード 2  (C++実装例参照)

reader.on('close', () => {
   const n = Number(lines[0]);
   const T = [];  // 時刻
   const Y = [];  // Y座標
   const X = [];  // X座標
   for (let i = 1; i <= n; i++) {
      const [t, y, x] = lines[i].split(' ').map(Number);
      T.push(t);
      Y.push(y);
      X.push(x);
   }
   let now = 0;  // 現在時刻
   for (let i = 0; i <= 100; i++) {  // 現在時刻 0 〜 100まで
      if (i === T[now]) {
         console.log(Y[now], X[now]);
         now++;  次の座標へ
      } else {
         const [N, P] = [now, now - 1];
         const Y_now = Y[P] + Math.trunc((i - T[P]) * (Y[N] - Y[P]) / (T[N] - T[P]));
         const X_now = X[P] + Math.trunc((i - T[P]) * (X[N] - X[P]) / (T[N] - T[P]));
         console.log(Y_now, X_now);
      }
   }  
});
hogeちゃんの画像

C++の実装例に沿って書き換えたら 100点でした。

コメント