○個のタブを閉じますか?」って聞かれるようになっている。正確にいつからこうかは知らないけど、以前はたしかに違っていた。ピン留めタブは勘定に入っていないけど、空白の「新しいタブ」は数に入っている。2個の新しいタブを閉じるときに確認してくれる親切! さらに言えば自分はこれら複数のタブを閉じてはいない。次に Firefox を起動したときにはこれらのタブが開かれる設定になっている。一時的に Firefox を終了してタブが見えなくなっただけであって、タブを閉じてはいない。「
複数のタブを閉じるときに確認する」という設定の字面を追っているだけのまったくナンセンスな挙動だと思う。なぜ確認が必要かと言えば、失われるからだ。それが1個のタブであれば容易に復旧できるけど、100 個のタブを閉じてしまったらたいへんだ。だから重大な結果を引き起こす前に確認をする。失うものがないときに確認が必要かって話。以前の Firefox はこのへんのことがわかっていた。だから日記に書いた。たしか Windows についても同時に書いた。自分はファイルをごみ箱に入れるときにいちいち確認メッセージを表示させないんだけど、それはごみ箱というのがバッファであり復旧のための仕組みなのであって、取り返しがつくことを確認されるのはわずらわしいだけだからだ(10 回確認したらミスが 10 倍減るという考えを自分は支持していない)。なんだけど、ネットワーク越しのファイルをごみ箱に入れる操作をすると、そのときに限ってはこのファイルを完全に削除してもいいかと確認のメッセージが表示される。操作が同じだけど結果が異なるときに、重大な結果を引き起こす前に確認が入る。今の Firefox はなんの必要があると思って確認をしているのだろうか。文言と形式に従うだけのあほであろう。■Firefox (あほ) と Windows のごみ箱/エクスプローラー (えらい) について書いたので Edge の馬鹿についても書こ。バックグラウンドで勝手にアップデートしてるんだけど、その度に保存済みのセッションを捨てて勝手なページを表示するんだよね。Edge は常用してないし失われたセッションも1つのページだけなので開き直すのは容易だけど、面倒だし信用に値しないのは間違いない。ユーザーの手間を増やし進捗を失い時間を奪うプログラムはただただ有害。
婚約指輪 engagement ring 《◆engage ring は誤り》」(ジーニアス和英辞典) って書いてあった。エンゲージリングが和製英語だって初めて知ったよ。婚約指輪という概念が各国各言語に存在するかという疑問がまだありますが。■~メントからの連想なんだけど、アポイントって言葉の中途半端さはなんだろうね。ベースアップをベアと呼ぶのと同じ大胆さと意味不明さで appointment はアポで十分なのであって、それをアポイントと引き延ばすことに肯定的な意味が見いだせない。■ベースアップを調べたら同じくジーニアス和英辞典に「
ベースアップする raise the wage base 《◆ base up は誤り》」って書いてあって、ベアって単語のどこにも本当のことがなくて、和製英語の略語に見せかけてこれこそが正真正銘の新語なのではないか。無から意味を生み出しているのではないか。■言葉の解像度が低すぎて engagement と commitment を分ける機微がわからない。ていうか訳語をひとつひとつ挙げていくのも難しい。すべては雰囲気です。強い関わりとか involving myself 的な雰囲気。
up<k
を up<=k
にした。頂点1に向かって K 階層遡っても、それって1手前にいた頂点だから無駄じゃね? と思って、移動先を K 階層下、1階層上のち K-1 階層下、2階層上のち K-2 階層下、……、K-1 階層上のち1階層下に限定していたのだけど、まっすぐ K 階層上も移動先に加えるべきだったということ。なぜか。折れ曲がるように移動して到達した頂点からまっすぐ K 階層上というのは、初めて訪れる場合がある。K 階層まっすぐ下るだけが移動じゃないのだから「1手前にいた頂点だから無駄じゃね?」は勘違い。■Crystal で通している人の提出 #67550795 を見ましたが、えー、全然違うー。Ruby で同じことをして通りますか? だったらだいぶ短く簡潔に解けるということだけど。■■■寝て起きたらフレンズさんのツイート(1、2)や他のブログで読んだことが頭に入ってきた気がする。たぶんだけど BFS をするのかな。頂点ごとに訪問済みフラグを持つわけだけど、追加で K 状態を区別する。これは K 歩の何歩目で訪れたのかを表す。さらに追加で直前の頂点も持つ。直前の頂点へは次の移動ができないのでこれも状態として区別する必要がある。そうすると状態数が NNK になってよろしくないのだけど、直前の頂点が2種類あるとその後の遷移はすべて網羅できているので、3番目以降の直前の頂点フラグはすでに立っているものとして良い。ということが書いてあって、同じことを(もしくは不正確なこと不十分なことを)繰り返しているだけだと思うんだけど、昨日説明を読んだときは何を言っているのかちんぷんかんぷんだったんだよね。何度文字列をなぞっても頭に入って来なかった。脳みその可塑性応答性が低い!■提出 #67610103 (WA×34/AC×19 / 665 ms)。2NK 状態の BFS を書いてみたけど WA だった。サンプルは通るんだけど何が足りないんだろう。■提出 #67610224 (TLE×2)。バグの原因はちょうど K ステップの移動の次の一歩は直前の頂点がどこかに関係なく移動できるということを考え忘れていたこと。これを直して十分に遷移ができるようになったら WA がなくなって TLE が2つ出た。3.3 秒 以下の 3098 ms と 3225 ms だからあとちょっとなんだよなあ。■提出 #67610541 (AC / 2809 ms)。変なことしないで3要素の配列をキューに入れたら良かった。自分で書いたから Crystal の人のスクリプトも読めるようになったけど、N+N の状態数で K ステップを1単位とする BFS をやっているだけに見える。本当に? それだと K ステップの中間ステップが重複する無駄が生じない? (K 歩ごとに直前の頂点フラグがリセットされているようだから)幅X以内であれば一つの電波塔で賄う」の解釈が自分と違うんだよな。前から見ていくと、(1,4)←距離3以下だから同じ基地局、(4,5)←距離1だから同じ基地局、(5,8)←距離3だから同じ、(8,11)←距離3だから同じ、(11,12)←距離1だから同じ、結局「幅3以内であれば一つの電波塔で賄う」ことにすると {1,4,5,8,11,12} になって必要な基地局が1つだけなので条件が緩い。次は0と3の中間である1か2を条件にして二分探索を続けよう、ってならない? その後幅1と幅2のどちらを条件にしても今度は必要な基地局が {1},{4,5},{8},{11,12} の4つになって使える基地局の数(3)を上回ってしまうので、解は2と3のあいだ!(困る) というのは別の話でありもう書いたこと。■もうひとつの解釈がわかった。左から見て最初の家が1にある。ここから幅3を数えて4までの家を1つの基地局でまかなう(4に家がなくて3に家があるならもちろん3までしかカバーしない)。次は5に家があるから幅3として8までの家をカバーする。……。これはカバーする範囲と範囲のあいだの隔たり具合を無視しているという点で合理性がないんよね。思いつかない。
途中、どれくらい高い地点を通ることができるかは大気圧および液体の蒸気圧と密度による。最高地点において管内の圧力が液体の蒸気圧に近づくと液体はキャビテーションを起こしはじめ、気泡の膨張が重力による圧力差を吸収してしまい、いずれサイフォンは停止する。」 へー。持ち上げるためには大気圧に負ける圧力が必要で(?)圧力が低くなりすぎると水中から気体が出てきて(沸騰?)吸い込めなくなる? 気泡が圧力の伝達を阻害するのは油圧ブレーキのエア抜きが大事な理由だし長い下り坂でエンジンブレーキを利用すべき理由でもある。大気圧の大きさは気泡が生じるまでの限界を高めそう? 大気圧を固定したとき、液体が水銀のときの限界が約 76 cm で、水のときの限界が 10 メートルくらいに決まっているらしい。大気圧と液体の蒸気圧と液体の体積当たりの重さ(密度の言い換え。物理をやらなかったので重さと質量の区別は曖昧。面積当たりの力である圧力に呼応するもの?)の3つのバランス。水銀の限界は 760 mmHg (大気圧) と符合しているけれど、じゃあ水銀の蒸気圧が限界に及ぼす影響はどこに読み取ればいいのだろう。蒸気圧って? 「
2010年、オーストラリア・クイーンズランド大学の物理学者、スティーブン・ヒューズが辞書など社会で一般に説明されているサイフォンの原理は誤りであると指摘した」とも書かれていた。今からたった 15 年前のこと。みなさんそれも踏まえたうえで「わかる」「あたりまえ」という反応をしているのだろうか。自分は名前と結果しかわかりません。
a,b,c
)を並べて前後2項で r に関する等式を作って(b/a==c/b
)、通分したら b*b==a*c
で判定できるらしかった。なるほどゼロがあると土台が成り立たない。Ruby には組み込みで Rational (有理数) クラスがあるのは知ってるんだけど、計算量が読めないのと、Rational がないと解けないとなると Ruby でないと解けないということになり、それは甘受できないのだった。オーバーフローに対する警戒心のなさなど普段は Ruby に甘えまくりだけども、謎の線引き。■E 問題 Reverse 2^i。2分割してそのままか前後を入れ替えるか。■F 問題 No Passage。やるべきことがよくわからなかった。できるできないは別として G 問題の方が求められていることがわかりやすかった。F 問題。あるマスの移動先(最大4つ)のうち2つまでゴールまでの手数が確定しているなら、大きい方+1 の手数でゴールできる。0手ゴールからじわじわ確定範囲を広げていく。終了2分前に間に合わせた提出 #67355089 は TLE×6 だった。判定と書き込みに時間差を付けてきっちり分けないとサンプル3が合わないのだけど、その結果キューに同一座標が複数回入るようになってしまった。9行目で事後的に弾いているけど、Ruby でその無駄は許されなかった。キューに入れましたよということだけを記録するメモを用意すると TLE×5 に減ったけどまだダメ。2次元座標を1つのキーにして配列参照を減らしたら TLE×3 だけどまだダメ。予めキューを H*W 本用意するのをやめて今と次の2本だけにしたり、キーの増減を代入してしまって演算子を減らしたりしてやっと AC (#67360123)。時間内の提出はたしかに多少の無駄はあったけど、許されないほどではなかったと思う。そこから AC までの改善は、はっきりいってしょうもない。■G 問題 Big Banned Grid。問題の概要はすぐわかる。それをどう実装するか。思いつけば実装は軽かった。提出 #67363448 (AC)。グリッドの左辺下辺に接した障害物からスタートして、障害物を伝って上辺右辺まで辿り着けるかどうか。F を捨てて G に粘着していれば時間内に解けたかもしれんけどね、気持ちが負けてるからあわよくば G をという発想にならないのであって、実際には可能性はなかった。■G 問題は ARC076-C「Connected?」っぽさがある。どちらも何が障害なのかを見切るのが大事で、実装は難しくないという点が共通。障害の正体も共通。これは解いたあとの感想であって、コンテスト中に一読したときの印象はフレンズさんのツイートの通りに ABC361-G「Go Territory」だった。あれは UnionFind なんだけど碁石(障害物)の配置から隣接頂点を引くあたりの実装が重かったので、今日の問題におすすめできる解法ではない。今日のは障害物で BFS/DFS をするだけで良かった。■■■F 問題。自分のやり方は実はあまりうまくなかった。どうやっていたか。ゴールまでの手数が確定したマスがあるとする。これを自マスとする。その隣接4マスに未確定のマスがあるとき、未確定のマスの隣接4マスに自マス以外の確定マスがあるなら、未確定マスを確定予定であるとしてキューに入れる。これは自マスを中心とした周囲8マスに加えて上下左右に2マス離れた4マス(合わせて 12 マス)の確定状況を調べることになる。定数倍が重いですね。どうやら想定解法(フレンズさん情報)は訪問済みフラグを数値で持って2回目の訪問で初めてキューに入れる BFS であるらしかった。なーんだ。TLE×2。←想定解法でもダメです。提出 #67382500 (AC / 1440 ms)。自分の不器用な解法が 1941 ms だったのに比べると想定解法は 25 % 速い 1440 ms になるポテンシャルがあるみたいだけど、配列を1次元化するような定数倍の改善なしでは TLE が避けられないのに変わりはなかった。どうあっても制約に泣かされたんだな。制限時間が通常と違う 2.5 秒であることの意味は、C++ と Python で解法の優劣により AC と TLE が分かれるように制約と時間でぎりぎりの調整をしていますよ、ということであって、これは即ち Ruby では針の穴を通すような唯一絶対の最適化をして初めて AC になるかもしれないし不可能かもしれない、ということを示唆している。要するに、2.5 秒を見たときから予想はしていた。だからこそ最初の提出からループを展開したコピペコードを書いていたのだけど、足りなかったのだなあ。■■■D 問題。半年前にあった ABC390-B に Geometric Sequence というドストレートに等比数列の判定を行わせる問題があったらしく(覚えていない)、自分の提出を見てみたらこれ #62034196。to_r して b/a を比較している。「Rational がないと解けないとなると Ruby でないと解けないということになり、それは甘受できないのだった」とはなんだったのか。きっちり楽してるやんけ。あ、でも次の日に今日と同じ式変形を試して提出してる (#62124460)。覚えてないけど。10^7
)に制限されている意味はわかっていたつもりだけど、区間の上限が (10^7)^2
だということとその意味に気がついていなかった。十分な大きさの素数までを列挙すれば、1つの素数のべき乗(2,4,8,16……など)とすべての合成数(4,6,8,10,……など)が列挙できて、消去法で区間内に高々1度しか現れない大きな素数も見つけられるんだけど、「十分な大きさ」を決めるのは区間の幅ではなかったのだった。提出 #67224096 (AC)。■F 問題 Socks 4。N すくみ的な状況。手持ちの靴下を C→D(→E)→C と入れ替えて戻すのは必ずどこかで判断ミスをしているので堂堂巡に陥る心配はしないけど、問題設定がすこしでも複雑になると自己ループの除去とかできなくなる。■火曜日……2晩……。6月30日は ABC412 の代わりに消えた?