行の回転
気分転換。
ちょうどローテーションのアルゴリズムを学んだばっかりなのでトライ。
スペースもカウントされる事に気付いたので(最初から気付けよ(- -#)不要なスペース・インデントはカットしてみた。結構サイズが小さくなった。
汎用的なアルゴリズムならこんな感じかな。
import sys S=[] r=1 def v(s,e): for i in S[s:e][::-1]: S[s]=i s+=1 while 1: l=sys.stdin.readline().rstrip('\n') if not l: break else: S.append(l) n=len(S) v(0,r) v(r,n) v(0,n) for i in S: print i
実行結果。
size: 226 time: 0.056416 sec status: 0 size: 226 time: 0.015453 sec status: 0
サイズを小さくするためだけのセコイやり方ならこう。実行速度の差も興味深い。
import sys S=[] while 1: l = sys.stdin.readline().rstrip('\n') if not l: break else: S+=l S+=S[0] for i in S[1:]: print i
実行結果。
size: 139 time: 0.059642 sec status: 0 size: 139 time: 0.097427 sec status: 0
2番目の Sample Input の実行速度に大きく差異があります。前者の方法が速いのは、アルゴリズムの違いが顕著に影響している気がします。
さらに後者は S.append(l) を S+=l に変えて7バイト削減してます。が、これ、実は違う処理で append() メソッドを使う場合、元のオブジェクトに変更を加えます。S+=l の場合、新たにリストを作成してそのオブジェクトへリンクされます。新たにオブジェクトを作成する必要がないため append() の方が速いそうです。この結果に影響を与えているかどうかについては検証してませんが。
あと python の1番は 48 バイトのようです。
give me a chocolate!