CS Hiring評価コード分析

21777 ワード

CS Hiring Assistantsリファレンスコード分析
1) DS-QUEUE
Queue構造は先入先出構造である.
1)私の解き方
1. Queue
配列とオブジェクトで、より実現しやすい配列を選択しました.
2. Queue.prototype.add
先入先出の仕組みなので、先入した要素を基準にして、その後に要素を追加します.
だからアリーprototype.pushメソッドを使用しました.
3. Queue.prototype.remove
削除する場合は、まず入力した要素の順に削除します.
だからアリーprototype.shiftメソッドを使用しました.
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
2)提出方式
JavaScriptに既に存在するメソッドではなく、オブジェクトを使用して新しいメソッドを作成する様子です.
いっそすべての方法を実現しようとするなんて...私から見れば、2つのステップはさらにコードです.
Queue.prototype.add = function(item) {
  this.storage[this.length + this.firstIndex] = item;
  // storage ({}) 에 ? : item 할당
  this.length++;
  // 하나 추가 했으니 Queue 길이 ++
};

Queue.prototype.remove = function() {
  if (this.length <= 0) {
    return undefined;
    // 더이상 지울게 없으면 undefined 리턴
  }

  let rmvItem = this.storage[this.firstIndex];
  // rmvItem 에 지우기 전 값 저장
  delete this.storage[this.firstIndex];
  // 그 다음 지우고
  this.firstIndex++;
  // 하나 지워줬으니 첫 인덱스는 다음 값으로 지정
  this.length--;
  // 하나 삭제 했으니 Queue 길이 --
  return rmvItem;
  // 미리 저장한 rmvItem을 리턴함으로써 해당 값을 삭제했다고 말해준다.
};

let queue = new Queue;
queue.add(1)
queue.add(2)
queue.remove()
console.log(queue)
2) JS-Inheritance-pseudo-classical
機能モードで作成されたコンテンツを偽ロックモードに再パッケージする必要があります.
1.私の解き方
これは私のコードとほとんど同じなので、私のコードとすべての注釈を添付します.

// FlyingHorse 의 prototype 을 object.create() 를 통해 부모의 프로토타입으로 변경 후
// constructor 를 자기 자신으로 바꿈으로써 원하는 프로토타입 체인을 명확하게 해준다.

// Horse 와 FlyingHorse 에 각각 goSomewhere 메소드 추가

// functional 에서 oldGoSomewhere(destination); 은 부모의 메소드를 호출한 것.
// 따라서 pseudoclasscial 에서는 Horse 에서 call 을 통해 goSomewhere 메소드를 불러온다


var Horse = function(name) {
  this.name = name;
};

Horse.prototype.goSomewhere = function (destination){
  return this.name + ' is galloping to ' + destination + '!';
}

var FlyingHorse = function(name, color) {
  this.name = name;
  this.color = color;
};

FlyingHorse.prototype = Object.create(Horse.prototype);
FlyingHorse.prototype.constructor = FlyingHorse;
// 사실 위의 consturctor 를 명확하게 해주는 작업은 '불필요'하다고 볼 수 있다.
// constructor 생성자를 굳이 재설정하지 않아도 우리가 원하던 결과는 그대로 나오게 된다.
// FlyingHorse 의 constructor 를 재설정하지 않으면 constructor 는 Horse 를 가리키지만
// 위와 같이 바꿔준다면 constructor 는 FlyingHorse 를 가리킨다.
// 하지만 굳이 해주는 이유는 우리는 다른 변화 없이 오직 "Horse 의 프로토타입만을 받아오길 원하기 때문이다." 라고 할 수 있겠다.


