Atcoder のA問題をn=20問といてみた

#概要
AtcoderのA問題をひたすらといた


## きっかけ
[話題になっていたリリアンさんのブログ](https://note.mu/neko_chan0214/n/n3a64bc1e1412)を読んで

AtCoder５００問を解くぐらいは自分でもできそうと思ったので流石にあのようには慣れないけどそれぐらいはやってみようと思いました。

## 目的
1. 読解力をつける（問題の読み間違いを減らす、早く読めるようにする）
2. 出力を合わせる（形式になれる、Yes,YESの違いとかに気づく）
3. Master（テンプレ）を作る（入出力、よくつかう関数で）
4. A問題を解く上で何が必要かをしる
：[AtCoderの問題を分類しました](https://qiita.com/KoyanagiHitoshi/items/32dc42d8c5ee75339e54)の記事のように簡単に分類できると良い

## 環境
```$ python --version
Python 3.6.8 :: Anaconda, Inc.
```

で行いました、

## 結果
###abc002_a 数字の入力、簡単な演算：２つの大きい方を出力 4min
最初、文字列で`x,y=input().split()`受け取っていて、WAを出した。悲しい。１週間ほどやらなかっただけで忘れていて悲しい。（２回目）

```abc002_a.py
x,y=map(int,input().split())
print(max(x,y))
```

###abc003.py 等差数列の和 9min

```abc003.py
n=int(input())
#print 10000*n(n+1)/2
print(int(10000*n*(n+1)/2/n))
```

###abc004.py 2min 
入力を２倍して出力

```abc004.py
n=int(input())
print(n*2)
```

###abc005_a.py y//xを出力 4min
###abc006_a.py 簡単なif文　n%3==0 ならYES,other NO 1min

```abc006_a.py
n=int(input())
if n%3 == 0:
    print("YES")
else:
    print("NO")
```

###abc007_a.py `print(n-1)` 3min
###abc008_a `print(y-x+1)` 2min
###abc_a009 `print((n+1)//2)` 3min
###abc010_a 文字列問題登場！　末尾にppをつける　3min
`print(input()+"pp")`　
###abc011_a 次の月（１月の次は２月）を出力　7min

１行で書こうと思って、`print(((int(input())+1))%12)`と書いてWAを出した。悲しい。１１月の時の対処。。。

```abc011_a.py
n=int(input())
if n==12:
    print(1)
else:
    print(n+1)
```

###abc12_a.py 2つの入力をswapする 4min
tmpをおかずに交換して初めてだと間違えるやつですね。

tmp置くとめんどくさいのでpythonで簡単にかけないかなーとググりました。`a,b=b,a`　でOK
https://www.haya-programming.com/entry/2018/09/19/195828
を参考にしました。

結局出力の時に逆にするだけでいいので今回は使わなかったですが、タプル便利ですね。

```abc012_a.py
x,y=map(int,input().split())
print(y,x)
```


###abc13_a.py 大文字一文字を受け取ってAから何番めかを出力 7min
if文書いてもよかったのですが、めんどくさいのでpythonで文字をASCIIに変換する方法をググりました。
`ord("A")`でいけるみたいです。以下python3.6での結果

```
>>> ord("A")
65
>>> ord("D")
68
>>> ord("a")
97
>>> ord("1")
49
```

参考　https://python.civic-apps.com/char-ord/

```a.py
print(ord(input())-ord("A")+1)
```

###abc_a014.py a以上の最小のbの倍数とaとの差を出力する　10min
 問題文が長くてきつかったです。
a以上の最小のbの倍数出力していたので２回WAを出しました。

```abc014_a.py
a = int(input())
b = int(input())
if a%b ==0:
    print(0)
else:
    print((a//b)*b+b-a)
```

###abc015_a.py ２つの文字列の長さを比較する。 6min
数字ばかりでマンネリ化してきていたので嬉しいです。len()を使います。

```abc015_a.py
a =input()
b =input() 
if len(a) <= len(b):
    print(b)
else:
    print(a)
```

###abc016_a.py  xがyで割り切れればYES,それ以外はNO 7min
どっちをどっちで割るのかこんがらがった。日本語むずい。
python条件演算で１行でかけるのね。すごい

参考　http://www.tohoho-web.com/python/operators.html

```a.py
x,y=map(int,input().split())
print("YES" if x%y==0 else "NO")
```

###abc017_a.py 3つの掛け算の和 6min
入力がだんだんややこしくなってくる。
初めてpythonのリストを使った。

```abc017_a.py
a = [0]*3
b = [0]*3
sum = 0
for i in range(3):
    a[i],b[i] = map(int,input().split())
    sum += a[i]*b[i]//10
print(sum)
```

ちなみにPypy3で最短のコードの人は
`print(sum(eval(input().replace(' ','*'))for _ in[0]*3)//10)`
と書いてて感動した。
###abc018_a.py ３つの数の順位 　27min
僕の頭の弱さを見せてめちゃ時間がかかった。。

```a.py
s = [int(input()) for i in range(3)]
#print(max(max(s[1],s[2]),s[0]))
s_ =sorted(s, reverse=True) 
for i in range(len(s)):
    for j in range(len(s_)):
        if s[i] == s_[j]:
            print(j+1)
```

複数行の入力が増えてきたのでpythonでどうするか調べてみた。

https://qiita.com/yasu_teco/items/e8db933ac4f647166996　
を見るとリスト内包表記で１行にするぐらいしかないのかな？

リストの操作について復習した。`s.sort()`は破壊的（元のリストが変更される）、`t=sorted(s)`はtにソートされたリストが代入される。


参考　https://note.nkmk.me/python-list-sort-sorted/

for 文を書いているうちに頭がこんがらがった。悲しい。

テストケースは通ったのにWA出てなんで？と思ったら、intに変換してなかった。

最短の人のコードを見ると、
https://atcoder.jp/contests/abc018/submissions/3105593
`sorted(a).index(x)`でインデックスがみれるらしい。そんなの知らない。。

色々と学ぶことが多かったですが、もう２度とこんなに時間をかけたくないです。はい。

###abc019_a.py　３つの数字の中央値を出力　12min
sortして[1]を出力すれば良い。
リストにするにはどうやったらいいんだっけ？？ってなって時間を食った。
`list(map())`でリストに変換できます。

```a.py
a=list(map(int,input().split()))
a.sort()
print(a[1])
```

###abc020_a.py　入力を元に条件分岐 5min
せっかくなので、abc016で学んだ条件演算を使います。
短くかけました。

```a.py
print("ABC" if input()=="1" else "chokudai")
```

###abc021_a.py 和がnになる組み合わせ　7min
n回 １を出力すれば良さそう
問題文ちゃんと読みましょう。辛い。

```a.py
n=int(input())
print(n)
for i in range(n):
    print(1)
```

###abc022_a.py リストのk個までの和のうちs以上t以下である数を数える　
sumの使い方を学習した。`sum(list)`でlistの要素を全て足してくれる
リストとスライス　`[a:b:c]`でaが開始点、bが終わり（bを含まない、bの直前まで）,cがステップ幅（次に何個目に飛ぶか）デフォ1)

```
>>> a=[1,2,3]
>>> sum(a)
6
>>> sum(a[:2])
3
>>> sum(a[:0])
0
>>> sum(a[1:])
5
>>> b=[1,2,3,4,5,6,7]
>>> b[::2]
[1, 3, 5, 7]
```

なぜかデバッグで手間取ってACできないまま中断。あとで続き書きます。




# 学び
eval で文字列を式としてを評価することができるよ。
sorted(a).index(x)　でソート後の値のindexを取れるよ。

#注意する点
数字は忘れずにintに変換しよう
問題文は理解したと思ってももう一回読もう。（本当に）