JavaScriptアルゴリズムの挑戦


ヘイ・アゲイン!
これは私のJavaScriptのコーディングの課題の2番目の部分であり、私はそれに入るために超興奮している.私は私が最初の記事で得た非常に親切な反応のためにすべてのあなたに感謝したいと思います、そして、私は特に彼らのさえずりの上でそれを特徴とするために、dev . toチームに感謝したいです!

最初の記事を読んでいないなら、ここでそれを行うことができます.
さあ課題に入りましょう!-)

必要条件


ノードを使用します.JSはJavaScriptコードを実行するので、継続する前にインストールしてください.
私はあなたが簡単に始めることができるので、この記事のいくつかのスタートコードを作成している!はい、
/*
Author: Martin Nordström
Created: 2018/04/07 
Keep coding!
*/

// MAX CHARACTER CHALLENGE
// Return the character that is most common in a string
function maxCharacter(str) {}

// FIZZBUZZ CHALLENGE
// Write a program that prints all the numbers from 1 to 100. For multiples of 3, instead of the number, print "Fizz", for multiples of 5 print "Buzz". For numbers which are multiples of both 3 and 5, print "FizzBuzz".
function fizzBuzz() {}
ノードがある場合.JSがインストールされていて、起動する準備が整いました.

チャレンジ1 — マックスキャラクター


あなたがアプローチすることができますし、この問題を解決するさまざまな方法がたくさんあります.私はあなたにちょっと複雑なものを見せたいです、しかし、あなたがインタビューでこの問題を得ているならば、それはあなたの技術をよりよくして、誇示する本当に良い方法であると思います.
必要なのは文字列中で最も一般的な文字を表示することです.例えば、maxCharacter('lollipop') == 'l'文字列で最も使用される文字を見ることができますlollipop is l .
まず、地図としてオブジェクトを作成します.それで、我々は空のオブジェクトを作成しています.
function maxCharacter(str) {
  const charMap = {};
}
その後、配列として文字列をループします.私たちはまずsplit() 文字列を配列にしてから使用する方法forEach() 配列のすべてのインデックスをループする.我々が提供する必要があることに注意してくださいforEach() 各反復を呼び出す関数です.
function maxCharacter(str) {
  const charMap = {};

  str.split('').forEach((char) => {

  });
}
それは実際の文字のキー値のペアと内部にあるそれらのいくつかであるので、それぞれのキー値ペアを通して見たい.それで、キーが存在するならば、我々はそれを1に加えたいです.文字が見つからなかった場合、文字列の最初の文字のように、1を追加したいだけです.
function maxCharacter(str) {
  const charMap = {};

  str.split('').forEach((char) => {
    if (charMap[char]) {
      charMap[char]++; // This will add 1
   } else { // If no letter has been found yet
       charMap[char] = 1;
      }
  });
}
この関数を文字列で実行しようとするとlollipop 私たちは得る{ l: 3, o: 2, i: 1, p: 2 }あなたが見ることができるように、それは文字の中で最もよく使われている文字に注意します!はl この場合
ところで!以下のような機能を呼び出します.
const output = maxCharacter('lollipop');

console.log(output);
私がそうしないならば、それは働きません、そして、あなたが理由を知っているならば、知らせてください!
今では文字列で最も一般的な文字を返さなければなりません.そのために、私はfor in loop , これは配列の代わりにオブジェクトをループするために使われます.さらに2つの変数を追加します.maxChar and maxNum . それらは両方とも「何も」等しくなりません.そして、空のストリングがちょうど0を意味します.maxChar は、最も出現している実際の数になりますmaxNum はその数になります.だからlollipop maxNum は2であり、maxChar であるl .
また、変数を作成しますlet ではなくconst 変数の値が変わるので.
if文でチェックできます.
for (let char in charMap) {
  if (charMap[char] > maxNum) {
    maxNum = charMap[char];
    maxChar = char;
  }
}
ここでは、キーがmaxNum (最初のイテレーションです.だから設定しますmaxNum を実際の値に設定し、maxChar を返します.それから、maxChar .
これは次のようになります.
function maxCharacter(str) {
  const charMap = {};
  let maxNum = 0;
  let maxChar = '';

  str.split('').forEach((char) => {
    if (charMap[char]) {
      charMap[char]++; // This will add 1
   } else { // If no letter has been found yet
       charMap[char] = 1;
      }
  });

  for (let char in charMap) {
    if (charMap[char] > maxNum) {
      maxNum = charMap[char];
      maxChar = char;
    }
  }
  return maxChar;
}

const output = maxCharacter('lollipop');

console.log(output); // Gives us l in this case
おめでとう!これでJavaScriptの文字列で最も一般的な文字をチェックする方法を知っている!

チャレンジ2 — フィズバズ


この記事の最後の課題は人気のあるものです.それはインタビューで、そして、学校で最も人気があります.私はC++のプログラミングクラスで一度これをやった.
私たちが最初にしようとするのは、forループを作成することです.そして、forループでは、変数を1に設定し、その変数が小さい場合、または100に等しい限り、ループを維持し、最後に変数をインクリメントしたいと言います.
function fizzBuzz() {
  for (let i = 1; i <= 100; i++) {
    console.log(i) // 1,2,3,4,5,6,7,8....100
  }
}
私たちが起こることを望むのは、3(3、6、9、12など)のすべての倍数ですfizz . そして、5(5、10、15、20等)のすべての複数の単語を印刷したいbuzz . そして、毎回、私たちは、2つの数字のために同じ倍数を得ますfizzbuzz .
場合は、この迅速かつ容易に解決することができます係数演算子を使用する方法を知っている.
以下のようなif文を作ります.
if (i % 3 === 0) {
  console.log('fizz');
} else {
  console.log(i);
}
モジュラスはちょうど残りを与えます、そして、残りがないならば、それは複数です.さもなければ、我々はちょうど数を出力します.これを実行すると、次の出力が得られます.
1
2
fizz
4
5
fizz
7
8
fizz
10
11
fizz
そして、あなたが見ることができるように、3または6または9など!
数5に関しては、if文の中の文の中に他のものを作ることができます.この場合、3を5と置き換える.このように:
if (i % 3 === 0) {
console.log('Fizz');
} else if (i % 5 === 0) {
console.log('Buzz');
} else {
console.log(i);
}

And that will give us:


1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz // Gotta fix this!!

It works! But we need to fix that every time there's a multiple of 3 and 5 together we want to print put FizzBuzz. As you can see, the number 15 is being printed out as Fizz which is no bueno.

What we can do is make our current if statement an else if statement, because we want to check if there are any "FizzBuzz" numbers out there first.

`
if (i % 3 === 0 && i % 5 === 0) {
console.log('FizzBuzz');
} else if (i % 3 === 0) {
console.log('Fizz');
} else if (i % 5 === 0) {
console.log('Buzz');
} else {
console.log(i);
}

`

This will give us:


1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz

And that's it! You have now completed the famous FizzBuzz challange!

Also, you can shorten this up a little bit by replacing
if (i % 3 === 0 && i % 5 === 0) with if (i % 15 === 0)それが15の倍数であるならば、それは3と5で倍数です.

最後に


私の“JavaScriptアルゴリズムチャレンジ”シリーズの2番目の部分を読んでいただきありがとうございます.あなたが将来的に後で使用できるかもしれない何か新しいことを学んだことを願っています!私はもっと楽しく、有益な挑戦を見つけようとします.だから私の次の記事や今後の記事についてのニュースを得るために私の他のソーシャルメディアプラットフォームに従ってください!

マーティンNordstr


陳川Github