oniwan111’s blog

千葉大の学生が少しでも社会の役に立てればいいなと思って始めたブログです

AtCoder Beginner Contest 047 in Python A-C

ABC 047 A-Cまで解いてみました
最初からと最後からを解いてみています

これ、後ろに行けば行くほど難しくありませんか???笑
最初の方の問題だったらC問題もスラスラ解けるのに、B問題から結構つまずきました...

以下、解答です

A.

#prepare
f = True
List = []
#input
List = map(int,raw_input().split())

#evaluate
List.sort()

if not List[0]+List[1] == List[2]:
    f = False

#output
if f:
    print 'Yes'
else:
    print 'No'

B.

#prepare
L = []
Q = []

#input
W, H, N, = map(int,raw_input().split())
for i in range(N):
    L.append(map(int,raw_input().split()))
x1=0
x2=W
y1=0
y2=H

#calculate
Q = [row[2] for row in L]


for k in range(N):
    if Q[k] == 1:
        x1 = max(x1,L[k][0])
    elif Q[k] == 2:
        x2 = min(x2,L[k][0])
    elif Q[k] == 3:
        y1 = max(y1,L[k][1])
    elif Q[k] == 4:
        y2 = min(y2,L[k][1])

print max(0,x2-x1) * max(0,y2-y1)

C.

#prepare
cnt = 0
#input
S = raw_input()

#change to list
for i in range(len(S)-1):
    if S[i] != S[i+1]:
        cnt += 1
print cnt

今回学んだことは、Bのリスト内包表記です
これによって、二次元配列の列が取得出来ました
以下を参考にしました
qiita.com


(でも、AtCoderってnumpy使ってもいいのかも...?)
numpyだったら検索にだいぶ引っかかるのでそれでやったほうがいいかもしれません

C問題は完全にわかりませんでした笑
この解答は参考にさせていただきました、ありがとうございました

だいぶ実装は、早くできるようになってきました
あとは、考えられる頭があれば...笑

TOEFL Writing Independent template

TOEFL Independent のテンプレートを書いておきます

僕はこのテンプレートを使用して、W25を取ることができました

 

テンプレート

 

 Recently in modern society, people’s sense of values has been more diverse and they have various opinions as to [...............]. Some people believe that [....................]. Others think that [................]. If asked, both groups would present compelling arguments to corroborate their assertions. As far as I’m concerned, I adopt a firm position that [....................]. I would like to give two reasons below to explain why I came to conclusion.

    First, [...................]. For example, [.................]. [......................]. I think that this is the case for many other people as well. In fact, I believe that [...................]. 

    Second, [......................]. Take a case of [.................], [.............................].

    In conclusion, I’m definitely for the idea that [..............................]. I know that there are a lot of people who disagree with my opinion. However, considering two reasons in paragraphs I mentioned above, I believe that [............................].

 

 

[............]の部分には題意に沿って、入れてください

僕のテンプレートの味噌は、第一段落と最終段落で語数を稼ぐことです

特に第一段落で、難しい語彙や言い回しを多用することで、ボキャブラリー力をアピールします

本番当日は、まず第一段落、最終段落を書いてしまうことで時間を節約して、第二、第三段落を考えることが出来ました

(ついてでに家では、これを高速でタイピングできるように練習しました)

 

TOEFLのIndependentはこのテンプレートを覚えてしまえば、だれでも簡単に点数を取ることができると思います

留学を考えてる千葉大生!がんばりましょう!!

AtCoder Beginner Contest 004 in Python

ABC 004 のA-C問題解いてみました
以下、解答です

A.

#input
N = int(raw_input())
     
#output
print 2 * N

B.

#prepare
c = []

w = []
x = []
y = []
z = []


#input
for i in range(4):
    c.append(map(str,raw_input().split()))

#rotate
w = c[0]
x = c[1]
y = c[2]
z = c[3]

for j in range(4):
    print z[3-j],
print
for k in range(4):
    print y[3-k],
print
for l in range(4):
    print x[3-l],
print
for m in range(4):
    print w[3-m],
print

C.

