プログラマー|カーペット


Leoはじゅうたんを買いに行きました.格子じゅうたんの列が見えました.真ん中は黄色で、一列は茶色で、下図のように見えます.

Leoは家に帰ってから、さっき見たじゅうたんの黄色と茶色の格子数を覚えたが、じゅうたん全体の大きさは覚えていない.
Leoがこのカーペットに茶色の格子の数茶色、黄色の格子の数黄色をパラメータとして与えた場合、カーペットの横方向と縦方向の寸法を順番に並べて返します.
せいげんじょうけん
茶色の格子の水brownは8以上5000以下の自然水です.
黄色のメッシュの数黄色は、1つ以上の200000以下の自然数です.
カーペットの横方向の長さは、縦方向の長さ以上です.
I/O例
brown/yellow/return
10/2/[4, 3]
8/1/[3, 3]
24/24/[8, 6]
function solution(brown, yellow) {
    let answer = [], yellowWidth = 0, yellowHeight = 0; // 1. 
  
    for (let i = 1; i <= yellow; i++) {
        yellowHeight = i; // 2.
        yellowWidth = yellow / i;
        
        if((yellowWidth + yellowHeight) === ((brown - 4) / 2)) { // 3.
           answer = [yellowWidth + 2, yellowHeight + 2]; // 4.
           break;
        }
    }
    return answer;
}
  • ( yellowWidth x 2 ) + ( yellowHeight x 2 ) + 4 = brown
  • の戻り値はbrownとyellowの共有約数であり、任意の約数の組合せではなく、条件がある.
  • 黄は常に中に存在し、茶色が黄を包んでいるため、黄の縦横の長さが全体の長さを決定します.
  • は、黄色の幅(茶色を囲む基準黄色の上、下(x 2)と黄色の高さ(茶色を囲む基準黄色の両側(x 2))の総和と、4つの辺値(+4)の総和が定数として得られる茶色と一致すれば、条件を満たす再試行値であると導出した.
  • 標準に適合する値を見つけるためにfor文で完全検索を行います.
  • yellow=黄色Height x黄色Widthのため、変数値を宣言します.
  • 1号の式を用いて対応する式を導出し、基準に合致する値を探し出す.
  • の横方向と縦方向の値にそれぞれ2を加えて、空白のエッジの値を埋めます.
  • この問題は完全に探求問題だが,数学的には(?)Senseが必要な問題のようです
    問題を読んだ後、何のルールがあるのか悩んでいたが、ルールさえ見つけたが、論理を構成するのに使われなかった.
    一緒に勉強した孝尚の解答としては、私が想像していたルールと同じで気持ちが良かったのですが、結局解けなかったので、奮発して頑張ります…