34日目-2022.04.03


今日の勉強の内容


Baekjoonで問題を解く
1)質問:年が指定されている場合は、年出力1または0のプログラムを作成します.閏年は年が4の倍数で、100の倍数や400の倍数ではありません.
(年が1以上、4000以下の自然数)
きのう解いた問題のもう一つの解法

  • const fs = require('fs');
    const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');
    
    let a = Math.floor(parseInt(input[0]));
    
    if (a>=1 && a <=4000) {
        if ((a % 4==0)&&(a % 100 !=0)) {
         console.log(1);   
        } else if((a % 4==0)&&(a % 400==0)){
            console.log(1);
        } else {
         console.log(0);
        }
    }
    2)問題:

    (1)と(2)の位置の3桁の自然数が与えられた場合、(3)、(4)、(5)、(6)の位置の値を求めるプログラムを作成します.
    1行目には(1)位置の3桁の自然数、2行目には(2)位置の3桁の自然数が与えられる.(3)、(4)、(5)、(6)の値を1行目から4行目に順次出力します.
    苦悩の過程.
    (1)と(2)に入り、自然数なので、Math.floorを使用して小数点/(4)、(5)に10100を乗じ、(3)を3つ加えて(6)、/(1)、(2)を3桁にし、100~999の範囲を指定/結果値を1行ではなく4行に分け、出力n利用/
    (2)の各値に(1)を乗算する方法を考えます.
    に答える
    1.
    const fs = require('fs');
    const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
    
    let A = Math.floor(parseInt(input[0]));
    let B = Math.floor(parseInt(input[1]));
    
    let a = A * (B%10);
    let b = A * ((B%100)-(B%10)) /10 ;
    let c = A * Math.floor(B/100);    
    let d = A * B;
    
    if (A>=100 && A<=999 && B>=100 && B<=999) {
        console.log(`${a}\n${b}\n${c}\n${d}`);
    }

  • let A = Math.floor(parseInt(input[0]));
    let B = Math.floor(parseInt(input[1]));
    
    let a = A * (B%10);
    let b = A * Math.floor((B%100) /10) ;
    let c = A * Math.floor(B/100);    
    let d = a + 10*b + 100*c ;
    
    if (A>=100 && A<=999 && B>=100 && B<=999) {
        console.log(`${a}\n${b}\n${c}\n${d}`);
    }
    b,dの内容は上記のように変化することができる
    整理:書いたようですが、答えが間違っていて、問題の入力が1行ではなく2行であることを確認するのに長い時間がかかりました.
    fsモジュールの使用方法を参照し、スペースで区切られた1行の値を入力すると分割(")
    複数行の値を入力すると、split("n")であることを覚えているので、split("n")を適用すると正解が得られます.
    string = "  a     b   c d";
    split()のようなパラメータがない場合はstringです.split = ['a','b','c','d']
    string.split("")=[","a","","","b","c","d"]スペース
    3)問題:

    例えば、座標が(12,5)の点A、x座標およびy座標はいずれも正の値であり、第1象限に属する.点Bのx座標は負数、y座標は正の値であり、第2象限に属する.
    点の座標を入力し、その点がどの象限に属するかを決定するプログラムを作成します.ただし,x座標とy座標はいずれも正数または負数であると仮定する.
    最初の行は整数xを与える.(−1000 ≤ x ≤ 1000; x ≠ 0)
    次の行は整数yを与えます.(−1000 ≤ y ≤ 1000; y ≠ 0)
    出力点(x,y)の象限番号(1,2,3,4のいずれか).
    苦悩の過程.
    2行に入力する必要があるのでsplit("n"),/x,yは整数/x,yの範囲はif条件文である.
    const fs = require('fs');
    const input = fs.readFileSync("/dev/stdin").toString().trim().split('\n');
    
    let x = Math.floor(parseInt(input[0]));
    let y = Math.floor(parseInt(input[1]));
    
    if (x>=-1000 && x<=1000 && x!=0 && y>=-1000 && y<=1000 && y!=0) {
        if (x > 0 && y > 0){
            console.log(1);
        } else if (x<0 && y>0) {
            console.log(2);
        } else if (x<0 && y<0) {
            console.log(3);
        } else if (x>0 && y<0) {
            console.log(4);
        }
    }
    書きましたが、初めて見た反応ミスが発生しました.エラーが検索され、アクセス権エラーが検出されました.例にはこの問題がリストされていますが、fsモジュールではなくreadlineモジュールを使用して解決する必要があります.
    fsモジュールメソッドは完全に理解されていませんが、readlineモジュールメソッドも完全に理解されていません.まず基本的な使い方と文法を使って解釈し、明日から詳しく勉強します.
    アプリケーション
  • readlineモジュール
  • const readline = require('readline');
    const rl = readline.createInterface({
        input : process.stdin,
        output : process.stdout,
    });
    
    let input = [];
    
    rl.on("line",function(line) {
        input.push(parseInt(line));
    }).on("close", function () {
        
        const x = Math.floor(parseInt(input[0]));
        const y = Math.floor(parseInt(input[1]));
        
        if (x>=-1000 && x<=1000 && x!=0 && y>=-1000 && y<=1000 && y!=0) {
        if (x > 0 && y > 0){
            console.log(1);
        } else if (x<0 && y>0) {
            console.log(2);
        } else if (x<0 && y<0) {
            console.log(3);
        } else if (x>0 && y<0) {
            console.log(4);
        }
    }
        process.exit();
    });    
  • readlineモジュール+?ビュー
  • の使用
    if (x>=-1000 && x<=1000 && x!=0 && y>=-1000 && y<=1000 && y!=0) {
        if (x > 0) {
            y > 0 ? console.log(1) : console.log(4);
        } else if (x<0) {
            y < 0 ? console.log(3) : console.log(2);
        }
    }
    ドアにいたら?上記の操作を実行するには
  • fsモジュールの使用
    すぐに理解できる方法ではありませんが、readlineモジュールの方法を見つけ、fsモジュールで偶然可能な方法を発見したので、
  • にメモしておきます.
    fs.readFileSync("/dev/stdin").toString().trim().split('\n');
    
    여기서 readFileSync를 
    
    fs.readFileSync(0).toString().trim().split('\n');
    으로 적용시 fs모듈로도 정답이 나옴을 확인
    パスが0でFSモジュールが利用可能になった理由が理解できません
    後で帰って勉強します.
    4)問題:尚根が設定したアラーム時刻が与えられている場合は、アラームを45分前に変換するプログラムを作成してください.
    第1行は2つの整数HとMを与える.(0≦H≦23,0≦M≦59)は、現在尚根で設定されているアラーム時間HのM分を意味する.入力時間は24時間で表示されます.24時間の表現では、1日の始まりは0:0(真夜中)、終わりは23:59(翌日の真夜中の1分前).時間を表すとき、不要な0は使いません.
    苦悩の過程.
    M分から45を引くと、0より大きい場合はそのまま、0より小さい場合は1を引く.
    const fs = require('fs');
    const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');
    
    let H = Math.floor(parseInt(input[0]));
    let M = Math.floor(parseInt(input[1]));
    
    if (H>=0 && H<=23 && M>=0 && M<=59) {
        if (M-45 >=0 ){
            console.log(`${H}:${M-45}`);
        } else if (H>=1 && M-45 <0 ){
            console.log(`${H-1}:${M+15}`);   
        } else if (H==0 && M-45 <0){
            console.log(`23:${M+15}`);
        }
    }
    やってみましたが、答えが間違っていました.利用する方法もあるようで、まずこの方法を使いたいのですが、なぜだめなのか悩んで、例の出力を見てみました.スペースで構成されていることがわかりました...
    に答える
    1.
    const fs = require('fs');
    const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');
    
    let H = Math.floor(parseInt(input[0]));
    let M = Math.floor(parseInt(input[1]));
    
    
        if (M-45 >=0 ){
            console.log(`${H}` + " " + `${M-45}`);
        } else if (H>=1){
            console.log(`${H-1}` + " " + `${M+15}`);   
        } else {
            console.log(23 + " " + `${M+15}`);
        }

    明日の学習計画

  • baekjoon条件文の終わりと解答の問題他の解答方法苦悩
  • readlineモジュールの原理と基本的な理解
  • 一日を振り返る

  • node.jsの勉強は今の目標ではないと思うよりも、結果、原理、原因などをよく探して、理解するのは今から容易なことではないので、まず問題を解決する方法に適用し、問題の解決方法を考えることに重点を置いて、勉強中で、これからもそうなります.
    もしこのような学習方式があまり良い方法ではないならば、初心者のために伝言を残してください.
  • 満足度:★☆☆☆☆

    学習ソース


    BaekJoon
    上の内容は勉强の中で私が理解した内容で、いくつか间违った内容があるかもしれません.
    灰毒中発見時の修正