Flask tutorial + pipenv + heroku
いろいろと注意点があったのでメモしておく
mkdir flask-tutorial cd flask-tutorial mkdir flaskr touch __init__.py # http://flask.pocoo.org/docs/1.0/tutorial/factory/ の内容を記述 touch Procfile # Procfile の中身は web: gunicorn flaskr:'create_app()' ## pipenv設定 pipenv --three pipenv install Flask pipenv install gunicorn ## git設定 git init # http://flask.pocoo.org/docs/1.0/tutorial/layout/ から .gitignoreをコピー git add * git commit -m "initial commit" ## heroku設定 heroku create heroku config:set FLASK_APP=flaskr git push heroku master heroku ps:scale web=1 heroku open # http://XXX/hello に移動して、"Hello, World!" が表示されていることを確認
参考文献
それぞれを参考にして組み合わせた。
flask.pocoo.org 今回の環境で動かしたかったチュートリアルサンプル。ローカルで動かす手順しかない。
github.com herokuのチュートリアルで使われるコード。Djangoでpipenvは使われてない
github.com herokuのチュートリアルでFlask+pipenvを使っているが、create_app()を使ってない
github.com herokuのサンプルでFlaskを使っていて、create_app()を使っているが、pipenvを使ってない
usize からu32などへの変換
as u32
をつければ可能
let a: usize = 3; let b: u32 = a as u32;
文字列(String)のスライスは複雑
ちゃんと例の本にも書かれてた
文字列型 - The Rust Programming Language
let hello = String::from("abcabc"); let len: u32 = 6; // u32を指定すると下の行でコンパイルエラー let half = &hello[0..len/2]; // u32はスライスに指定できない
PythonProject 立ち上げ備忘録
久々に作ったら色々とやることあったので、メモしておく
環境
- Ubuntu 18.04 (あまり関係なさそう)
- python 3.7.6 (あまり関係なさそう)
- vscode + pyenv + pipenv vscode, pyenv, pipenv のインストール方法は省略
python のバージョン更新
pyenv を使って python の バージョン管理をしているので更新する
$ pyenv update $ pyenv install --list | grep 3.7.6 3.7.6
pyenv update を使うには設定が必要かも
pipenv設定
$ mkdir newProject $ code newProject
VScode上でターミナルを開く
pipenv --python 3.7.6 pienv install xxx xxx
静的型チェック、lint、formatterの設定を追加
pipenv install black mypy flake8
VScodeの再起動を行えばpipenvの環境を自動的に適応させてくれるようになる
ターミナルもpipenv環境を設定してから開くようになる 新しくターミナルを作った時だけだった
おまけ
gitignoreを作る時に参考になる
gitignoreを書く時に便利なテンプレート集 | cupOF Interests
python + vscode だと以下の2つを参考にするのが良さそう
gitignore/Python.gitignore at master · github/gitignore · GitHub
gitignore/VisualStudioCode.gitignore at master · github/gitignore · GitHub
追記
blackをpipenvで使うには、pipfileに
[pipenv] allow_prereleases = tru
が要りそう
ABC142
AtCoder Beginner Contest 142 に参加。
問題 | 解答 | 結果 | |
---|---|---|---|
A | ● | ● | AC |
B | ● | ● | AC |
C | ● | ● | AC |
D | ● | ● | AC |
E | ● | - | - |
F | ● | - | - |
A - Odds of Oddness
4分ぐらいで解けた。
場合分けに漏れがないか気になりつつAC
B - Roller Coaster
5分ぐらいで解けた。
普通にSortして間に合うか一瞬迷う。
C - Go to School
10分ぐらいで解いた。
添字ミスしそうだったけど、それほど手間取らず。
D - Disjoint Set of Common Divisors
20分ぐらいかかって、一回お手つき
約数のリストを最初求めればいいと考えたけど、途中で素因数分解した結果を使う方が良いことに気づく。
素因数分解の実装を拾ってきて(これでええんか?)、共通の素因数を求めて、表示。
AとBが共に1の場合は単純に、1を足すと2になってしまうケースに気づかず。一度WA。もったいない。
E - Get Everything
最後まで解けずに迷走してしまった。
すぐに動的計画法で解けそうだと気づいたが、2**Nで表して解くという考え方に気づけず。
途中でBFSやDFSで見つけられないか模索などしてタイムオーバー。
解法を見たら納得でした。
F - Pure
途中で問題を読んだが、グラフ系の問題の解き方が分からずにそうそうに諦めモード。
もっと修練を積んでから挑戦したい。
総括
Dまで解けて、前回よりは満足度高い。
最近動的計画法を勉強していたので、Eが解けなかったのが残念。
そろそろF問題にもチャレンジできるようになりたいところ
ABC141
AtCoder Begineer Contest 141 に参加。
問題 | 解答 | 結果 | |
---|---|---|---|
A | ● | ● | AC |
B | ● | ● | AC |
C | ● | ● | AC |
D | ● | ● | TLE |
E | ● | ● | TLE |
F | ● | - | - |
3完、3ペナ
A - Weather Prediction
3分ぐらいで解けた。
先頭の文字だけで区別すればOK
B - Tap Dance
7分ぐらい。
RとLの違いだけを気にすれば良い。
C - Attack Survival
10分ぐらい。
Nが10の5乗なので、単純にループでまわしても解ける。
一応Pypyで実行してAC。
D - Powerful Discount Tickets
この問題で残り時間をほとんど溶かした。
方針と実装はそれぞれできたが、NとMがそれぞれ10の5乗なので、O(NM)の計算量になると制限時間オーバーになる。
回避方法が分からなかったが、優先度付きQueueを使えばO(M log N) となり解けた。
Pythonだとheapq
Submission #7547729 - AtCoder Beginner Contest 141
最小を最大に入れ替えるために-をつけるのはよくやる方法。
E -Who Says a Pun?
解き方が分からず、力任せにやったら案の定TLE
Z-Algorithm なるものを使うらしい。
知ってないと解けない問題ぽかったなぁ。
Submission #7548216 - AtCoder Beginner Contest 141
F - Xor Sum 3
到達できず
総括
D問題で計算量を減らす方法を探しているうちにタイムオーバー E問題もアルゴリズムを知っていれば解けた問題 やはり基本問題もっと沢山解く必要があることがわかった回だった。
AGC38
AtCoder Grand Contest 38 に参加。
- どれも解けなかったので、ratingつかず。
- 集中できなかったので、A問題解けない時点で諦めてた
A - 01 Matrix
どういう形になれば条件を満たすパターンかわからず、終了。
解説を見てなるほどと思った。
部分行列を単純に作るだけで、ACなった。
Submission #7667154 - AtCoder Grand Contest 038
Noになるケースが実はないってそんなのあるんかいとは思ったけど。
B - Sorting a Segment
解けず。
C - LCMs
解けず。
D - Unique Path
解けず。
E - Gachapon
解けず。
F - Two Permutations
解けず。
総括
過去何度かA問題を解いたことがあったので、今回もいけるかと思ったけどそんなことなかった。
まだまだABCで頑張る。