勤め先の政府機関は、銀行強盗団が交わした一連の暗号化された通信を傍受しました。その通信には、長い数字の並びが含まれています。チームは、デジタル信号処理のさまざまな技法を使って通信を分析し、強盗の計画をうかがわせるパターンを見つけ出す必要があります。
暗号化された信号の中にある長い数字の並びから、パターンを探し出すのがこの課題です。
ここで使う手法は、最大の連続積と呼ばれています。
まずは、いくつかの用語を定義しておきましょう。
入力"63915"を使った例を見ていきましょう。
3で考えると、連続数字は3つ考えられます。
"639""391""915""639"の積は162です(6 × 3 × 9 = 162)"391"の積は27です(3 × 9 × 1 = 27)"915"の積は45です(9 × 1 × 5 = 45)"63915"の最大の連続積は連続数字"639"から得られます。答えは162です。場合によっては、例外を発生させる必要があります。そのときは、エラーの原因が何であるかを示す意味のあるエラーメッセージを必ず含めるようにしましょう。これにより、コードが読みやすくなり、デバッグが格段に楽になります。エラーの原因が特定の種類であるとわかっている場合は、組み込みのエラータイプのいずれかを発生させることもできますが、その場合も意味のあるメッセージを含めるようにしましょう。
この演習では、largest_product()関数が不正な入力を受け取ったときに、raise文を使ってValueErrorを「送出」する必要があります。テストに合格するには、exceptionをraiseすることと、それにメッセージを含めることの両方が必要です。seriesの演習で書いたコードを再利用してかまいません!
# span of numbers is longer than number series
raise ValueError("span must not exceed string length")
# span of number is negative
raise ValueError("span must not be negative")
# series includes non-number input
raise ValueError("digits input must only contain digits")