8月21日開催!現年収非公開で企業から指名をもらってみませんか?PR

転職ドラフトでリアルな市場価値を測る。レジュメをもとに、企業から年収とミッションが提示されます。

2
0

なんか急に簡単じゃね?

処理自体4行で書けたんだけど、これホントにSランクなの?

面倒くさいので画面パタメータをListでもらった後のFunctionだけ

ちなみに引数のListを作ってる箇所はこっちの記事に書いてあるYO!!

wordCollection.js
// [問題文(原文)]
// あなたは文字列の愛好家で、文字列を収集することにとても熱心です。
// 
// 文字列は市場で高値で取引されています。今、市場には N 個の文字列が出まわっており、文字列 S_i (1 ≦ i ≦ N) の価格は P_i です。 あなたは数ある文字列の中でも、とくに先頭がある特定の文字列で始まる文字列に興味があり、そのような文字列をすべて買い占めたいです。例え、同じ文字列が複数売っていたとしてもそのすべてを買います。
// 
// そこで、市場に出回っている N 個の文字列 S_i とそれぞれの価格 P_i (i ≦ i ≦ N)、また、M 個のクエリ文字列 Q_i (1 ≦ i ≦ M) が与えられるので、それぞれのクエリ Q_i に対し、市場に出回っている文字列の中で先頭が Q_i で始まる文字列すべてを買い占めるのに必要な金額を出力するプログラムを作成してください。
function wordCollection(lines) {
  // 入力は以下のフォーマットで与えられます。
  // 
  // N M
  // S_1 P_1
  // S_2 P_2
  // ...
  // S_N P_N
  // Q_1
  // Q_2
  // ...
  // Q_M
  // 
  // ただし、文字列 S_i, Q_j (1 ≦ i ≦ N, 1 ≦ j ≦ M) は英小文字のみから構成されます。P_i は整数です。
  const [N, M] = lines[0].split(" ").map(v => Number(v));
  const words = lines.slice(1, N + 1).map(line => line.split(" ")).map(([word, price]) => ({ word, price: Number(price) }));
  // それぞれのクエリに対し、必要な金額を一行に出力してください。
  lines.slice(N + 1).forEach(word => console.log(words.filter(w => w.word.startsWith(word)).reduce((acc, cur) => acc + cur.price, 0)));
}

module.exports = {
  wordCollection
};

コレなんか引っ掛け有るんか?

追記

本記事が、@setowatson 様の方で紹介されまして、
mapやfilterやreduceやらが分かりにくい(繋げて書くとコードが複雑化してしまう)というご感想を頂いたので、
初心者向けに、無課金初期装備(forやifとかの基本構文のみ)で書き直してみたのも公開してみる試みです。

初心者向け
function wordCollection(lines) {
  const [N, M] = lines[0].split(" ").map(v => Number(v));
  
  // 超初心者っぽく書いてみた
  const words = [];
  // 販売されてるアイテムを検索しやすい形(JSONの配列)に変換
  for (let i = 1; i <= N; i++) {
    const item = lines[i].split(" ");
    words.push({
      word: item[0],
      price: Number(item[1])
    });
  }

  // 買い占めたい文字分ループ
  for (let i = N + 1; i <= N + M; i++) {
    // 購入金額合計
    let price = 0;
    for (let j = 0; j < N; j++) {
      // 頭始まりのチェック
      if (words[j].word.startsWith(lines[i])) {
        // 金額の加算
        price += words[j].price;
      }
    }
    console.log(price);
  }
}

module.exports = {
  wordCollection
};

コード量的にはだいぶ肥大化したけど、コレなら無課金ユーザでも簡単に読めるよね?(ニッコリ

2
0
1

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
AsilHatake

@AsilHatake(Hatake え~すけ)

マネジメント?思い通りに動かない人より、命令通りに動くプログラムを動かしてたほうが楽しいじゃん。
asil-inc
当社は「現場で働くエンジニアが本当に大切にされる会社を創りたい」という想いのもと、設立されました。設立から19年、社員数も100名を超え、設立当初の想いはそのままにより働きやすい環境作りを目指しています。
Linked from these articles

Comments

itanihinata
@itanihinata(irh 990)

処理自体4行で書けたんだけど、これホントにSランクなの?

コレなんか引っ掛け有るんか?

こういう俺スゲーアピールを堂々としちゃう人って、コードの出来関係なく、見てて痛々しい。

0

Let's comment your feelings that are more than good

Being held Article posting campaign

paiza×Qiita記事投稿キャンペーン「プログラミング問題をやってみて書いたコードを投稿しよう!」

~
View details
2
0

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address