ブログの投稿ログ

2021年
9月
8月
7月
6月

会社のレクリエーションで競プロした話

今日は毎月1回行われる社内のエンジニアレクリエーションでコードを書いて遊んできたので、
そのお話をしようと思います!

普段はAmong Usやお嬢様人狼などとゲームをして遊ぶのですが、今回は賞金付きで社外の人を巻き込んだ催しとなりました!
技術顧問の上司や優秀な諸先輩方など、社外含めて素晴らしいエンジニアに囲まれてコード書くのは緊張します笑


素数の表示競争


1~10000の素数を表示する 一番早い人が勝ちになります。


01


let count = 0;
for (i = 2; i <= 10000; i++) {
  let ngFlag = true;
  for (j = 2; j <= i; j++) {
    if(i % j == 0) {
      break;
    }
    ngFlag = false;
  }
  if(!ngFlag) {
    console.log(i);
  }
}

02


const min = 2, max = 10000;
let r = '';
for(let i = min; i < max; i++) {
  if(isSosu(i)) {
    r = r + '\n' + i;
  }
}
console.log(r);

function isSosu(v) {
  for(let i = v - 1; 1 < i; i--) {
    if((v % i) === 0) {
      return false;
    }
  }
  return true;
}

03


cnt = 0;
for (n = 2; n <= 10000; n++) {
    is_prime = true;
    for (i = 2; i <= n; i++) {
        if (n % i == 0 && n != i) {
            is_prime = false;
            break;
        }
    }
    if (is_prime) {
        console.log(n);
        cnt++;
    }
}
console.log(cnt);

04


for (var counter = 2; counter <= 10000; counter++) {
    var not_prime = false;

    for (var div = 2; div <= counter - 1; div++) {
      if (counter % div === 0) {
        not_prime = true;
      }
    }
    if (not_prime === false) {
      console.log(counter);
    }
  }

05


function check(num) {
  if (num == 1) {
    return false;
  }
  for(i = 2; i < num; i++) {
    if (num % i == 0) {
      return false;
    }
  }
  return true;
};
for (j = 1; j <= 10000; j++) {
  if (check(j)) {
    console.log(j + "\n");
  }
}

よーいどん!!!

0702

結果

[
  { name: '03.js', sec: 7.237622499999998 },
  { name: '05.js', sec: 7.409822 },
  { name: '02.js', sec: 8.4699159 },
  { name: '04.js', sec: 31.069627000000008 },  // 自分のコード
  { name: '01.js', sec: 32.4574319 }
]

自分のコードを解説

//カウンターを設定します(現在1-100)
for (var counter = 2; counter <= 10000; counter++) {

// not_primeという変数を作成し、カウンター番号ごとに自動的にfalseに設定します
    var not_prime = false;

// divという変数を使用してforループを作成します。 ループは、カウンターより1つ少なくなるまで、毎回1つずつ増加します。
    for (var div = 2; div <= counter - 1; div++) {

//現在の数値を「除算」の数値で割った余りが0の場合、それは素数ではなく、not_primeはtrueに設定されます。
      if (counter % div === 0) {
        not_prime = true;
      }
    }

// 2から1までのすべての数値を調べた後、それらのいずれも均等に分割されなかった場合(余りなし)、not_primeはfalseのままで、コンソールは数値を出力します。
    if (not_prime === false) {
      console.log(counter);
    }
  }

になります!

まとめ

というわけで今日はとても良い時間を良い時間を過ごせました!
エンジニアの人と会話すると新しい刺激が得られることを再確認した終業後の時間でしたね笑