はじめてのプロコンメモ(その2)

Python3で挑むにあたり忘れないようにメモ書きを残しておく
[AtCoder に登録したら次にやること ～ これだけ解けば十分闘える！過去問精選 10 問 ～](https://qiita.com/drken/items/fd4e5e3630d0f5859067)
を類題も含めてといた記録のメモ

# 標準入力例

```python
# -*- coding: utf-8 -*-
# 整数の入力
a = int(input())
# スペース区切りの整数の入力
b, c = map(int, input().split())
# 文字列の入力
s = input()
# 出力
print("{} {}".format(a+b+c, s))
```

# 練習１

[ABC 081 A - Placing Marbles](https://atcoder.jp/contests/abc081/tasks/abc081_a)

## 問題

```
すぬけ君は1,2,3の番号がついた 
3つのマスからなるマス目を持っています。 各マスには 0 か 1 が書かれており、マス iには siが書かれています。

すぬけ君は 1 が書かれたマスにビー玉を置きます。 ビー玉が置かれるマスがいくつあるか求めてください。
```

## 解答
今回の標準入力の入力例は`101`だったので一文字ずつ区切るようにした

```python

#一文字ずつ区切る
chars = list(input())
#文字列で入っているぽい['1', '0', '1']
#文字列１とあっている配列の数をとりだしている
print(chars.count('1'))
```

# 練習２
[ABC 095 A - Something on It](https://atcoder.jp/contests/abc095/tasks/abc095_a)

## 問題

```
ラーメン店「高橋屋」のラーメンの値段は 
1杯 700円ですが、トッピング（味玉、チャーシュー、ねぎ）を乗せた場合は 1種類につき 
100円が加算されます。

ある客がラーメンを一杯注文し、店員にトッピングの希望を伝えました。店員は注文の内容をメモ帳に文字列 Sとして記録しました。
Sの長さは3文字で、Sの 1文字目が o のとき客のラーメンに味玉を乗せることを、x のとき味玉を乗せないことを表します。同様に、
Sの2文字目、3文字目はそれぞれチャーシュー、ねぎの有無を表します。
Sが入力されると、対応するラーメンの値段を出力するプログラムを書いてください。
```

## 解答

```python

#一文字ずつ区切る
chars = list(input())
#文字列で入っているぽい['o', 'x', 'o']
#文字列１とあっている配列の数をとりだしている
print(700+chars.count('o')*100)
```

# 練習３
[ABC 085 A - Already 2018](https://atcoder.jp/contests/abc085/tasks/abc085_a)

## 問題

```
2018年 1月某日、高木さんは書類を書いています。書類には、その日の日付を yyyy/mm/dd という形式で書き込む欄があります。例えば、2018年 1月23日は 2018/01/23 となります。

書類を書き終えたあと、高木さんは日付欄の先頭に誤って 2017 と書いてしまっていたことに気がつきました。高木さんが日付欄に書いた文字列 Sを入力すると、Sの先頭の 
4文字を 2018 に修正して出力するプログラムを書いてください。
```

## 解答

```python
#一文字ずつ区切る
chars = list(input())
#文字列で入っているぽい[2017/01/07]
#['2', '0', '1', '7', '/', '0', '1', '/', '0', '7']
# 文字を入れ替える
chars[3]="8"

# 文字を出力する
for s in chars:
  # スペーサーをなしに設定
  print(s, end ="")
  #2018/01/07出力させる
```

### 参考文献
pythonでリストを普通の文字列に直す時どうしようかなとおもった
https://teratail.com/questions/135327

# 練習4
[ABC 069 B - i18n](https://atcoder.jp/contests/abc069/tasks/abc069_b)

## 問題

```
internationalization という英単語は、i18n と略されることがあります。 これは、先頭文字 i と末尾文字 n の間に 18文字が挟まっていることに由来します。
長さ 3以上の英小文字のみからなる文字列 
sが与えられます。 同様の規則によって sを略してください。
```

## 解答

```python

#一文字ずつ区切る
chars = list(input())
#文字列で入っているぽい[internationalization]
#len(chars)で文字の長さを数える
#最初の文字と真ん中の数と最後の文字を出力させる
#strでInt型をStringに変換する
print(chars[0]+str(len(chars)-2)+chars[len(chars)-1])

```

# 練習５
[ABC 082 B - Two Anagrams](https://atcoder.jp/contests/abc082/tasks/abc082_b)

## 問題
```
英小文字のみからなる文字列 s, tが与えられます。 あなたは、
sの文字を好きな順に並べ替え、文字列 s′を作ります。 また、
tの文字を好きな順に並べ替え、文字列 
t′を作ります。 このとき、辞書順で 
s′<t′となるようにできるか判定してください。
```

## 解答(自力で解けなかった)

```python

#数を数える
count = 0
#一文字ずつ区切る
chars1 = list(input())
chars2 = list(input())

#短いやつをソートする
if len(chars1) < len(chars2):
	print("len(chars1) < len(chars2)")
	#辞書順にソートする
	#print(sorted(chars1))
	# ソートしたやつを短い方と一文字ずつ比較する
	for sorted_char1 in sorted(chars1):
		#print(sorted_char1)
        # chars1にまわしている文字よりも辞書順逆に回す
		for reversed_chars2 in reversed(chars2):
          	#もし逆の辞書で回したのと比較して小さければ
			if sorted_char1 <= reversed_chars2:
				#回数を数える
				count = count+1
                #その数と短いの方の長さを比較して、すべて比較していたら
				if count == len(chars1):
                    #Yesを表示
					print("Yes")
	#おわりはsorted_char1 <= reversed_chars2にならなかったやつと、長いやつを比較する
	if count != len(chars2):
		print("No")

#len(chars1) < len(chars2)ではなかった場合
else:
	print("len(chars1) > len(chars2)")
	#辞書順にソートする
	# ソートしたやつを短い方と一文字ずつ比較する
	for sorted_char2 in sorted(chars2):
		# chars2にまわしている文字よりも辞書順逆に回す
		for reversed_chars1 in reversed(chars1):
			#もし逆の辞書で回したのと比較して小さければ
			print("テスト")
			print(sorted_char2)
			print(reversed_chars1)
			if sorted_char2 <= reversed_chars1:
				#回数を数える
				count = count+1
				print("回数を数える")
				print(count)
				print(len(chars2))
                #その数と短いの方の長さを比較して、すべて比較していたら
				if count == len(chars2):
                    #Yesを表示
					print("Yes")
	#おわりはsorted_char1 <= reversed_chars2にならなかったやつと、長いやつを比較する
	if count != len(chars1):
		print("No")
  
```

## 回答例

```python
s = input()
s_asc = ''.join(sorted(s))
 
t = input()
t_desc = ''.join(sorted(t, reverse=True))
 
if s_asc < t_desc:
	print('Yes')
else:
	print('No')
```

## 課題
### なぜできなかったのか

- 難しく考えすぎてしまった
- join関数を知らなかった
    - たったの一行で連結させることが可能
    - join関数は、”.join(リスト名)で使える。
    - しかもソートさせたやつを入れるだけでいい

### できていたこと
- 文字列の長さで分岐させるを考えられたのは良かった