Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の2_D問題をC++とPython で解いてみました。
ITP1 のトピック2では、条件分岐を学びます。「条件によって実行する内容を変え、処理の流れを制御する構造文を学習します。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(2_D: Circle in a Rectangle)
問題はリンク先をご覧ください。
AOJ ITP1 2_D問題:Circle in a Rectangle
トピック2の最後として、少し複雑な条件を書いてみます。
解答案
C++ プログラム例(ITP1 2_D)
円の中心から半径を引くとx軸とy軸の最小値が分かります。円の中心から半径を加えるとx軸とy軸の最大値が分かります。これと長方形の座標から判定をします。
#include <iostream>
using namespace std;
int main()
{
int W, H , x, y, r;
cin >> W >> H >> x >> y >> r;
if ((0 <= (x - r))&&((x + r) <= W)
&&(0 <= (y - r))&&((y + r) <= H)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
条件式は長いですが行を分けて、なるべく分かりやすいように書きました。
Python プログラム例(ITP1 2_D)
C++ のコードを、Python に置き換えました。Python 版も、長い条件式を行を分けて、分かりやすいように書きました。
w, h, x, y, r = map(int, input().split())
if 0 <= (x - r) and (x + r) <= w and \
0 <= (y - r) and (y + r) <= h:
print("Yes")
else:
print("No")
上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。
最後に
トピック2では、条件分岐を学びました。Python は、条件文の本文をインデントで表現している、比較演算子をつなげて書けるなど、多くの点で分かりやすい文法を実現していることが学べました。
引き続き、ITP1 の問題を紹介していきます。