#はじめに
AtCoderとは、オンラインで参加できる競技プログラミングのサイトです。(リンク)
競技プログラミングはGoogleやFacebookが主催する国際大会もありますが、国内だとAtCoderが一番有名ではないでしょうか。
AtCoder Beginners Selectionは、AtCoderに登録してまず取り組むべき、初心者用の問題集です。
この記事では、AtCoder Beginners SelectionをPythonで実装したスクリプトを紹介します。
#目次
- Welcome to AtCoder
- Product
- Placing Marbles
- Shift only
- Coins
- Some Sums
- Card Game for Two
- Kagami Mochi
- Otoshidama
- 白昼夢 / Daydream
- Traveling
Welcome to AtCoder
1問目です。基本的なことですが、以下ポイントです。
- 入出力には、組み込み関数のinput()とprint()を用いる。
- 改行には、エスケープシーケンス\nを用いる。
- map関数は、map(関数, リスト)の形式で、リストの全要素の関数を適用させる。
WelcomeToAtCoder.py
a = int(input())
b, c = map(int , input().split(" "))
s = input()
sum = a + b + c
print("{} {}".format(sum, s))
Product
2問目です。以下ポイントです。
- 偶奇判定は「2で割った余りが0か1か」。
Product.py
a, b = map(int, input().split(" "))
if a*b % 2 ==1:
print("Odd")
else:
print("Even")
Placing Marbles
3問目です。以下ポイントです。
- 文字列もforループで回せます。
PracingMarbles.py
s = input()
count = 0
for i in s:
if int(i)==1:
count+=1
print(count)
Shift only
4問目です。
ShiftOnly.py
N = int(input())
A = map(int, input().split(" "))
count = 0
flag = False
while True:
for i in range(N):
if A[i] % 2 == 0:
A[i] //= 2
else :
print(count)
flag = True
break
count += 1
if flag:
break
Coins
5問目です。
Coins.py
A = int(input())
B = int(input())
C = int(input())
X = int(input())
count = 0
a = min(A, X//500)
for i in range(a+1):
b = min(B, (X - 500*i)//100)
for j in range(b+1):
if (X - 500*i - 100*j)/50 <= C:
count+=1
print(count)
Some Sums
6問目です。
SomeSums.py
in = input()
l_str_in = in.split(" ")
N = int(l_str_in[0])
A = int(l_str_in[1])
B = int(l_str_in])
count = 0
for n in range(N+1):
a = (n)//10**4
b = (n - a*10**4)//10**3
c = (n - a*10**4 - b*10**3)//10**2
d = (n - a*10**4 - b*10**3 - c*10**2)//10**1
e = (n - a*10**4 - b*10**3 - c*10**2 - d*10**1)//10**0
SUM = a + b + c + d + e
if (SUM>=A and SUM<=B):
count += n
print(count)
Card Game for Two
7問目です。
CardGameForTwo.py
N = int(input())
lstr_a = input().split(" ")
lint_a = [int(n) for n in lstr_a]
lint_a_sort = sorted(lint_a, reverse = True)
scoreAlice = 0
scoreBob = 0
for i in range(len(lint_a_sort)):
if i % 2 == 0:
scoreAlice += lint_a_sort[i]
if i % 2 == 1:
scoreBob += lint_a_sort[i]
print(scoreAlice - scoreBob)
Kagami Mochi
8問目です。
Kagamimochi.py
Num = int(input())
ld = []
for i in range(Num):
ld.append(int(input()))
ld_set = list(set(ld))
print(len(ld_set))
Otoshidama
9問目です。
Otoshidama.py
input_list = input().split(' ')
N = int(input_list[0])
Y = int(input_list[1])
A = None
flag = False
for x in range(N+1):
for y in range(N+1-x):
if 10000*x + 5000*y + 1000*(N-x-y) == Y:
A = str(x) + " " + str(y) + " " + str(N-x-y)
print(A)
flag = True
if flag:
break
if A is None:
A = '-1 -1 -1'
print(A)
白昼夢 / Daydream
10問目です。
Daydream.py
S = input().replace('eraser', '').replace('erase', '').replace('dreamer', '').replace('dream', '')
if (len(S)==0):
print('YES')
else:
print('NO')
Traveling
11問目です。
Traveling.py
N = int(input())
t_list = [0]
x_list = [0]
y_list = [0]
A = 'Yes'
for i in range(N):
ti, xi, yi = map(int, input().split())
t_list.append(ti)
x_list.append(xi)
y_list.append(yi)
if ((abs(x_list[i+1] - x_list[i]) + abs(y_list[i+1] - y_list[i]) > (t_list[i+1] - t_list[i]))):
A = 'No'
break
if (x_list[i+1] + y_list[i+1] - t_list[i+1])%2 != 0:
A = 'No'
break
print(A)