Python3の勉強をyukicoderでやる
pythonは正直あまり好きな言語ではなかったのですが,numpyが魅力的すぎるため,競技プログラミングで少し勉強してみました.
大学の講義内容がさっと手元で動かせないんですよね.octaveは重すぎるし.
記事を書いている人の前提知識度
昔に少しだけ書いたことがあります.簡単なゲームを作りました.
notepad.exe [WP]no.014 python独習
『なんかブロックをインデントで判定してる』『タプルとかリストとかの概念がある』という雰囲気は覚えてますが, 実用面は全く忘れました.
solve
No.268 ラッピング(Easy) - yukicoder
- http://yukicoder.me/submissions/174424
- 昇順,降順ソートしたい問題.
- Python2とPython3でかなり違うらしい.
input()
ですら違いがある. aa.sort()
でリストをソートできる.reverse=True
と指定すれば逆順になる.- 辞書っぽい引数の指定面白い
- 破壊的.破壊出来ないリスト(例:10行目)に対してソートしたい場合,
sorted(arr)
をやる.
range(N)
は,Rubyでいう(0...N)
みたいなものprint a
という記法はPython3では使えない.
No.136 Yet Another GCD Problem - yukicoder
- http://yukicoder.me/submissions/174503
- は2に固定して良い.あとは全ての組み合わせを全探索する.
- PyPy3がRuntimeError.math.gcdを使うにはバージョンが足りないらしい.
- Python3は通った.
import math
すると使える.
- 割り算をすると,例え整数同士でもFloat型になる.
int(nm)
でキャストできる.
max
は普通に関数として使える.Rubyみたいなインスタンスメソッドではない.
No.80 四角形を描こう - yukicoder
- http://yukicoder.me/submissions/174509
- 思考停止全探索.xとyを適当に全部回す.
if x*2+y*2>l : continue
みたいな書き方ができる.HSP*1っぽい.- 提出コードからは消したけれども,プログラムを中断させたいときは,
import sys
したうえでsys.exit()
する.- うっかり
sys.exit
と書くと終了しない.
- うっかり
No.204 ゴールデン・ウィーク(2) - yukicoder
- http://yukicoder.me/submissions/174566
- 途中で実装方針を変えたため無駄な記述がある.
- D日すべて使う必要があるかどうかが問題文・テストケースから分からない・・・と思ってたら『最大』って書いてあった.
- test13.txtを見れば分かるように,D日すべて使う必要は無い.
- 有給休暇を挿入する始点xを全探索する.
input()
は改行文字を含まない.++var
は+ + var
として解釈される.もちろんvar++
はエラー.- strのi番目の文字は
str[i]
として取り出せるが,書き換えは出来ない.- 文字列の部分書き換えをするには,
str[:i]+'o'+str[i+1:]
と書く必要がある.
- 文字列の部分書き換えをするには,
- Ruby同様,文字列の掛け算ができる.
- 文字列の範囲に
-1
を指定すると,末尾を指定したことになる.Rubyと同じ.
No.77 レンガのピラミッド - yukicoder
- http://yukicoder.me/submissions/174570
- 理想のピラミッド△を作っておいて,差分を求めることでコストを得ることができる.あとは全探索.
- 予めブロックが足りるかどうか判定したうえで,『ブロックを除去する』を1コスト,『ブロックを積む』を0コストとして計算.
- sample5.txtのように,フィールドは無限大に広いものとして考える必要がある.しかし,制約から199で抑えて良い.
- 提出コードでは
aa+=[0]*100
という感じで無理やり増やしてる.
- 提出コードでは
sum(aa)
で総和が取れる.0
はFalse
として解釈される.
No.290 1010 - yukicoder
- http://yukicoder.me/submissions/174571
- http://yukicoder.me/submissions/174573
- 00,11,0101,1010が存在するかどうか調べる.
- 存在するかどうか調べるために,正規表現を使う.
*1:HotSoupProcessor