週記 2023/04/17~2023/04/23

2023/04/17

眠れず9時ごろに活動を再開。ピーナツバタートーストを食べたりした後、テレビを見たりしてごろごろし、14時ごろに眠る。

21時ごろに起きる。お昼はどこへ?

夕食。ししゃもがうまい

妖怪数学しばき。絶対値を含む方程式をいじったりした。

2023/04/18

12時ごろに起きる。

30分ほど布団でもぞもぞしてから外出の準備を開始。これが遅刻の遠因となった。ここ最近、ほとんどの用事に遅刻していて本当によくない。なかなか難しいわね...

普段だったらファミリーマートに寄ってファミチキとかおやつを買う所だけど、今日は元気が無かったので行かなかった。2週間連続でファミマに行っていないな...。

変な姿勢でゴロゴロしていて、お茶が飲みたくなったので立ち上がろうとしたら、変な姿勢だったからか足首に大きな負荷がかかったように感じた後、じんじんと長期的な痛みが出てきた。結構痛くて、普通に立ち上がろうとするときも体重移動に気を付けないと「あうっ」となってしまう。続くようだったら病院に行くのも検討しないといけない(大胆に検討)

2023/04/19

19時ごろに起きる。

足首の痛みは気にならない程度まで治まっていた。やったぜ

クソデカコロンを食べる。コロンと言ったら、小分けの袋に金太郎飴みたいな感じで輪切りにされたものが普通。先日伊丹空港に行ったとき、売店で一本まるまるのコロンが入ったものが売られていたので、うっかり買ってしまった。

味は普通のコロンと一緒で、うまい。コロンだ

2023/04/20

眠れず、7時ごろに活動を再開する。

朝食を散って寝ようと思っていたけど、ラーメン屋に行こうぜという誘いが来たので行くことにした。以前も行ったことがある比較的新しいラーメン屋で、かなり良かったのでもう一度行きたいと思っていた。ちょうどいい

ラーメンを食べる。白湯醤油なんちゃらとか、そういう感じだった気がするな。オプションで味玉を追加したんだけど、これがかなり良かった。半熟卵界最強。ラーメンを食べ、近辺を徘徊した後帰宅した。

妖怪PCいじいじ。Brainfuckの処理系をいじる。中間表現の実装が変なところにあったり、何のためにモジュールを分けているのか分からない状況で、まずはこれを良い感じにしようという気持ちでいじったりした。とりあえず動いたらヨシ!でどんどん書いた結果こうなってしまい…。とりあえず動いたら…は大事だと思っているけど、その状態で放置すると良くないなと思った。// TODO: なんとかする

2023/04/21

16時ごろに起きる。

Brainfuckの処理系をいじる。昨日からやっていた中間表現の移動を終わらせて、命令を整理したりした。いい感じ。

アルファベットの"a”を書いてみる。自分は"a"を書くのがバチクソ苦手で、これまでなんとなく避けていた。数学とかで使うイタリック体の方を書いて回避したりしていた。ふと、これではいかんと思い立ったのでiPadと紙に書いて練習をした。書き方は理解できた気がするので、後はいかに体が覚えてくれるかという感じ。

そろそろ学期が始まるので、危機感というかなんというか。気持ちの準備をしていかないといけないわね。

2023/04/22

眠れず、10時ごろまで布団の中でもぞもぞしていた。

9時になった途端に選挙カーからの演説が始まって面白い。ちゃんと調べてみると、朝8時から夜20時までの活動が認められているそうな。ちょっと遅れて開始したのか、偶然9時ちょうどに選挙カーが接近したのか。真相はやぶの中...(しょぼい真相だ)。

19時ごろに起きる。

今日はABCに出るつもりなので、気持ち早めに夕食を食べる。20時50分くらいに食べ終わり、ギリ間に合った。

前回は「鳥つくねを食べるのに夢中だった」というしょぼい理由で出場するのを忘れてしまったので、今回は頑張りたい...。とか考えながら、A問題を開く。

A問題の実装を早々に終えて、提出ボタンを押してもなかなか提出一覧の画面に遷移しない。開始直後はアクセスが集中するとはいえ、流石に遅すぎるな?と思っていたら"502 Bad Gateway"と返ってきた。

反射的にリロードしてみると、問題すら開けなくなってしまった。前回同様にDDoS攻撃を受けているという可能性が脳裏をよぎる。

とりあえずTwitterを開いて「502出てる」とツイートし、様子を伺ってみる。TLに同様のツイートが流れてきたので、これは全体的な障害だと認識した(502でおま環というのも変だが)。「unratedになりそうだな~」とは思ったものの、やることは変わらないので続きの問題を解いていく。

D問題は (覚えている限り) 本番では初めてのインタラクティブ問題だった。ジャッジ側に何回か質問をして答えを求めるという問題で、ぱっと見全く解法が浮かばない。

https://atcoder.jp/contests/abc299/tasks/abc299_d

ジャッジが最大105文字の文字列を持っていて...文字列は0か1で構成されていて...。その中から、隣り合う文字が異なる場所をたった20回の質問で当てないといけないのだから恐ろしい。

何も思いつかないので、先頭から順番に質問していくのを書いて提出してみた。当然WA。iPadに手計算したものを書いたりしてみると、なんとなく解法が見えてきた感じがした。うまく説明はできないが、どうも二分探索ちっくな解法で解けそうだ。実装して提出してみるとWA。え~~~~

大枠から間違っているのか、細部のミスがあるのか...。ただ、他の方針は見えてこなかったのもあり、バグ取りを開始した。コードとにらめっこした結果、回答を出力する際、配列のインデックスのままの整数を出力していることが判明。ちゃんと1を足したり引いたりするように修正するとACできた。ぐぬぬ...。

配列のインデックスと、外向きに出力する値を変換する際に1を足し引きし忘れるのはどうしたものか...。「これはインデックス!」と意識できていたら良いのだけど、今回の場合、配列の範囲内に収まるかの比較とかが入り乱れていて、意識しきれていなかったように感じる。あと、似ている部分をコピペしたのもいかんかったかもしれん。ぐぬぬ...。

一応解法

ジャッジが持っている文字列Sについて、回答側が知っている情報をこのように表記する。

0?????1

この場合、?になっている部分は不明で、そうでない部分は既に文字が確定していることを表す。

問題文には、文字列Sの一文字目は0、最後の文字は1を満たすと書かれているので、初期状態は以下のようになる。

0?????1

とりあえず真ん中を開けてみよう(サンプル1の場合)

0??0??1

真ん中の文字は0だった。この場合、文字列のうち初めの3文字(0??)は捨てても良い。1文字目が0、最後の文字が1という性質は変わらない。

0??1

2文字目を開けてみる

00?1

同様に最初の1文字(?)を捨てる

0?1

真ん中を開ける

011

答えは5

どうやらこれはクソデカ文字列でも通用するらしいので、良い感じにACできるぽい。

2023/04/23

18時ごろに起きる。

ラーメン屋に行く。麺固めネギ多めがいつもの調整。今日は機嫌が良かったのでキムチとチャーシューを追加してしまった。ラーメンだけだとちょっと足りないかな?と思ってチャーハンとのセットにしたが、これが悪手だった。ラーメンを食べた後にチャーハンを食べて、後半は若干厳しかったわね…。ラーメン+チャーハン半分がちょうどいいのかしら。うまかったのでヨシ!

おねむ