FizzBuzz実装問題
課題: 1から100までの数字を表示し、3の倍数のときは「Fizz」、5の倍数のときは「Buzz」、両方の倍数のときは「FizzBuzz」と表示する関数を作成してください。
要件:
- 1から100までの数字をループで処理する。
- 3の倍数のときは「Fizz」と表示する。
- 5の倍数のときは「Buzz」と表示する。
- 両方の倍数のときは「FizzBuzz」と表示する。
- それ以外の数字はそのまま表示する。
Python:
この関数を実行すると、1から100までの数が出力され、3の倍数のときは「Fizz」、5の倍数のときは「Buzz」、両方の倍数のときは「FizzBuzz」として表示されます。
フィボナッチ数列実装問題
課題: フィボナッチ数列のn番目の項を計算する関数を作成してください。
要件:
- 関数は引数として整数nを受け取る。
- フィボナッチ数列のn番目の項を返す。
- フィボナッチ数列は以下のように定義される:
- F(0) = 0
- F(1) = 1
- F(n) = F(n-1) + F(n-2) (n >= 2)
Python:
この関数を実行すると、指定されたn番目のフィボナッチ数が出力されます。たとえば、
fibonacci(10)
を呼び出すと、出力は55になります。メモ化による最適化
課題: メモ化を用いてフィボナッチ数列のn番目の項を効率的に計算する関数を作成してください。
要件:
- メモ化を用いることで、同じ計算を繰り返さずに済むようにする。
- 計算済みのフィボナッチ数列の値を保存して、再利用する。
Python:
この関数を実行すると、指定されたn番目のフィボナッチ数が出力されます。たとえば、
fibonacci_memo(10)
を呼び出すと、出力は55になります。ビッグオー記法について
通常のフィボナッチ計算:
- 計算量: O(2^n)
- フィボナッチ数列を再帰的に計算する場合、各関数呼び出しが2つの新しい呼び出しを生成するため、指数関数的な時間がかかります。
メモ化を使用したフィボナッチ計算:
- 計算量: O(n)
- メモ化を使用することで、各フィボナッチ数を一度だけ計算し、その結果を再利用するため、線形時間で計算できます。
回文判別実装問題
課題: 与えられた文字列が回文かどうかを判別する関数を作成してください。
要件:
- 関数は引数として文字列を受け取る。
- 文字列が回文である場合は
True
を返し、そうでない場合はFalse
を返す。
- 回文とは、前から読んでも後ろから読んでも同じ文字列のことを指します。
- 大文字と小文字は区別しない。
- 空白や句読点は無視する。
Python:
この関数を実行すると、与えられた文字列が回文かどうかを判定します。たとえば、
is_palindrome("A man, a plan, a canal, Panama")
を呼び出すと、出力は True
になります。ビッグオー記法について
- 計算量: O(n)
- 文字列を一度スキャンし、逆順と比較するため、線形時間がかかります。
行列回転実装問題
課題: 与えられたN×Nの行列を90度回転する関数を作成してください。
要件:
- 関数は引数としてN×Nの2次元リスト(行列)を受け取る。
- 行列を時計回りに90度回転させた新しい行列を返す。
Python:
この関数を実行すると、与えられたN×Nの行列が時計回りに90度回転した新しい行列が出力されます。
ビッグオー記法について
通常の行列回転:
- 計算量: O(n^2)
- 行列の各要素に一度アクセスして新しい位置に移動するため、二重ループを使用し、時間計算量はO(n^2)です。
Linked List 実装問題 1: 単方向連結リストの逆転
課題: 単方向連結リストを逆転する関数を作成してください。
要件:
- 関数は引数として連結リストのヘッドノードを受け取る。
- 連結リストを逆転させ、新しいヘッドノードを返す。
Python:
この関数を実行すると、与えられた単方向連結リストが逆転され、新しいヘッドノードが返されます。
ビッグオー記法:
- 時間計算量: O(n)
- 空間計算量: O(1)
Linked List 実装問題 2: 連結リストの中間ノードの削除
課題: 単方向連結リストの中間にあるノードを削除する関数を作成してください。
要件:
- 関数は削除するノードそのものを受け取る。
- ノードは連結リストの最初でも最後でもないことが保証されている。
Python:
この関数を実行すると、連結リストの指定された中間ノードが削除されます。
ビッグオー記法:
- 時間計算量: O(1)
- 空間計算量: O(1)
Linked List 実装問題 3: 連結リストのサイクル検出
課題: 単方向連結リストにサイクルが存在するかどうかを検出する関数を作成してください。
要件:
- 関数は引数として連結リストのヘッドノードを受け取る。
- リストにサイクルが存在する場合は
True
を返し、そうでない場合はFalse
を返す。
Python:
この関数を実行すると、連結リストにサイクルが存在するかどうかが検出されます。
ビッグオー記法:
- 時間計算量: O(n)
- 空間計算量: O(1)
Coding Challenge: School Library Book Distribution
"In a school library, there were 'X' books to be distributed equally among 'Y' students. After the distribution, each student received an equal number of books. However, later 'Z' additional students joined. To ensure fairness, the librarian decided to collect one book from each of the 'Y' students who had already received books, and redistribute these collected books along with any remaining undistributed books to the 'Z' new students.
Your task is to write a program that calculates how many books each of the 'Z' latecomers will receive. The program should take 'X', 'Y', and 'Z' as inputs and output the number of books received by each latecomer student.
Constraints:
- 2Y ≤ X ≤ 1000, where X is an integer
- 10 ≤ Y ≤ 100, where Y is an integer
- 2 ≤ Z < Y, where Z is an integer
- The number of books each latecomer receives should be less than or equal to the final number of books each of the initially present students retains (after one book has been collected from each)."
Test Cases for the Challenge
Test Case 1:
- Input:
X = 100
,Y = 20
,Z = 5
- Expected Output:
4
Test Case 2:
- Input:
X = 500
,Y = 25
,Z = 10
- Expected Output:
19
Test Case 3:
- Input:
X = 300
,Y = 30
,Z = 5
- Expected Output:
9
Test Case 4:
- Input:
X = 800
,Y = 40
,Z = 20
- Expected Output:
19
Test Case 5:
- Input:
X = 400
,Y = 50
,Z = 10
- Expected Output:
7
Test Case 6 (Edge Case):
- Input:
X = 200
,Y = 10
,Z = 9
- Expected Output:
11
Programming Challenge: Sugoroku Practice
"Satomi is practicing Sugoroku on a linear board with
A
squares, starting from the leftmost square (start) and aiming to reach the rightmost square (goal). In each turn, she rolls a six-sided die and moves the piece forward by the number indicated on the die. Your task is to create a program that calculates the minimum number of times Satomi needs to roll the die to potentially reach the goal.Constraints:
- 2 ≤ A ≤ 100000
- A is an integer
The program should take an integer
A
as input and output the minimum number of die rolls required."Test Cases for the Challenge
Test Case 1:
- Input:
A = 10
- Expected Output:
2
Test Case 2:
- Input:
A = 7
- Expected Output:
2
Test Case 3:
- Input:
A = 15
- Expected Output:
3
Test Case 4:
- Input:
A = 20
- Expected Output:
4
Test Case 5:
- Input:
A = 2
- Expected Output:
1
Test Case 6 (Edge Case):
- Input:
A = 100000
- Expected Output:
16667