初めてpaizaをやってみた「宝くじ JavaScript編」

# はじめに
paiza自体は、別の人のQiita記事で見たことはあったので、存在は知っていましたが、あまりやってみようという気にはなっていませんでした。
ですが、何か投稿しようと考えていたときに、ちょうどキャンペーンをしていたので、この機会にやってみようと思い、登録して、試しに一問解いてみました。


# 問題
今回解いてみたのは、ランクCの「宝くじ」です。
言語はなんとなく気分でJavaScriptにしました。

問題はシンプルで、
① 5つの数字が入力値としてくる。
② 1つ目の数字が当たりの数字。
③ 2つ目がくじを買った数
④ 3つ目以降は、買った番号。
⑤ 買った番号を当たりの番号と比較して、一等か前後賞かなどを判定する。
といった感じです。

問題の詳細は以下のURLから↓
https://paiza.jp/works/mondai/c_rank_skillcheck_archive/lottery

# 解いてみた

とりあえず最初に自分の思った通りに書いてみました。

```js:qitta.js
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 winningNumber = lines[0];
  const amount = lines[1];
  const numbers = lines.slice(2, 5);
  const results = [];

  // 判定
  for(let i = 0; i < numbers.length; i++){
      if(numbers[i] == winningNumber){
          results[i] = 'first';
      }else if(numbers[i] == Number(winningNumber)+1
              ||  numbers[i] == Number(winningNumber)-1){
          results[i] = 'adjacent';
      }else if(numbers[i].substring(2) == winningNumber.substring(2)){
          results[i] = 'second';
      }else if(numbers[i].substring(3) == winningNumber.substring(3)){
          results[i] = 'third';
      }else{
          results[i] = 'blank';
      }
  }

  // 出力
  for(let i = 0; i < results.length; i++){
     console.log(results[i]);
  }
});
```

雑なコードではありますが、これで提出前動作確認は通ったので、これでいいかと思い、提出しました。
<br>
<br>

...ところが
![スクリーンショット 2024-08-15 185750.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831969/302f05fc-fe2a-e501-6d90-f07ecd974664.png)

普通に引っかかってました。
<br>

なぜだと思い、試しに1つ与えられる入力を見てみたところ、くじの数が動作確認のときのデータよりも多いことに気づき、それに対応できていなかったことにも気づきました。
全てのくじの番号が取得できていなかったことが分かり、以下のコードに書き換えました。

```js:qitta.js
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 winningNumber = lines[0];
  const amount = lines[1];
  const numbers = lines.slice(2, lines.length);// ←書き換えた箇所
  const results = [];

  // 判定
  for(let i = 0; i < numbers.length; i++){
      if(numbers[i] == winningNumber){
          results[i] = 'first';
      }else if(numbers[i] == Number(winningNumber)+1
              || numbers[i] == Number(winningNumber)-1){
          results[i] = 'adjacent';
      }else if(numbers[i].substring(2) == winningNumber.substring(2)){
          results[i] = 'second';
      }else if(numbers[i].substring(3) == winningNumber.substring(3)){
          results[i] = 'third';
      }else{
          results[i] = 'blank';
      }
  }

  // 出力
  for(let i = 0; i < results.length; i++){
     console.log(results[i]);
  }
});
```
これで提出すると、
![スクリーンショット 2024-08-15 190640.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831969/3388299c-15a8-073f-839e-d5704175af72.png)

無事通りました。

# さいごに
私自身が、こういった競技プログラミング的なものに、あまり慣れていないということもあったのですが、コードを書いていくうちに、"提出前動作確認に通る"ということに考えがいき、そもそもの問題の内容が頭から抜け落ちてしまっていました。
ただの初歩的なミスでした。

せっかく登録したので、時間があるときに、また問題を解いてみようと思います。