トラック
/
Python
Python
/
演習
/
最大の連続積
最大の連続積

最大の連続積

中級

はじめに

勤め先の政府機関は、銀行強盗団が交わした一連の暗号化された通信を傍受しました。その通信には、長い数字の並びが含まれています。チームは、デジタル信号処理のさまざまな技法を使って通信を分析し、強盗の計画をうかがわせるパターンを見つけ出す必要があります。

説明

暗号化された信号の中にある長い数字の並びから、パターンを探し出すのがこの課題です。

ここで使う手法は、最大の連続積と呼ばれています。

まずは、いくつかの用語を定義しておきましょう。

  • 入力: 解析する対象となる数字の並び
  • 連続数字: 入力の中に含まれる、隣り合った数字の並び
  • 幅: それぞれの連続数字が何桁で構成されるか
  • 積: 数値を掛け合わせたときに得られる値

入力"63915"を使った例を見ていきましょう。

  • 連続数字を作るには、元の入力から隣り合った数字を取り出します。
  • 幅3で考えると、連続数字は3つ考えられます。
    • "639"
    • "391"
    • "915"
  • 次に、それぞれの連続数字の積を計算します。
    • 連続数字"639"の積は162です(6 × 3 × 9 = 162)
    • 連続数字"391"の積は27です(3 × 9 × 1 = 27)
    • 連続数字"915"の積は45です(9 × 1 × 5 = 45)
  • 162は27よりも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")
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Python Exercism

最大の連続積を始める準備はできましたか?

Exercismに登録すれば、17個のコンセプト146個の演習、そして本物の人間によるメンタリングとともに、Pythonを学んでマスターできます。すべて無料です。