2023/1/14(土)

ARC153に出た。半年以上ぶりのARC出場。とりあえず冷えはしなくてよかった。

A: 問題文通り。

B: 各座標のマスが最初のどの座標マスの数値を持っていることになるかを考える。グラフにしてやるとよい。X軸とY軸は独立して考えられる(ここに気が付くのに時間がかかってしまった)。

2回操作したときにどうなるかを考えると分かるが、このグラフの形は45度傾けたZ型にしかならない。奇数回操作後は鏡Z型で偶数回操作後はZ型になる。切片と偶数回目か奇数回目かだけ分かれば決まるので、切片と操作回数だけ管理すればよい。

C: 何も分からなかった。特殊な場合に関してはいくつか考察ができたのだが。


Discord botが作りたくて少し勉強をした。Pythonは出来れば書きたくなかったのだが、今一番便利なライブラリは残念ながらPython製のようなのでしぶしぶ使った。Discord.pyというライブラリ。

ボイスチャンネルに参加していろいろ喋ってくれる感じのBOTを作りたかったので、音声合成の力を借りた。VOICEVOXの力は素晴らしい。フリーだし品質高いし、GUIだけでなくAPIもある。最初調べてなかなか出てこなかったのだが、localhost:50021を叩けばREST APIで合成音声データが取れるようになっている。便利。

以下ハマったところ。

  • PythonのRequestsを使うときは、http://localhost:50021ではなくhttp://127.0.0.1:50021とした方が明らかに速い。2秒くらい違ったのだが、DNS解決に2秒もかかるか普通?強い人に聞いたら、IPv6にチャレンジして失敗しているとかの可能性が考えられるということだった。
  • メッセージでBOT自身がメンションされているかを判定するには、message.raw_mentionsにアクセスするのが良さそうだった。単純にidのリストが入っているので、自分がメンションされているかを判定するだけなら一番扱いやすい。そういう用途でなくて、メンションされたユーザーのデータを取りに行こうとするならmentionsを見た方がよい。
  • ボイスチャンネルで音声を発信する際、Discord.pyではAudioSourceという抽象クラス型のオブジェクトを渡す仕組みになっている。こいつにはreadというメソッドを実装してそこの戻り値として音声データを渡す感じになっているのだが、この時の音声データはbytes型でなければならない。公式の説明だとbytes-like objectらしいのだが、bytearrayでは何やら例外が飛ぶ。

もうちょい便利な感じに作りこんでいきたい。便利というか、人っぽい存在感を醸し出してくれる感じに。進捗を見張ってて欲しいので、(BOTだけど)人が見張ってくれているという感触を掻き立てる感じにしたい。

Categories: