YURU_DB

OracleDB / AOJ(python)

ITP1_2_D: Circle in a Rectangle (python)

問題

長方形の中に円が含まれるかを判定するプログラムを作成してください。次のように、長方形は左下の頂点を原点とし、右上の頂点の座標 (W,H) が与えられます。また、円はその中心の座標 (x,y) と半径 rr で与えられます。

Input

5つの整数 W、H、x、y、r が空白区切りで1行に与えられます。

Output

円が長方形の内部に含まれるなら Yes と、一部でもはみ出るならば No と1行に出力してください。

Constraints

−100≤x,y≤100−100≤x,y≤100
0<W,H,r≤100

回答

list = map(int,raw_input().split())
W = list[0] 
H = list[1] 
x = list[2]
y = list[3]
r = list[4]

if x-r < 0:
    print "No"
elif x + r > W:
    print "No"
elif y-r < 0:
    print "No"
elif y+r > H:
    print "No"
else:
    print "Yes"

説明

空白区切りでlistに格納。
それを各変数に要素毎に入れる。

if文は上下左右それぞれ円の縁が長方形に接触したかを判断する処理。
x-r < 0: 長方形の左端に円が接触したかを判断
x+r < W: 長方形の右端に円が接触したかを判断
y-r < 0: 長方形の下に円が接触したかを判断
y+r < H: 長方形の上に円が接触したかを判断

上記4つの条件にあてはまらなければ、円は長方形内で縁に接触せず存在してるためセーフ。

雑感

アタマの中で図をイメージするのが楽しかった。
ただし日本語の中から数式を導くのがまだ得意じゃないみたいです。

ITP1_2_C: Sorting Three Numbers (python)

問題

3つの整数を読み込み、それらを値が小さい順に並べて出力するプログラムを作成して下さい。

Input

3つの整数が空白で区切られて与えられます。

Output

小さい順に並べ替えた3つの整数を1行に出力して下さい。整数の間に1つの空白を入れて下さい。

Constraints

1 ≤ 3つの整数 ≤ 10,000

回答

list = sorted(map(int,raw_input().split()))
strlist = map(str,list)
print strlist[0] + ' ' + strlist[1] + ' ' + strlist[2]

説明

1行目:3つの値をとりつつint型変換、そしてソート。
2行目:取得したlistの要素を一括でstr型に変換(print出力用)
3行目:空白区切りで出力する処理

雑感

ソート後の値を空白区切りで出力する処理について
もう少しスマート書き方ないのかなーと思いました。
 ※自分が未熟なだけでたぶんある。

ITP1_2_B: Range (python)

問題

Input

3つの整数が空白で区切られて与えられます。

Output

YesまたはNoを1行に出力して下さい。

Constraints

0 ≤ a, b, c ≤ 100

回答

a, b, c = map(int,raw_input().split())
if a < b < c:
    print "Yes"
else:
    print "No"

説明

3つの値を取得しつつint型に変換。 あとは条件文。

雑感

何も考えないで自然に回答できたので嬉しかった。

 Oracle Master Bronze SQL基礎1 11g に合格しました

勉強について

勉強方法:iStudyで10日間ぐらい演習 + 白本の模試を2周
試験時正答率:60%(60%で合格) かなりギリギリでした・・・

合格してみて

DBA11gが短期間の暗記だけで合格できたので、正直舐めてました・・・
SQL基礎1に関しては「なぜそうなるのか」を確実に自分で理解してから受験する事をオススメします。
 ※問題文のクエリが何個もの関数でネストされてるので、とにかく読み解くのが面倒くさかったです。

今回の受験については、自分の勉強方法の駄目な部分(とにかく演習して記憶する)が出てしまったので
Silver受験時には実機を用いて、自分で深く理解してから受験しようと思います。

次に

Silver受験をいつにするか決めてないのですが、10月アタマぐらいかなーと考えています。

最後に

とにかくBronze 11g認定を受ける事ができて本当によかったです。
今まで何かで認定されたりする事がなかったのでモチベーションが上がりました。
「体系的に勉強する事ができる」+「モチベーションが上がる」
が資格試験の醍醐味なのかなーと感じまたので引き続き頑張っていきます。
 ※今年中にGOLDまで取得したい

ITP1_2_A: Small, Large, or Equal (python)

問題

2つの整数 a, b を読み込んで、a と b の大小関係を出力するプログラムを作成して下さい。

Input

入力は空白で区切られた2つの整数 a, b から構成されています。

Output

a より b の方が大きければ a < b

a より b の方が小さければ、 a > b

a と b が等しければ、 a == b と出力して下さい。

Constraints

-1,000 ≤ a, b ≤ 1,000

回答

a, b = map(int,raw_input().split())

if a<b:
    print "a < b"
elif a>b:
    print "a > b"
elif a==b:
    print "a == b"
else:
    print "none"

説明

a,bの入力: 空白区切りで取得しつつ、mapコマンドでint型に一括変換。
if分は単純に条件を並べただけ。
最後にどれにもあてはまらない場合の出力として文字列"none"を出力するようにした。

雑感

pythonにcase文がない事をここで知れたので良かった。

おわり

ITP1_1_D: Watch (python)

問題

秒単位の時間 SS が与えられるので、hh:mm:ss の形式へ変換して出力してください。  
ここで、hh は時間、mm は 60 未満の分、ss は 60 未満の秒とします。  

#Input  
SS が1行に与えられます。  

#Output  
hh、mm、ss を :(コロン)区切りで1行に出力してください。  
数値が1桁の場合、0 を付けて2桁表示をする必要はありません。  

#Constraints  
0≤S<86400  

回答

#coding: UTF-8

s = input()
h = s/3600
s = s%3600
m = s/60
s = s%60

print str(h) + ":" + str(m) + ":" + str(s)

説明

  • 1番目のs: 秒として入力値を格納
  • h: 時間を格納する。sを3600(1時間の秒数)で割った値。
  • 2番目のs: hh:mm:ss のmm:ss 分の秒数だけを格納したい。sを3600で割った余りを格納した値。
  • m: 分を格納する。2番目のsを60(1分間の秒数)で割った値。
  • 3番目のs: hh:mm:ss のss分の秒数だけを格納したい。2番目のsを60で割った余りを格納した値。
  • print部分: h,m,sはint型なので、str型に変換して文字列連結してprintしている。

おわり

ITP1_1_C: Rectangle (python)

問題

たて a cm よこ b cm の長方形の面積と周の長さを求めるプログラムを作成して下さい。
  
#Input  
a と b が1つの空白で区切られて与えられます。
  
#Output  
面積と周の長さを1つの空白で区切って1行に出力して下さい。
  
#Constraints  
1 ≤ a, b ≤ 100

回答

#coding: UTF-8

x = raw_input().split()

y = map(int,x)

a = y[0]
b = y[1]

c = a*b
d = (a+b)*2

print c, d

説明

  • x:半角空白区切りで入力値を読み込む。list形式で格納される。
  • y:そのままだとlistの要素がstr型(文字列)になっているので、mapコマンドで要素をint側に一括変換する。
  • a:縦の長さ。listの0番要素を格納。
  • b:横の長さ。listの1番要素を格納。
  • c:面積。縦x横
  • d:周の長さ。(縦+横)x2
  • print c,d: カンマ区切りにする事で自動的に半角空白区切りとなる。

おわり