パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

朝飯前の問題

2019-03-06 | python入門(すぐさまマスター)
1) 圧力鍋で炊飯中に解いた問題
for i in "*"*int(input()):
 n=int(input())
 if n%2==1:print(n)
 else:print(n+1)


入力は
3
51
50
22

出力は
51
51
23

偶数だと1たす謎問題



2) 
s=input()
s=s.replace(" ","")
for i in range(30,1,-1):
 s=s.replace("up"*i,"^"+str(i))
 s=s.replace("down"*i,"v"+str(i))
 s=s.replace("left"*i,"<"+str(i))
 s=s.replace("right"*i,">"+str(i))
s=s.replace("up","^")
s=s.replace("down","v")
s=s.replace("left","<")
s=s.replace("right",">")
print(s)


入力
left down down down up right down
(最大30個まで)

出力
<v3^>v

文字で書かれた方向を記号に変える。同じ方向が重なったら記号+繰り返す数にさらに変換という謎問題
あと<は半角文字だとhtml記号と認識するので全角にしてます。


いずれも短い文字で解くことが推奨されている問題なのでインデントを1つにしています。



プログラムの説明なんとか2割に伝わるように追記、かえってわかりにくいかも
1)
for i in "*"*int(input()):
#ループを入力値だけ回します
# for i in range(int(input())):普通はこっちなのですが短くするための謎技です

 n=int(input())
 if n%2==1:print(n)
#nが2で割って余り1ならnを表示(n+1してprint(n)ならもっと短くできます)
 else:print(n+1)
#偶数ならn+1を表示



2)
left down down down up right down

これを置き換えしまくって答えをだします
s=s.replace(" ","")
空白1文字を全部消します

leftdowndowndownuprightdown(変換後の文字列)

for i in range(30,1,-1):
iを30から2まで1ずつ減らした数列の中で回します。
他の言語だとだいたい初期値から終わりの値(to)までなのですが
Pythonはin iの値が加算されるのではなく(30,29,28,...,3,2)の中で順に変わります。

s=s.replace("down"*i,"v"+str(i))
pythonは文字列に足すことも掛けることもできます。iが3ならこんな感じで置き換えられます
s=s.replace("downdowndown","v3")

leftv3uprightdown(変換後の文字列)

ということでかなり力技の変換しています。



最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。