#prepare
X = ['1','2','3','4','5','6']


#input
N = int(raw_input())
n = N%30
#calculate
for i in range(n):
    S = i % 5 + 1
    T = i % 5 + 2
    X[S-1],X[T-1]= X[T-1],X[S-1]


#output
print ''.join(X)

Bがとても汚くなった笑
Bで学んだのは、

print 'hogehoge' , 

と、[,]をつけることで改行ではなく、半角スペースを出力することができるようです
そして今回C問題で学んだことは、
print ''.join(X)
と書くことで、配列をくっつけて問題で示されているように出力させることができるようです

AtCoder Beginner Contest 003 in Python C

問題といてるうちにほぼ3日くらいでC問題解けるようになりました笑
地道に問題を調べながら、WAとREと戦うとできるようになってきますね

C.

#prepare
C = float(0)
R = []

#input
N, K = map(int, raw_input().split())
R = map(float,raw_input().split())

#sort ascending
R.sort()

#delete minimum number
for i in range(N-K):
    del R[0]

#calculate
for j in R:
    C = (C + j) / 2

#output
print C

この問題は上からK番目まで大きいのを取り出す必要があったので、
N-K番目までをリストから削除して、
あとは、下から計算をさせました

R[i]とかやると、ミスります笑
一回やらかしました

もっと綺麗にコードを書けるようになりたいものです

AtCoder Beginner Contest 049 in Python C

C問題解いてみました
正規表現を勉強したので、使ってみます


C.

#import library
import re

#prepare
S = ''
T = ''
regex = r'(dream|dreamer|erase|eraser)+$'

#input
S = raw_input()

#output
if re.match(regex,S):
    print 'YES'
else:
    print 'NO'

以下のサイトから引用します

uxmilk.jp

$ 文字列の末尾

  1. 一回以上の繰り返し
 和集合

() グループ化

これで、
(dream|dreamer|erase|eraser)+$
は、'dream','dreamer','erase','eraser'のどれかを末尾から一回以上繰り返す
ってことになるんだと思います(多分)

なんとかC問題を解けるようになりたい!

AtCoder Beginner Contest 002 in Python

ABC 002の問題を解いてみました.
B問題は勉強のために正規表現を使ってみました.

僕の競技プログラミングの目的は,すごい成績を出すことではなく,プログラミングの勉強なので時間かかっても一問ずつ解いていこうと思います.

A.

#input
X, Y = map(int,raw_input().split())
 
#output
print max(X,Y)

競技プログラミングの入力ができるようになるまでに大変時間がかかりました笑
以下のサイトを参考にして勉強しました.
この記事で大体の入力は事足りる気がします

[http://qiita.com/lethe2211/items/6cbade2bc547649bc040:embed:cite]

B.

>|python|
#import library
import re
  
#input
 
W = ''
W = raw_input()
 
#regular expression 
regex = r'[aiueo]' 
result = re.sub(regex,'',W)

#output
print result

いっぱい解答は転がっているんですけど,正規表現使ってみたかったので使ってみました
[aiueo],これをre.sub()を使って取り除けばいけました

AtCoder Beginner Contest 001 in Python

ABC 001 のコードです.

A.

#input
 
H1 = int(raw_input())
H2 = int(raw_input())
 
#output
print H1 - H2


B.

#input
m = int(raw_input())
 
d=0
 
if m<100:
	d=0
elif m<=5000:
	d=m/100
elif m<=30000:
	d=m/1000+50
elif m<=70000:
	d=(m/1000-30)/5+80
elif m>70000:
	d=89
 
print "%02d" % d

%なんちゃらってのは,Cのプログラミングの授業でやったなあと思い出す.
これは,フォーマット表記というものらしい(たぶん)

この問題を解いた後に,AtCoderの結果から他人のコードを見れることに気付き,記事にする意義を見失いましたが,
AtCoderさんに雑魚い地方国立大生のプログラミングの勉強の役に立ってるよってことを知らせるためにやっていこうと思います.
(あと,千葉大工学部受けたor入学した人にこんな風に勉強していけばいいんだってことをわかってもらえたら嬉しいです)