第64回【JavaScript】場所取り

現在取り組んでいるのは、paiza ラーニング問題集「配列活用メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 64 回目です。

業務がたてこんで忙しい時ほど、新しい業務を招くものです。しばらく新しい案件がなく暇をしていたのに、突然あれもこれもと新しい案件が舞い込んできました。ありがたいことですが、何も今でなくても、という気持ちがちょっとあったりします。

それでは、今日も頑張ってみようと思います。

場所取り (paizaランク C 相当)

開店直後に店に入るために、番号 1 〜 N の N 人が開店前に店の前にブルーシートを合計 K 枚置きました。ブルーシートの先頭は A_1 , 最後尾は A_K です。しかし、店側は先頭から F 枚のブルーシートを撤去しました。

1 〜 N 番の人々は次のルールに従って店に並びます。
・自分のブルーシートが 1 枚以上残っているとき、自分のブルーシートのうち、最も先頭に近いブルーシートの位置に並ぶ。
・自分のブルーシートが 1 枚も残っていないとき、並ぶことなく帰宅する。

全員が並び終わった後に待機列にいる人の番号を先頭から順に答えてください。


・N = 3, K = 6, F = 3, A = [3, 2, 1, 2, 3, 2] のとき
撤去が行われる前と行われた後のブルーシートの様子は次の通りになります。

番号 1 の人のブルーシートは 1 枚も残っていないので並ぶことなく帰宅します。
番号 2 の人のブルーシートは 2 枚残っているので、最も先頭に近いブルーシートの位置に並びます。
番号 3 の人のブルーシートは 1 枚残っているので、そのブルーシートの位置に並びます。

最終的な待機列は次の通りになるので、期待する出力は

2
3

となります。


入力される値

N K F
A_1
...
A_K

・1 行目では、並びの人数 N とブルーシートの合計枚数 K と先頭から撤去されるブルーシートの枚数 F が半角スペース区切りで与えられます。
・続く K 行では、ブルーシートの所有者の番号 A_i (1 ≦ i ≦ N) が先頭から順に与えられます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

先頭の人の番号
...
最後尾の人の番号

ブルーシートが撤去された後の入店順序を以上の形式で答えてください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ N, F ≦ 100
・N ≦ K
・1 ≦ A_i ≦ N (1 ≦ i ≦ K)


入力例

5 10 1
1
4
4
3
5
4
2
4
1
1

出力例

4
3
5
2
1

最終的に set としたときに、順序が担保されているかどうか、でしょうか。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const [N,K,F] = lines[0].split(/\s/).map(Number);
  const A = [];
  for (let i = 1; i <= K; i++) {
      A.push(Number(lines[i]));
  }
  const set = new Set(A.slice(F));
  for (let value of set) {
      console.log(value);
  }
});
Python
N,K,F = map(int,input().split())
A = [int(input()) for _ in range(K)]
A = A[F:]
sortedA = sorted(set(A),key=A.index)
for a in sortedA:
    print(a)

最後に

JavaScript における set の使い方は独特です。という気がします。いっそのこと、dict 型とかで書いた方が気持ちがスッキリしそうです。そんなことはないか。

Python と VBA では、似たり寄ったりのことが多かったですが、JavaScript は、違う言語、というのが色濃く出て面白いです。もっと学習を続けようと思いました。

引き続き、よろしくお願いいたします!

Python の第64回はこちら