FlyingHorse.prototype.goSomewhere = function (destination, milesToDestination) {
  if (milesToDestination < 10) {
    return Horse.prototype.goSomewhere.call(this, destination);
  } else {
    return this.name + ' is flying to ' + destination + '!';
  }
};
3) Recursion-Print-Array
配列の入力を受け入れ、配列内の各要素をconsoleに設定します.logで返さなければなりません.
テストボックスに[1,2,3,4,5]と入力すると12345に戻ると書いてあったので、以下のように書きました.
1.私の解き方
var printArray = function(arr) {
  let arrToStr = arr.toString(); // 우선 문자로 바꿔주고
  let joinBeforeSplit = arrToStr.split(',').join(''); // , 기준으로 나누고 합쳐줬다.
  console.log(joinBeforeSplit); // 그리고 이 값을 console.log 해줬다.
};
2.推奨方式
しかし、実際にコードstaitzはこのような結果を望んでいるわけではありません.私は見てから知っています.ほほほ、だから問題の意味は再帰的な方法で、一つ一つ並べられた要素を出力したいということです.
例えば[1,2,3,4,5]を受け取ると、
1
2
3
私はこのような方法でコンソールに撮られたいと思っています.ハハハハ、そうすれば、簡単な方法を使いました.😂
まずコードを一つ一つ分析します.
var printArray = function() {
  function _print(targetArr) { // [1,2,3] 전달
    if (targetArr.length === 0) { // 아무것도 전달안됐으면 함수 종료
      return;
    } else { // 그 외에는
      let temp = targetArr[0]; // 우선 배열의 0번 요소를 변수에 저장

      if (Array.isArray(temp)) { // 요소가 배열인 경우
        _print(temp); // 재귀를 통해 let temp 이거 다시 해준다
        _print(targetArr.slice(1)); // 그리고 다음거 재귀!
      } else if (temp) { // 요소가 그냥 뭐 숫자거나 그러면
        console.log(temp); // 해당 요소 콘솔 로그
        _print(targetArr.slice(1)); // 그리고 다음거 재귀!
      } else { // 그 외에 애들은
        _print(targetArr.slice(1)); // 다음거 재귀!
      }
    }
  }

  _print(arguments[0]); // 함수 실행시 전달 받은 인수의 0번째를 파라미터로 전달한다.
};

printArray([1,2,3])

1
2
3
4) this-Keyword
このキーワードを使用して、モーションオブジェクト内のプレイヤーの値を取得します.
「『LebronJamesplayバスケットボール』『Kevin Durant playバスケットボール』」このようにボールを返しましょう
関数では、作成者、すなわちオブジェクト(モーション)を指します.この点を利用して解答した.
1.私の解き方
var sport = {
  name: "basketball",
  players: [
    { name: "LeBron James", age: 31 },
    { name: "Kevin Durant", age: 28 }
  ],
  playerNames: function() {
    // 1. this 를 이용해 players 와 name 을 가져온다.
    // 2. 배열 하나 만들어줘서
    // 3. for 문을 통해 배열에 테스트에 맞는 값을 넣어줬다.
    // 4. 마지막으로 해당 배열 리턴!
  }
};
2.推奨方式
やっぱり...リファレンスコードはいつも見るたびに斬新です.私のように変数として一つ一つ宣言するのではなく、一行が終わる.mapを利用して相応の名前を獲得し、後ろには「バスケットボールをする」だけが貼られていた.これらの和弦を见ると、无条件に短い和弦がいいとは言えないことはもちろん知っていますが、どう言えばいいのでしょうか.短い間に発散するやる気を感じました…どうせそんな感じがする.
5) tree-map
ツリー構造を実装し,addChild,mapメソッドを実装しなければならない.
1)私の解き方
1. addChild
パラメータを受け入れた後、new treeで新しいツリーを作成し、既存のtreeのサブツリーに新しいツリーを追加します.そしてその値段を返してくれました.
2. map
コールバック関数によって変更された新しいツリーを返す必要があります.
したがって、新しいツリーのvalueには、既存の値にコールバック関数を適用した結果が含まれ、新しいツリーのchildrenにはmapを使用してコールバックを既存のchildrenにマッピングした結果が含まれ、新しいツリーに戻ります.
2)提出方式
1. addChild
わたしとあまり差がないから行きなさい
2. map
私とは違って、Referenceはreduceを使っています.動作は同じです.
💻 Overall
今回のCS Hiring Assistantsの質問に答えたとき、感じた問題の難易度は思ったほど難しくなかった.正直、これまで学んだ概念の基礎バージョンだと思っていたが、それぞれの問題を解決する上であまり悩まなかった.(9時から試験が始まり、12時前に終わりました.もう終わりました.)しかし、パンツチャンネルでは、今回の試験は難しいと言う人が多く、かえって驚きました.明らかに私は今IM騎手の中で、私は実力がそんなに優れていない類に属して、かなり多くの人が私を救ってくれたと思っています!「以前ブログで理解して復習していたものが、ここで光ってほしい!という考えが生まれた.しかし、今すぐ結果がよかったので緊張したロープを緩め、再び基数移動の淵に陥る可能性が高い.そのため、現状に安住せず、残りのスプレーのためにさらに努力します.