AtCoder の AtCoder Beginners Selection を Python で実装する

#はじめに
AtCoderとは、オンラインで参加できる競技プログラミングのサイトです。（[リンク](https://atcoder.jp/)）
競技プログラミングはGoogleやFacebookが主催する国際大会もありますが、国内だとAtCoderが一番有名ではないでしょうか。
AtCoder Beginners Selectionは、AtCoderに登録してまず取り組むべき、初心者用の問題集です。
この記事では、AtCoder Beginners SelectionをPythonで実装したスクリプトを紹介します。

#目次
1. Welcome to AtCoder
2. Product
3. Placing Marbles
4. Shift only
5. Coins
6. Some Sums
7. Card Game for Two
8. Kagami Mochi
9. Otoshidama
10. 白昼夢 / Daydream
11. 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)
```