Pythonで、ある円が2つの同心円の境界内に収まっているかどうかを判定する方法
半径 r1 と r2 を持つ2つの同心円があるとします。そこに、中心座標 coord と半径 r を持つもう1つの円を加えます。今回の課題は、この新しい円が、与えられた2つの同心円の間の境界領域内に完全に収まっているかどうかを判定することです。
たとえば、入力が r1 = 4、r2 = 2、coord = (3, 0)、r = 1 の場合、出力は True になります。
解法のアプローチ
この問題は、点から原点までの距離を求める幾何学的な計算を使えば、シンプルに解決できます。手順は以下のとおりです。
- まず、円の中心 (x, y) から原点までの距離 val を計算します。つまり、val = √(x² + y²) です。
- 次に、次の2つの条件を満たしているかどうかを確認します。
- val + r ≤ r1: 円の外周が、外側の円(半径 r1)を超えていないこと
- val − r ≥ r1 − r2: 円の内側が、内側の境界(半径 r1 − r2)よりも外側にあること
- 両方の条件を満たしていれば True を返し、どちらかでも満たさなければ False を返します。
理解を深めるために、実際の実装例を見てみましょう。
サンプルコード
from math import pow, sqrt
def solve(r1, r2, coord, r) :
val = sqrt(pow(coord[0], 2) + pow(coord[1], 2))
if val + r <= r1 and val - r >= r1 - r2 :
return True
return False
r1 = 4
r2 = 2
coord = (3, 0)
r = 1
print(solve(r1, r2, coord, r))
入力
4, 2, (3, 0), 1
出力
True
-
Pythonで二分木が対称木(シンメトリックツリー)かどうかを判定するプログラム
ある二分木が与えられたとき、その木が対称木(シンメトリックツリー)であるかどうかを判定します。対称木とは、鏡像(左右反転した像)をとったときに元の木と完全に一致するような木のことです。例えば、左右の子部分木が互いに鏡写しの関係になっている木は対称木とみなされます。この判定を行うためのアプローチは以下の通りです。解法の考え方再帰的に処理を行う関数 solve(root, root) を呼び出します。同じノードを2つの引数として渡すのがポイントです。比較対象の2つのノード(node1 と node2)がどちらも空(None)の場合、True を返します。どちらか一方だけが空の場合、構造が一致してい
-
Pythonで与えられたグラフが2部グラフかどうかを判定するプログラム
2部グラフとは無向グラフが与えられたとき、そのグラフが2部グラフ(バイパータイトグラフ)であるかどうかを判定する方法を解説します。2部グラフとは、グラフのすべての頂点を2つの集合 A と B に分割でき、グラフ内のすべての辺 {u, v} が必ず一方の端点 u が集合 A、もう一方の端点 v が集合 B に属するようなグラフのことです。つまり、同じ集合内の頂点同士を結ぶ辺(A-A や B-B)が一切存在しないグラフです。例として、次のようなグラフを考えてみましょう。この場合、頂点 [0, 4] を集合 A に、[1, 2, 3] を集合 B に分類できます。すべての辺は A から B、または