見出し画像

基礎力を鍛える

今日も天気がよくていいですね。

今日はなつかしい地域(旦那さんが学生時代過ごしたところで、よく遊びにきましたw)まで遊びにきて
カフェで朝活です!

今日もpaizaやっていきます。

 整数 n が与えられ、その後に n 個の整数 a_1, ..., a_n が半角スペース区切りで与えられるので
 a_1, ..., a_n をそのままの順番で改行区切りで出力してください。

const lines = require("fs").readFileSync("/dev/stdin", "utf8").trim().split("\n");
// console.log(lines);


for (var i = 1; i < lines.length; i++) {
    // console.log(lines[i]);
   const arr = lines[1].split(" ").map(Number);
//   console.log(arr);
    for (var i = 0; i < arr.length; i++) {
        console.log(arr[i]);
    }

}

ご覧のとおりなんどもデバッグして苦労のあとがわかるかと思いますw

繰り返しで整数nを除いた配列を出力し
それをさらに分割
そして順番に繰り返しで出力。
という流れです。

 毎年 5 月 1 日に、自分が運営している会社の社員一覧表を作成しています。表は年度ごとに更新され、社員の名前と年齢が載っています。
会社のメンバーは昨年度から全く変わらず、社員の誕生日は全員 7 月 7 日だったので、前年度の一覧表の年齢欄をそれぞれ +1 するだけで今年度の表が作れることにパイザ君は気づきました。

昨年度の一覧表が与えられるので、今年度の一覧表を出力してください

しっちゃかめっちゃかした、最初の答え

 const lines = require("fs").readFileSync("/dev/stdin", "utf8").trim().split("\n");
 // console.log(lines);
 // console.log(lines[0]);

 let result = '';
 for (var i = 1; i < lines.length; i++) {
     // console.log(lines[i]);
     const member = lines[i].split(" ");
     // console.log(member);
     const age = parseInt(member[1]);
     // console.log(age);
     const updateAge = [];
     updateAge.push(age + 1);
     // console.log(updateAge);
     for (var j = 0; j < lines[0]; j++) {
         result += member[0] + ' ' + updateAge;
     }
 }

 console.log(result);

空の結果の配列を用意して、n人分の繰り返しをし、
その中で「名前」「年齢」が一括りになったものを出力
「年齢」を数値化して更新する変数を用意したのはいいが、
そもそも年齢の更新は出力した年齢➕1と決まっているので、そこは空の配列にしなくてよし。

社員名と年齢を順番に出力して、年齢だけ➕1して
n人の結果を改行区切りで出力。
そう考えると以下になる。

const lines = require("fs").readFileSync("/dev/stdin", "utf8").trim().split("\n");
let result = '';

for (var i = 1; i < lines.length; i++) {
    const member = lines[i].split(" ");
    const name = member[0];
    const age = parseInt(member[1]);
    const updatedAge = age + 1;
    result += name + ' ' + updatedAge + '\n';
}

console.log(result);

うーん、もすこし!

時刻を表す長さ 5 の文字列 S が “XX:XX” の形式で与えられます。
入力された時刻を時と分に分け、時、分の順番で改行区切りで出力してください

なんのこれしきーって問題だし
他の言語でも使えることだからおぼえておこう。

「型」は大事!!ということです🖐️
それさえちゃんとすれば、いろいろこねくり回さなくてよし!

const lines = require("fs").readFileSync("/dev/stdin", "utf8").trim().split("\n");
// console.log(lines);->[ '12:34' ]
const S = lines[0].split(':');
// console.log(S);->[ '12', '34' ]

const h = Number(S[0]);
console.log(h);
const t = Number(S[1]);
console.log(t);

要するに、console.log(S);までは全て文字列として出力されています。
数字では「01」とかっていう場合は「1」と認識されます。

だから数字型であるNumberに変換する必要があります。

時刻を表す長さ 5 の文字列 S が “XX:XX” の形式で与えられます。
与えられた時刻の 30 分後の時刻を同じ形式で出力してください。

これも少しだけ条件分岐に頭をひねる必要があります。

最初はif〜elseでネストを深くしすぎてわけわかめになってましたが、
必要な条件を書き出したら、ネストを作る必要はないことが判明…。

まず必要な条件はこちら。

30分足した後のtimeが60より大きかったらtime - 60、hour + 1
その結果timeが10より小さかったら左側に0
その結果hourが24より大きかったら24をひく
その結果、hourが10より小さかったら左側に0

const lines = require("fs").readFileSync("/dev/stdin", "utf8").trim().split("\n");
// console.log(lines);->[ '01:02' ]
const S = lines[0].split(':');
// console.log(S);->[ '01', '02' ]

const hour = Number(S[0]);
// console.log(h);
const time = Number(S[1]);
// console.log(t);

const updateTime = time + 30;
let resultHour = hour;
let resultMinute = updateTime;

if (resultMinute >= 60) {
    // 30分足した後のtimeが60より大きかったらtime - 60、hour + 1
    resultMinute = resultMinute - 60;
    resultHour = resultHour + 1;
}
// timeが10より小さかったら左側に0
if (resultMinute < 10) {
    resultMinute = '0' + resultMinute;
}

// hourが24より大きかったら24をひく
if (resultHour >= 24) {
    resultHour = resultHour -24;
}   
// hourが10より小さかったら左側に0
if (resultHour < 10) {
    resultHour = '0' + resultHour;
}


console.log(resultHour + ':' + resultMinute);

デバッグが多いので長いのはご容赦ください💦

今日はだいぶ問題解き進められました!

明日も頑張る!

駆け出しエンジニアなっちゃんの亀さんのような成長をあたたかく見守ってくださるとうれしいです。 自己研鑽に拍車をかけたいと思います!