POJ3176
蟻本の練習問題として載ってるPOJの問題3176。 簡単なDPの解答。 大雑把にO(n2)で収まるぐらいの計算量で解いた。以下、解答
#include <cstdio> #include <algorithm> using namespace std; #define MAX_A 500 int n, a[MAX_A][MAX_A], dp[MAX_A+1][MAX_A+1]; int solve(int n) { int ans = 0; dp[0][0] = a[0][0]; for (int i = 0; i < n; i++) { for (int j = 0; j <= i+1; j++) { if (j-1>=0){ dp[i+1][j] = max(dp[i][j-1], dp[i][j])+a[i+1][j]; } else { dp[i+1][j] = dp[i][j]+a[i+1][j]; } ans = max(ans, dp[i+1][j]); } } return ans; } int main() { scanf("%d", &n); for(int i = 0; i < n; i++) { for(int j = 0; j <= i; j++) { scanf("%d", &a[i][j]); } } printf("%d\n", solve(n)); return 0; }
C++だけどほぼCみたいな。 配列を2次元にしたけど、逆三角形の部分は使ってないからメモリがもったいないかなと思った。1 次元にすれば節約できる。
タイガーブックを読む前に2
前記事で、smlnjのインストールをやった。 そのあと本通りにやると、
CM.make();
で以下のようなエラーが。
stdIn:1.2-1.11 Error: operator and operand do not agree [tycon mismatch] operator domain: string operand: unit in expression: CM.make ()
CM.makeは引数渡さなきゃいけないらしかった。
CM.make "sources.cm";
で、実行すると、
sources.cm:8.1-8.14 Error: Io: openIn failed on "/smlnj-lib.cm", No such file or directory
これは、実際はライブラリがインストールされてるけど、適切に探せてなかったらしい。 なので、sources.cmをsmlnj-lib.cmを以下に修正。
$/smlnj-lib.cm
で、次のエラーは
errormsg.sml:7.24-7.39 Error: unbound structure: TextIO in path TextIO.instream errormsg.sml:21.26-21.38 Error: unbound structure: TextIO in path TextIO.stdIn errormsg.sml:27.18-27.30 Error: unbound structure: TextIO in path TextIO.stdIn errormsg.sml:36.12-36.24 Error: unbound structure: Int in path Int.toString errormsg.sml:34.12-34.24 Error: unbound structure: Int in path Int.toString errormsg.sml:49.8-49.23 Error: unbound structure: TextIO in path TextIO.flushOut errormsg.sml:49.24-49.37 Error: unbound structure: TextIO in path TextIO.stdOut
こんなの。 次は、
この人のを参考にして、basisを追加。
$/basis.cm
そうすると、
Standard ML of New Jersey v110.85 [built: Sat Dec 22 16:51:02 2018] - CM.make "sources.cm"; - Parse.parse; val it = fn : string -> unit
Parse.parseが使えるようになっている。
djangoとvueのテンプレート
djangoのテンプレートエンジンとvue.jsのテンプレートの構文が似ているので、同時に使うのは厳しいと思っていた時期が僕にもありました。
いちいち、別の静的ファイルに書き出してscriptタグで指定は正直だるかった。
たまたま検索かけてみたら、vue.jsのdelimitersを指定するだけで、回避できるっぽい。
<html> <head> <meta charset="utf-8" /> <title>Delimiters Sample</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <p>[[message]]</p> <ul> <li v-for="m in items" :key="m.id"> [[m.text]] </li> </ul> </div> <script> var app = new Vue({ delimiters: ['[[', ']]'], el: '#app', data: { message: 'Hello Vue', items: [{id: 1, text:"sample1"},{id: 2, text: "sample2"}], }, }) </script> </body> </html>
delimitersで色々変えられるみたいなので、いちいち外部にやったりしなくてもいい!!最高!!
python3系とherokuでdjango channelsのデプロイ
django channelsのdeployingを見れば載ってる。
""" myproject/asgi.py """ import os import django from channels.routing import get_default_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") django.setup() application = get_default_application()
まずはasgi.py。
Procfileは以下のように。
web: daphne -b 0.0.0.0 -p $PORT myproject.asgi:application -v2
たまたまネットサーフィンしてたらworkerつけなくても大丈夫だよって書いてあったのでこれで実行できた。 daphneだけ実行でオッケーっぽい。
あと、早くするならuvicornっていうのを使うといいらしいのでやってみたいと思う。軽量なasgiサーバーらしい。 アドオンはredisを入れ忘れないように。
djangoのpythonコード内で時間のフォーマットを取得する
djangoでローカライズされたフォーマットで時間の文字列を取得したい時は、
from django.utils.formats import date_format
をDateTimeFieldとかDateFieldと"DATETIME_FORMAT"を渡したりすれば文字列が返ってくるけど、時間があってない(l10nされてない)。 そんなときは、諦めてテンプレートがレンダーした結果を返してもらえばいい。
from django.template import Context, Template def get_datestr(datetime): t = Template("{{ date }}") c = Context({"date": datetime}) return t.render(c)
こうすれば、ローカライズされて時間も日本のだし、フォーマットも日本のになる。まぁローカライズの設定がちゃんとしていたらだけど。
ちなみにローカライズのフォーマットは
django.conf.locale.ja.formats
にある。 ちなみにちなみにこのフォーマットは普通のフォーマットじゃないみたい。 websocketやるとTemplateをconsumers内で使った方がいいんじゃないかとふと思った。 あと数日以内に完成するかなぁ
verilogを書くことになりそうなので。
CPU作るぞ〜っていうことでverilogを読むことになりそうなので、書いてみた(は?w)
使用したツール群
- icarus verilog
- gtkwave
チュートリアル
インストールは省略
/* AndNand.v */ module ANDNAND(a, b, o1, o2); input a,b; output o1,o2; and AndInstance(o1, a, b); assign o2 = ~(a&b); endmodule
o1 にand、o2 にnand。 assignとプリミティブモジュール?を使ってみたパターン。 バス幅とかは軽くみただけだからまだ何も言えないかなぁ。
/ * AndNandTb.v */ module ANDNANDTB; reg a, b; wire o1, o2; ANDNAND mod (a, b, o1, o2); initial begin $dumpfile("andnandtb.vcd"); $dumpvars(0, ANDNANDTB); $monitor("%t: a = %b, b = %b, o1 = %b, o2 = %b", $time, a, b, o1, o2); a = 0; b = 0; #10 a = 1; #10 a = 0; b = 1; #10 a = 1; #10 a = 0; b = 0; #10 $finish; end endmodule
コンパイルのコマンド
% iverilog -d AndNandTb -s ANDNANDTB AndNand.v AndNandTb.v
gtkwaveがうまく入っていれば、openでシミュレーションがみれる。
% open andnandtb.vcd