なが月・33日目

33日目

午前

昨日のABC139E実装においてAの各要素をリストではなくdequeに置き換え、popleft()することでより直感的な答案となった(deque変換コストで多少遅くなった)。

C++でも実装しようとしたが、std::deque型のオブジェクトを単純に代入すると自動的に深いコピー(なが月・8日目でいうプリントコピー)を行ってしまうようで、Aの要素たるdequeが永久に空にならない問題に遭遇した。参照代入として

auto& matchesOrderForThisPlayer = A[playerIdx]

としなければならない。また配列の中で最大のものを探すmax_element()は値そのものではなくそれが存在するメモリアドレス=ポインタを返すので、coutに出力するにはその実体を参照するため間接参照演算子*を使ってcout << *max_element(...)と書く必要がある。渋い顔をした。

これらの落とし穴に対処したら問題なく動くコードができたが、Pythonによる正しい手本があるから比較的早く書けるのであって、問題の解法と関わりのない参照・ポインタについても考慮しながらC++を書くのはコンテスト中厳しいものがある。速度と貧弱なコード補完というデメリットを踏まえてもなお、簡明で実行時エラーの特定が容易で素早く書けるPythonを捨て去るのは難しい。

午後

 AEでインフォグラフィックの作り方を理解した。easingを適用したパス・トリムアニメーションだけでなく、アンカー中心に円グラフを大きく回転させることでグラフの完成まで静止している部分がなくなり、値がまさに集計されているかのような印象を与える。Adobe Stock Photoのチュートリアル用素材を利用しているので習作をここに貼ることができないが、練習を通して「それっぽさ」を与える要因を考える参考になった。

 水面の波紋エフェクトの構成は理解したが、状況に応じてどの値をどれほど変更すればよいのかという根本的な理解に至らず断念した。

https://helpx.adobe.com/after-effects/how-to/neon-glow-effect.htmlでは発光エフェクトにおいて三種類を組み合わせることを知った。すなわち発光している本体、その光が周辺の物体を照らして明るくなっている部分、そして暗いところで明るいものを見たときの目の反応(眩み)を模した部分である。設定項目が多くあるので、明日以降に何を設定したものをどのように配置するかよく確認しておきたい。

Viveportの審査で不具合の報告があり、アップデートがリジェクトされてしまったのでしばらくはまたVR制作を続けることになりそうだ。