emscriptenをちょっといじっていた。drogonでバックエンドをC++で書く術を学んだので、フロントも統一してC++で書けないかと思ったのだが。
canvasに描くような用途で使いたいのだが、微妙な選択肢が多い。
webglを直接触るようなやり方はJavaScriptが滲み出すぎていてかっこ悪い。これならさすがにJavaScriptを直接書きたくなる。
https://web.dev/drawing-to-canvas-in-emscripten/
C++らしく書けそうな選択肢としてはSiv3DとかSDLとかを使う手段があるっぽいけど、まずSiv3DはUnity for webGLに似たロード画面があるので話にならない。もうちょっとWebに溶け込む形で使いたいので、そういう意味ではSDLは結構良さそうなのだが、測ってみるとやや重そうに見える。速いのがwasmの売りだったと思うのだが、軽いわけではないのだろうか。というか、抽象化レイヤのオーバーヘッドが大きいのではという気がしなくもない。実際のところは分からんが。
localhostで動かしていると重いなどという情報も出てきた。ほんまかいな。(さすがにちょっと眉唾な気がするが)
https://qiita.com/beijaflor/items/9e08d038bcddd28d7e28
今日やった競プロの問題。
競プロ典型90
002 Encycropedia of Parents: 最初「辞書順」という文言を見逃していた。'(‘と’)’を01に結び付ければ2進数値の大きさと辞書順が対応付くので、bit全探索してかっこ列の条件に合うものだけを拾えば良い。
003 Longest Circular Road: 木の直径+1すればよい。木の直径はdouble sweepで容易に求まる。他のやり方も覚えた方が良かったりするんだろうか?グラフの直径は求まらないと聞いたが。
004 Cross Sum: 各行各列総和をとって簡単な包除原理をやるだけ。
005 Restricted Digits: 小課題1, 2までは自力で行けた。DPによる$O(NBK)$、行列累乗で$O(B^3\log N)$になる。小課題3は疎行列であることを生かせば解けないかと思ったのだが、行列累乗で累乗を重ねていくうちに疎でもなんでもなくなってくるのでアウト。最初の1回目の乗算くらいは多分$O(B^2K)$くらいになっていると思うのだが、その内普通に$O(B^3)$になってしまう。
解説を読んだらなんかダブリング的な何かで$O(B^2\log N)$に出来るとあったのだが、全く理解できていない。
今日はちょっと作りたいものがあったので一日それに集中しようと思ったのだが、競プロをやってたら日が暮れたのであきらめた。
Categories: 未分類