競技プログラミング

訓練

ABC 114 C を解いて進数変換の関数をライブラリに追加した。同じ値であっても、何桁の数であると解釈するかで意味が異なることに気付けた。

ABC 322 F を解いた。遅延セグメント木にふんだんに情報を載せる度胸が問われる気がした。

ABC 323

ABC 323 に参加した。 4 ヶ月前にも同じような回があったので、特に山も谷も無かった。

A 問題 では VU.enumFromStepN 1 2 8[1, 3 .. 15] を使うべきだった。

B 問題 では (Down cnt, i) をキーにソートした。 C++ でも make_pair(-cnt, i); のようにタプルを作ってソートするらしい。競プロ界隈の外では、これを空で書ける人はあまりいない気がする。

C 問題 は貪欲だった。競プロを始める前はこの辺の問題が限界だった気がする。

D 問題 も貪欲だった。複雑なキーを優先度に使ったが、昇順に試せば良かった。

E 問題 は普通の DP だった。手続き型言語なら配列とループを使う。 Haskell においても同様に、ただし見かけ上ユーザ側のコードが純粋になる関数を作ってあった。

F 問題 は倉庫番だった。 C か D 問題で出てもおかしくないが、正しく解ける気がしない。

読書

CAREER SKILLS を 70% まで読んだ。アルゴリズムとデータ構造に関して、『大多数のソフトウェア開発者は、気の毒なくらいこの分野の能力が低すぎる。』 (P34) とあった。僕自身、もう少しできないといけない気がする。

ユニットテストが仕様であるなどの常識を補填できた。気楽に読めたのは中盤までで、チーム開発の章では急に重みが増した。自分の責任と呼べる範囲があまりに広い。

Misc

QuickCheck の動画作成のため、実況の文字起こしと合成音声による読み上げを試そうとした。

whisper

ぼそぼそっと喋って whisper-cpp (large モデル) で文字起こしした:

[00:00:00.000 –> 00:00:16.000] はい、現在、ウィスパーを使って自分の音声をエキストファイルに文字起こしして、それをさらに合成音声に喋ってもらうというのをやってもらいたいと思っています。
[00:00:16.000 –> 00:00:32.000] 合成音声のいいところは、たぶん時間補完が効くだろうというところで、例えば早回しにして再生したりとか遅くして再生したりするときも、補完をすればかなり聞き取りやすくなるんじゃないかなという気がしています。
[00:00:32.000 –> 00:00:44.000] だから人間だったらスピード1で喋ったり、スピード2で喋ったりというのをその場でやり直してくれるみたいな、合成音声はやり直してくれるんじゃないかなというふうに思っています。
[00:00:44.000 –> 00:01:03.000] 発話し直す。だから単に元のデータを倍速再生するとかってなったらクオリティが下がってしまうけれど、そのスピードで聞くための音を改めて作り直して再生できるというのが合成音声の強みなんじゃないかなと思っています。

かなり良い精度で破綻した喋りを再現されてしまった。あまりにも簡単過ぎる。

VRAM の大きな (> 10 GB) GPU があれば、 large モデルでもリアルタイムの文字起こしができるらしい。この程度の夢は手の内なのかと感動した。

Blender Text to Speech

上のように作成したテキストを合成音声に読み上げてほしい。また動画編集ソフトとの連携が取れてほしい。

実は Linux で最も実用的な動画編集ソフトは Blender らしい。そこで Blender Text to Speech (Youtube) で合成音声による再生を試みたが、 libespeak.so.1 へのリンクに失敗して詰まった。 NixOS が難し過ぎる、、