50の手習い~人生実験室

人生100年時代。50歳から人生を開拓出来るのか?自分の身体を使って実験中

Paizaラーニング レベルアップ問題「要素の種類数」

Paizaラーニングのレベルアップ問題に挑戦。言語はJSです。

paiza.jp

ユーザー同士で解答を教え合ったりコードを公開してみようと書いてあるのでコード公開します。

問題の内容は「配列 A の要素数 N と配列 A の各要素 A_1, A_2, ..., A_N が与えられるので、配列 A には何種類の値が含まれているかを求めてください。」というもの。

例えば
5
1
2
3
2
1
が入力されたとする。5つの要素が入力されるので、その要素が何種類の値で構成されているかを調べるわけね。
自分のコードはこちら

process.stdin.resume();
process.stdin.setEncoding('utf8');
// 自分の得意な言語で
// Let's チャレンジ!!
var lines = ;
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line=> {
  lines.push(line);
});
reader.on('close', () => {
    var n = lines[0];
    var arr = ;
    var array = [];
    for(var i = 1i <= ni++) {
        arr.push(lines[i]);
    }
    array = arr.filter(function(valindexself) {
        return self.indexOf(val) === index;
    });
  console.log(array.length);
});

空の配列arrに各要素をpushして配列を作る
そしてその配列の中で重複する値を消して配列arrayを作る。
lengthメソッドでarrayの要素数を表示させるというわけ。
しかし各要素を一つ一つチェックしてその値が初めて出現したかどうかをカウントしていくというロジックが王道なのかな。
重複に関しては苦手なのでもっと勉強したい。ただ単に重複しているかいないかのチェックとか、値がいくつ含まれているかをオブジェクトリテラルに収めるなど。
重複があるかどうかをチェックするにはSetオブジェクトを使った方法が簡単そうです。

JavaScript重複についての参考ページ

pisuke-code.com

teratail.com