日の出と日の入りを眺めるために、家の近くの森にツリーハウスを建てる計画を立てています。
地元の調査会社から、地図の長方形の区画ごとに、そこにあるすべての木の高さを示すデータを入手しました。 ツリーハウスにふさわしい木を見つけるために、地図上の各グリッドを分析する必要があります。
よい木とは、次の2つの条件をどちらも満たす木です。
あなたの課題は、木の家を建てられそうな木を見つけることです。
データ会社は、木の高さを示すグリッドという形でデータを提供してくれます。 グリッドの行は東西方向を表し、列は南北方向を表します。
条件を満たす木とは、その行で最も高く、かつその列で最も低い木です。
グリッドの中に条件を満たす木がまったくないこともあります。 1本だけ見つかることもあれば、複数見つかることもあります。
次のグリッドには、候補となる木がちょうど1本あります。
↓
1 2 3 4
|-----------
1 | 9 8 7 8
→ 2 |[5] 3 2 4
3 | 6 6 7 1
つまり、[2, 1]の地点(行: 2、列: 1)は、木の家を建てるのに絶好の場所です。
ときには、例外を発生させる必要があります。その際は、エラーの原因が何であるかを示す意味のあるエラーメッセージを必ず含めるようにしましょう。これにより、コードが読みやすくなり、デバッグが格段にしやすくなります。エラーの原因がある型になるとわかっている場合は、組み込みのエラー型のいずれかを発生させることもできますが、その場合も意味のあるメッセージを含めるようにしましょう。
この演習では、matrixが不規則な場合にraise文を使ってValueErrorを「投げる」必要があります。テストが通るのは、exceptionをraiseし、かつそれにメッセージを添えた場合だけです。
メッセージ付きでValueErrorを発生させるには、exception型の引数としてメッセージを書きます。
# if the matrix is irregular
raise ValueError("irregular matrix")