Puppeteerで複数のwaitを組み合わせる
puppeteer の page.click なんかを使うときに、waitForNavigation などと連続の await で組み合わせるとうまく遷移の完了を検知できずにつらいなと思っていました。 よくよく ドキュメント を読んでみると、Promise.all で同時に開始して、Promise.all を await するとよいと書いてありました。 ドキュメントはしっかり読むべきですね……。
puppeteer の page.click なんかを使うときに、waitForNavigation などと連続の await で組み合わせるとうまく遷移の完了を検知できずにつらいなと思っていました。 よくよく ドキュメント を読んでみると、Promise.all で同時に開始して、Promise.all を await するとよいと書いてありました。 ドキュメントはしっかり読むべきですね……。
今日は AGC054 に参加しました。レーティングは変化しませんが。 A 問題以外はとても解けそうにないので、とりあえず A 問題に挑戦しました。 見た感じ、答えは -1,1,2 のいずれかになりそうです。 が、3以上になる可能性もありそうで、入力サンプルからはその可能性の検証は難しそうでした。 そこで、一旦愚直に実装してみます。 10^5 だと N^2 は通らなさそうなので、なんとか高速化の方法を考えます。 まず、できるだけ最長の部分列を消したいので、先頭から見ると考えると、 末尾と一致しない文字ができるだけ早く出現するところから見るとよさそうです。 いちいち探索していると遅いので、グラフみたいに簡単に引けるようにしておきたいです。 今回は文字の種類が26種類で、末尾の文字に対して先頭の文字は異なる文字を探したいので、 文字種ごとに vector を用意して、それぞれに一致する文字以外の vector に push_back していきます (分かりにくい)。 そして、あとは DFS の要領で……。TLE しました。 即座に値を返す条件を追加して……。TLE しました。 ループ内で既に見た先頭部分は見ないようにして……。TLE しました。 DFS 全体で既に見た先頭部分は見ないようにして(!!??)、AC しました! 解説見たら始めの直感合ってそうですね。とほほ。
AtCoder の問題を毎日1 AC、コンテストにはできるだけ参加するようにしているのですが、 やっと茶色になることができました。 典型90問もできるだけ解きたいと思っています。
CpawCTF をネクストに参加する人から教えてもらったのですが、 全部解き終わることができました。 次は CpawCTF2 に挑戦してみようと思っています。 また TLS 証明書エラーが出ていますが……。
応用情報技術者試験に合格しました。 前日は一睡もできず不安でしたが、なんとか合格できたようです。 合格証書が郵送されてくるまでは確証がないのですが……。
さて、いよいよ ITA2 のデコードに進んでいこうと思います。 基本的には5ビットごとに切り出してコード表と対応させるだけなんですが、 その5ビットの区切りを見つけるのも一工夫必要そうです。 また、区切りとなるストップビットの長さも設定によってバラバラのようです。 そこで、スタートビットとストップビットの組み合わせが判明していると仮定して (といっても2パターンしかないですが)、ストップビットの長さについては 任意の長さを受け入れられるようにしようと思います。 まず、始めに出てきたストップビット→スタートビットの変化を検出します。 ここではデータ列内にマッチする可能性もありますが、始めの何文字かを捨てることを許容できれば、 後で説明するようにいつかきちんとした区切りを検出できるようになるので、 ここでは気にしないことにします。 次のビットからは、データ列です。5ビット連続で読み込みましょう。 (データ列が下位ビットからか上位ビットからかは分かりません……が、 これも2パターンなのでなんとかなるでしょう。) さて、ストップビットを検出するわけですが……、検出しません!! 長さも分からないですし、そもそもズレている場合もあるので、 次のストップビット→スタートビットの変化を検出するまで読み飛ばします。 そうすることで、ズレていても(多分)いつか正しい位置に補正されるわけです。 いや、試してないので分かりません!そう信じて実装しました!! ……という感じでデコードしてみると、うまくデコードできたようです。 よかった。。。
W3C による HTML5 が廃止されて、これからは WHATWG の HTML Living Standard が標準となるようです。 HTML5 のドラフトが発表されたのはもう10年以上前なんですね。 割とリアルタイムで見ながら成長してきたように思います。 とはいえ、10年前と今とでは Web の様相もかなり変化していますが。
英語ネイティブ話者ではないので、日々色々な英単語を知ることになるわけですが、 時々そんなものも1つの単語になっているのかと驚くことがあります。 「頭の中で延々リピートされる曲」が睡眠を妨げると判明 という Gigazine の記事を読んで、earwormという単語を知りました。 というかこれ “Earwarm” って誤字ですよね。報告しておきました。
atcoder-tools の docker イメージを Alpine ベースに変更しました。 ArchLinux ベースだと手元とほぼ同じ環境なのですごい楽なんですが、 今回はパッケージ数も少なくてそんなに大変ではなかったので Alpine ベースに変更してみました。 libc6-compat も入れるとよりよいのかもしれませんが、 どうせソースからビルドすることが大半なので、あまり関係ないと思っています。
atcoder-tools の docker イメージを作って、コンパイルなんかも自動でコンテナ内でするようにしました。 コンパイルオプションなんかもきっちり合わせて、軽微なエラーも同じ出力になるようにしたいです。