最近はプログラミングをウェブ上で学べるサイトが多いですね。
先日サイトがオープンしたアルゴ式や、小学生からプログラミング(Python)を学べて、コンテストも開催しているトイプロなどでも勉強させてもらっています。
アルゴ式は、練習問題がたくさんあり、似たような問題を繰り返し練習することで理解の定着が促されるのが利用者にとってはうれしいところですね。ビット演算やビットシフトをアルゴ式で繰り返し練習して身についたように思います。
この記事は、ABC215の参加記録です。
書いている私のレートは茶色中位、使用言語はPython3です。
私が理解した内容を記載していきます。
A – Your First Judge
標準入出力と、条件分岐、文字列の比較が出来るかを問われる問題。
入力を、input()
で受け取って、if
文で受け取った文字列が “Hello,World!” と一致していれば、 “AC” を出力し、異なる場合は、”WA”を print()
すればよいですね。
# AtCoder Beginner Contest 215
# A - Your First Judge
S=input()
if S=="Hello,World!":
print("AC")
else:
print("WA")
注意点としては、判定対象に使用する文字列(今回の場合 “Hello,World!” )は、問題文からコピーしてくるとミスが起こりにくくなると思います。
B – log2(N)
繰り返し処理が出来るかが問われる問題。
私は、2の累乗の計算部分はビットシフトを利用しました。
やっててよかった アルゴ式!
# AtCoder Beginner Contest 215
# B - log2(N)
N=int(input())
for i in range (100):
if (1<<i) > N:
print(i-1)
exit()
やっていることは次のコードと一緒です。
N=int(input())
for i in range (100):
if 2**i>N:
print(i-1)
exit()
C – One More aab aba baa
Python3を利用している人は、itertools
の permutations()
を使えますか。という問題ですね。
permutations()
の使い方に関しては、このサイトがわかりやすいと思います。
このオブジェクト内で作成される要素は、”a”,”b”,”a”から作成した場合、6個作られます。
import itertools
p=list(itertools.permutations("aba"))
print(p)
# => [('a', 'b', 'a'), ('a', 'a', 'b'), ('b', 'a', 'a'), ('b', 'a', 'a'), ('a', 'a', 'b'), ('a', 'b', 'a')]
見ての通り、重複する要素も作られてしまいます。
上記コードのコメント部分の配列の一番初めの要素と、一番最後の要素は一致しています。この重複を除くため、set に一度入れて、ソートした後にK番目の要素を出力すればOKですね。
# AtCoder Beginner Contest 215
# C - One More aab aba baa
import itertools
S,K=input().split()
K=int(K)
p=itertools.permutations(S)
p=set(p)
i=0
for v in sorted(p) :
i+=1
if i==K:
print("".join(v))
exit()
コメント