0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

潤さんの「コーディングインタビュー素数を判定するコードを実装しろ」を試してみました。

Last updated at Posted at 2022-12-24

参照先:
https://www.youtube.com/watch?v=dgxEsRC6PNI

潤さん曰く、シリコンバレーのコーディングテストはこれよりもっと難しいらしいです。
私もコーディングテストを導入できない日本のIT企業を憂いてます。

素数を判定するpythonコード

main.py
"""
Input
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

Prime number
[2,3,5,7,11,13,17,19]

Non Prime number
[1,4,6,8,9,12,14,15,16,18,20]

"""

# 素数を判定する関数(1以下の値は素数ではないのでfalseを返す)


def is_prime_v1(num: int) -> bool:
    if num <= 1:
        return False

    for i in range(2, num):
        if num % i == 0:
            return False

    return True


# 処理数を減らして速度を上げた素数判定関数
def is_prime_v2(num: int) -> bool:
    if num <= 1:
        return False

    for i in range(2, math.floor(math.sqrt(num) + 1)):
        if num % i == 0:
            return False

    return True
    # >>> print([i for i in range(2, math.floor(math.sqrt(37) + 1))])
    #[2, 3, 4, 5, 6]


# 本ファイル実行時に出力
if __name__ == '__main__':
    # print(is_prime_v1(10))
    import math
    import time
    import random
    numbers = [random.randint(0, 1000) for _ in range(10000)]

    start = time.time()
    for num in numbers:
        is_prime_v1(num)
    print('v1', time.time() - start)

    start = time.time()
    for num in numbers:
        is_prime_v2(num)
    print('v2', time.time() - start)


unittestするpythonコード

unittest.py

import unittest

# 多数の関数を作るので別名付与
from main import is_prime_v1 as is_prime


class primeTest(unittest.TestCase):
    # Prime numberでtrueを返さなかったら失敗
    def test_is_prime_ok(self):
        for i in [2,3,5,7,11,13,17,19]:
            self.assertTrue(is_prime(i))


    # Non Prime numberでFalseを返さなかったら失敗
    def test_is_prime_no(self):
        for i in [1,4,6,8,9,12,14,15,16,18,20]:
            self.assertTrue(is_prime(i))


    # マイナス値でFalseを返さなかったら失敗
    def test_is_prime_negative(self):
            self.assertTrue(is_prime(-1))


    # typeerrorをraise
    def test_is_prime_typeerror(self):
            with self.assertRaise(typeError):
                is_prime('string')


# 本ファイル実行時に出力
if __name__ == '__main__':
    unittest.main()
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?