/ 最近 .rdf 追記 設定 本棚

脳log[2023-06-27~]



2023年06月27日 (火) [AtCoder] 精進。ARC060-E「高橋君とホテル」(黄 diff)。ダブリングだという予備知識ありで取り組んだ。「サーバル「ARC060E『高橋君とホテル』がよく似た問題だから考えてみて!」 https://t.co/3rxVISM6ZZ」。提出 #43010235 (AC / 346 Byte / 824 ms)。うん、ただのダブリングだった。移動に向きはないし、進めるだけ進むだけだし。D 関数で reverse_each を忘れてバグらせたのは内緒。出てくる答えがやけに2べきに揃うと思ったんだ。


2023年06月24日 (土) [AtCoder] 今日は東京海上日動プログラミングコンテスト2023(AtCoder Beginner Contest 307)があった。コンテスト成績証。C 問題が大変厳しかった。diff を見ても D、E に勝る水 diff になっている。C を飛ばしてさっさと D、E を解いた人も多かったみたい(終了後に提出一覧を見て知った)。以下 B-E の振り返りと F の精進について。■B 問題「racecar」。異なる文字列を組み合わせて回文が作れるかを判定する問題。permutation(2) を使うべきところで combination(2) を使って WA を出した。たぶん「Si​ と Sj​ をこの順に連結した文字列が回文となるようなものが存在するか判定してください。」という問題文の「Si​ と Sj をこの順に連結」という文面から勝手に i<j であるかのような雰囲気を感じ取って勘違いしたのだろう。提出 #42900133 (AC)■C 問題「Ideal Sheet」。制約は大きくないから愚直に実装するだけ。その実装がたいへんだった。ビット列でやるとちょっとは楽になるんだけど、本当にちょっとだけ。これもペナルティをくらった。最初は動かせる範囲を総当たりする4重ループを書いていたのだけど、たとえばシート A がシート X の1行目をカバーしないとき、シート B は必ずシート X の1行目をカバーしないといけない。ということはカバーする範囲を1ずつ動かす総当たりではなく、シート X の四隅をカバーする総当たりでいいのではないかというケチな考えが忍び込んできた。これの罠はシート A と B の一方がシート X を完全にカバーするときで、そこまで想定していながら問題があると気付かずに提出して WA を出してしまった。原因に心当たりがあったのですぐに修正できたのが救い。AC まで 36 分(+ペナ5分)。■D 問題「Mismatched Parentheses」。対の括弧に囲まれた部分を省いて出力すればいい。括弧の中の文字列をスタックで管理するとして、括弧の外の文字列を特別扱いしなければいけない。同じようにスタックで扱えるかと考えてみたけどどうも良くなさそう。AC まで6分半。■E 問題「Distinct Adjacent」。前回の ABC306-D ほどあからさまではないけどこれも2値を記録する DP。人1が選んだ数字とそれ以外の数字をそれぞれ選ぶ場合の数を記録していく。人 N の時点で人1が選ばなかった数字を選ぶ場合の数が答え。AC まで9分。■ところで、E 問題に関して Ruby で一番最初の提出であり AC であるこちらの提出 #42909715 には(目に見える)ループがない。N が数えられないくらい大きな数だった場合は自分の DP 解ではダメでこちらをまねしなければいけない。よく見ると mod(=998244353) の他に mod-1(=998244352) が計算に使われている。mod-1 乗ならともかく mod-1 の累乗にどんな使い道があるのか自分は知らない。■F 問題「Virus 2」(黄 diff) は時間内に解けなかったので精進。長めの時間制限4秒が不安をあおる。ダイクストラ法で感染者からの距離を管理して新規感染者を見つけていきたい。どんな下手を打つと TLE になるだろうか。新規感染者が発生した部屋は次の日には感染者からの距離が0になるわけで、最短距離の更新が広範囲に何度も起こる場合に TLE になりそう。できるだけキューを膨らませないようにケチりはしたけど特別なことはせずに 2863 ms で AC になった。01BFS のように一日一日ステップを刻みながらダイクストラ法を進めるのが頭の中がこんがらかって難しかった。つまり、ダイクストラ法を基本にしつつ日を刻み、1日を2つのステップに分けるのだけど、各ステップでやるべきことすべきでないことを見極めるのが難しかった。無駄を許すと TLE になりそうだったのもあるし、迂闊なことをすると2つのステップが連携できなくて機能しなくなるので。■■■C 問題。ケチな考えを追い出して多少の無駄があっても見通しがいいことを第一に書き直してみた>提出 #42960011 (AC / 515 Byte / 78 ms)。515 バイトはタイプするのに長すぎるということはないね。■■■E 問題の mod-1 について。「グラフ彩色 (ja.wikipedia.org)」のページに (M-1)^N+(M-1)(-1)^N という式が書いてある。mod-1 は単にマイナス1のことだった(それはそう)。


2023年06月22日 (木) 今日初めて気がついたこと。キウンには2つの漢字があってそれぞれ意味が違う。機運(ちょうどいいタイミング)。気運(時勢のなりゆき)。実は3つ目もあった。黄檗希運(あるお坊さん)。以前の精通と同じで、別々には知っていても並べる機会がなかったので。


2023年06月21日 (水) 気になってるゲームに体験版があったからプレイしてみたら UI がとても目障りでつらい。何か。リストを表示したときフォーカスアイテムの直下にツールチップを出すから実質的にリストの行数が1行しかない。一行一行に注目しながら装備品を選んだり戦闘中の行動を選んだりしないといけない。つねに視界の8割を目隠しされているような不自由なプレイ体験。なぜこうなってしまうのか。リストから選ぶとき、まずは全体の輪郭(各行の長さ)や黒さ(文字の画数)や何個あるうちの何番目かといった属性であたりをつけるでしょう?(そうじゃないんだろうなあ) 何も見えない。何もというか、下を押して選んでみるまで下にある次の項目が見えない。なぜなのか。■四角ボタンで消せた! でもこれ正解はオンオフではなくて固定領域に詳細を表示することなんだよね。


2023年06月20日 (火) [AtCoder] 先週の ARC162-C「Mex Game on Tree」(ぎりぎり青 diff)。当日は 40 分くらい時間が残っていたけど解けなかった。MEX が K 未満でも K より大きくてもダメなんだよなー、部分木での攻防がより大きな部分木での勝敗に影響したりするかなーとか考えていた。■提出 #42772931 (AC / 345 Byte / 196 ms)。ネタバレをね、読みました。「CはAliceが高々1手操作して勝てないならBobが勝つ。Aliceが操作した場所に応じてBobが適切な頂点にKを置くと、せっかく操作した分が台無しになって、1手操作しても勝てない状態が延々続くからだ。」 これがすべて「Bob が…… K を置くと」。でもそれが見えなかったのだし、実装も 13 行目の k-sk<=v を最初は k-sk==v と間違えていたので何も言えない。難しい問題だった。


2023年06月19日 (月) [AtCoder] 精進。ABC236-G「Good Vertices」(ぎりぎり橙 diff。この色は前2問の EF ががっつり青 diff だった影響が大いにあると思う)。5日前(20230614)に解いた問題の類題だとのツイートを読んだ>「サーバル「実は「行列の掛け算っぽい計算」さえできれば行列累乗できるから、数え上げ以外の問題でも行列累乗を使うことはあるけど、こっちはかなり難しいね。ABC236Gが例題だよ」 https://t.co/8OvqVZpuLz」。100×100 の行列を 10^9 乗するので3千万の計算量。これを辺を1本1本追加しながら N^2(≦1万)回繰り返すともちろん TLE になる。どうしよう(※)。今回は場合の数を数えるのが目的ではないから、行列の中身に使用した辺が追加された時刻 t の最大値を記録すればいいと思った。(※「どうしよう」この一語にはコンテストが終了してしまうくらいの時間が詰まっている。ときどき思い出しては頭の中で転がしていた)■提出 #42752849 (TLE×52/AC×58)。今回も行列の掛け算を書き間違えたのでこの前の提出を見ながらまねして書いた。そして TLE。ローカルではほぼ9秒以内に完了しているので、ジャッジサーバーでは約半分の 4.5 秒かかる見込み。制限時間は特に長めではない2秒。Ruby でうん千万のオーダーは厳しいよう。■提出 #42753403 (AC / 1995 ms)。.zip().filter_map{}.min.zip(){} での逐次処理に書き換えたらローカルで5秒になったので提出したら AC だった。案外いけるもんだ。


2023年06月17日 (土) [AtCoder] 今日はトヨタ自動車プログラミングコンテスト2023#3(AtCoder Beginner Contest 306)があったけどジャッジが詰まりまくっていて Unrated になった。「このコンテストは full-feedback 形式のコンテストです」が嘘だったからかな。終了後 20 分経つ現在でも時間内に提出した F 問題が WJ のまま止まっていて生殺しの状態なのだ。今日は既視感のある問題ばかりで 36 分で E 問題まで通ったのだけど、そこから1時間ちかく誤読した F 問題を考え続けていた。■F 問題「Merge Sets」。方針はすぐに立った(この方針が正しいかどうかはまだ不明)。集合を全部まぜまぜしてソートして、ある要素の後ろに何個の要素があるかを二分探索で調べる。つまり、ある要素が他のいくつの要素の添字を押し上げる効果を持っているかを計る方針。ところでね、f(A,B) の計算において A と B は可換ではない。そして求める総和というのは i<j であるすべての f(Si,Sj)。だけどずーーーーっと i<j を区別しない f(Si,Sj) について考えていた。最後に割る2すればいいんじゃないのって考えていた。■制約について1つ気になって確認したことがある。A∩B が空集合だとは書いてあるけど、つまり A と B に共通する要素がないとは書いてあるけど、A の中、B の中に限ったときに共通する要素がないとは書いていなかったと思う(※)。だから添字を使って同値の要素に便宜的に大小関係を導入したんだけど、誤読が明らかになったときにソート列の二分探索から BIT を使う解法に変わったのでそんな面倒な手順は必要なくなっていた。提出 #42363020 (AC) に残ってるのは虫垂みたいなもの。この日記を書いてるうちに AC の結果が出ていた。もう終了から 40 分経ってるよ。ちなみに誤読なしでストレートに実装するとこれだけシンプルになる>提出 #42370906 (AC)。■コンテスト成績証。へなちょこに Unrated を嘆いたりやる気を削がれたりしている暇はないのだ。順位表の1ページ目にいる人たちなんて最初から Unrated なんだから。各色相当の実力があればなるべくしてその色になる。Unrated ばかりならその機会がないけど現状はそこまでひどくない。がっかりするのは上振れに期待しているから。毎回青パフォ以上を出せばいいだけ。建前はそう。でもそれができないのだから、調子がいいときに Unrated なのはつらい。■※「A と B に共通する要素がないとは書いてあるけど、A の中、B の中に限ったときに共通する要素がないとは書いていなかったと思う」 やっぱり書いてあったのかなあ。部分文字列の定義は連続するかどうか曖昧だけど、集合の定義は多重かどうか曖昧ではなかったりする? 反則的だとは思うけど「A={Ck1​​,Ck2​​,…,Ck∣A∣​​} となるような k1​,k2​,…,k∣A∣​ をとる」ことが曖昧でなくできることから逆説的に重複する要素がないと判断できる? ……あった! 「i1​!=i2​ または j1!=j2​ ならば Ai1​,j1​​!=Ai2​,j2​​」って書いてある! とことん読み違える問題だったなあ。


2023年06月14日 (水) [AtCoder] 精進。先週の ABC305-G「Banned Substrings」(青 diff)。終了後に4か所で行列累乗というキーワードを見ていた。でも難しい。何×何の行列を用意するのか。その中身は。■提出 #42254964 (AC / 639 Byte / 1622 ms)。まずダメ文字列を表すビット列を1文字から6文字まで DP みたいにして用意した。N が6以下ならこの時点で答えが出せる。次に6文字のダメ文字列を元にして1文字延長を表す 64×64 の行列を作った。ここまでは一歩一歩手探りしながら順調に来たけれど、サンプルの答えが全然合わなくて袋小路に入り込んでしまった。どの部分か。主として 28 行目と 29 行目にあたる部分を延々書き換えながら、なんで掛け算を繰り返すとダメ文字列が答えに現れてくるのか理解に苦しんでいた。私は、行列の掛け算を正しく書くことができません。そこは考えるとことちゃうやん? ただ定義通りに書くだけよ。■計算量。行列の掛け算は3乗なのかな。64^3≒26万。それに累乗部分が logN≒60。行列の列あたりの非ゼロの数が0か2個なので、ゼロだけの行と列がそれなりにありそうだし、疎らなのをいかした効率化もありそう。でも定数倍の改善なら競プロでは評価されないね。■対角化と Jordan 標準形のキーワードを得た! 名前だけでもうおなかいっぱいです。ネタもとは『プログラミングのための線形代数』なんだけど、今まさに読んでいる「【第5回】「型」はウェブシステム開発に「エンドゲーム」をもたらすか | GeeklyMedia(ギークリーメディア)」にタイトルが出てきてびっくりしたよ。■最大ケースが 1000000000000000000 0 なのかな。64×64 のうちダメ文字列に対応する行と列を省いたとしても M=0 のケースでは良くならない。それよりも行列のサイズを 32×32 に抑える方が良くなるだろう。32×32 で十分みたいなんだけどわかんない>#42246448。■提出 #42262239 (AC / 769 Byte / 257 ms)。32×32 で足りるというのでとりあえず 32×32 を基本にしてみてダメ文字列の行と列を省いたりもしてみたら1桁早くなった。なんで 64×64 だったり 32×32 だったり行列のサイズがまちまちになるんだろう。1文字分の冗長さはどこから生じてて、なんでお構いなしで答えが合うんだろう。参照する必要のない6文字前を使って入出力を無駄に細かく分類してもそれが理由で間違えるわけではない。なんなら7文字前8文字前まで利用してさらに細分化しても手間が増えるだけで答えが違ってくるわけではない。ということ?


2023年06月10日 (土) [AtCoder] 今日は京セラプログラミングコンテスト2023(AtCoder Beginner Contest 305)があった。A-F のふりかえり。■A 問題「Water Station」。5の倍数に切り捨て切り上げした値のうち近い方。この日記を書きながら思いついたけど (N+2)/5*5 一発で二捨三入できた。切り捨て切り上げを定型で覚えているだけで考えることをしないから無駄なことをする。……というのもちょっと違う。(A+B-1)/B(A-1)/B+1 がどうして切り上げになるのか過去に考えたことがあるから (A+2)/5 もわかる。ボーダーは動かせる。■B 問題「ABCDEFG」。もっともあほな書き方をしても 42 通りなので好きに書く。累積和を用意するときに要素数が少ないからうっかり暗算しそうになったけど、間違えるから機械にやらせた方がいい。■C 問題「Snuke the Cookie Picker」。人間はなんとなく答えが出せるけどコンピュータに出す具体的な指示は案外難しい。すべての行と列で上端下端左端右端を検出して数が多いものを採用する解答を提出してランタイムエラーを出した。最小ケースを作ってみて気が付いたんだけど、1対1で同数になるので答えが出せない。たとえば上端には最小値、下端には最大値を採用するのが正解。■D 問題「Sleep Log」。方法はいくつかあるのかな。睡眠時間の累積和に適切な座標を割り当てて二分探索ができればいいように思った。でも実装方法(座標圧縮?)が見えなかったのでもうひとつの案。累積睡眠時間を数えながら各クエリの入りと出のときに値を記録した。同時に扱う時刻が睡眠時間とクエリを合わせて3つあって、組み合わせて正しい式を得るのが難しかった。クエリの入りと出の2か所に書いて揃って間違えた。それは提出前に修正できたけどデバッグ出力の消し忘れで All WA をくらった。人間は都合良くデバッグ出力を無視してサンプルの答え合わせができるんよね……。■E 問題「Art Gallery on Graph」。これは簡単。BFS で頂点を訪問するだけ。罠があるとすれば、グラフを勝手に木だと仮定してはいけないということと、何も考えずに BFS を繰り返して値の更新が続くと O(KN) で TLE になる可能性があるということ。プライオリティキューで提出して2秒ぎりぎりで AC だったけど、BFS を(1回だけ)やりながら適時キューに警備員が立っている頂点を追加するようにするともっと余裕があった。ここでは出力形式を間違えてまた All WA をくらった。■F 問題「Dungeon Explore」。制約からもこちらに許された操作からもグラフをしらみつぶしに訪問するような探索が書ければいいとわかる。隣の頂点にしか移動できないから探索は BFS ではなく DFS。あとは E 問題と似た文面が見えることからわかるように、勝手にグラフが木だと想定しないようにだけ注意。なんでこういう注意が必要かというと、「木ではない木ではない」と唱えていないと勝手に木を想定したコードを手が書いてしまうからだ。E と F が似たようなグラフの問題でどちらも軽い問題だったから、F 問題を提出した後で F 問題を開いて解こうとして混乱したよね。■最近また落ち目だったからか解けるものを(序盤でそれなりに苦戦しながら)解いただけでレートが上がったのは微妙な気持ち。コンテスト成績証。■■■@2023-06-15 F 問題。自分の提出 #42157034 は 10 行目と 11 行目がやばく見える。10 行目は隣接頂点リスト全体を走査しているし、11 行目は隣接頂点リストがソート済みだということを無視して、頂点 N を目指しているというのに最も小さい頂点番号から順に訪れようとしている。10 行目は「DFSを非再帰に書き換えるとTLEするようになったという心霊現象」について 20221125 に書いたまずい書き換えの例と同種のミスだ。たとえば入力が頂点1を中心とするスターグラフで、頂点 N だけが頂点1から距離2の位置にあるとしよう。長さが N に近い頂点1の隣接頂点リストを N 回近くスキャンするのは O(N^2) でいかにもまずい。だけど実際には問題にならないだろうということも予想できて、当日は解答を作成しながら制約を再確認したりしていた。つまり、提出コードがどういう形で書いてあるにせよ、頂点1の隣接頂点リストを N 回近く標準入力から読み込むことは最悪の場合に避けられないのであり、それでも TLE にならないような制約が書かれていないかを確認していた。なかった。でも実際にはまずい解答でも問題が起こらないような入力だったので AC だった。まずい書き方をしたけど実際にはまずくなかったのだという話。■……でもないのかな? 日記に「(そんな制約は)なかった」と書くに際してまた問題文を読んだけど、これまで見たことがない「この問題のジャッジはアダプティブです。つまり、制約および以前の出力に矛盾しない範囲でグラフの形が変わる場合があります。」という注意点に気が付いたよ(今です!)。入力が頂点1を中心とする完全なスターグラフだったときに自分のまずい提出は(アダプティブに)救済されようもなく TLE していただろう(一番最初の入力で頂点 N への辺が示されているから)。あまりにも間抜けすぎるのでそんなうっかり提出を弾くためのケースを用意しようとは考えなかったのかな。あぶなかったね!


2023年06月09日 (金) [BOOX Max2] 6月5日の日付が入ったアップデートバージョン 3.3.2 が公開されていた。中国語(?)のリリースノートは全然読めないんだけど、気が付いた変更点が2つ。ひとつ目は前回のアップデートの問題点「Neo Reader のリフレッシュ設定はアプリを開き直すたびに無視され、(Neo Reader が定義する)スピードモードで描画がされる。しかしアプリの「設定」画面(「画面リフレッシュ」の1つ下の項目)を一度でも開くことで画面リフレッシュの設定を反映させることができる」という現象が解消して面倒な対処手順が必要なくなったこと。もうひとつは PDF の右綴じ左綴じを反映してスワイプの意味が入れ替わるようになったこと。書かなかったけど前回のアップデートでは見開き表示の時に仮想的なトップページを差し込む処理が追加されていて(すると Adobe Reader がするように表紙が単独で表示される)、もはや PDF 閲覧に関しておよそすべてのことができるのではないか。そうだ、Neo Reader の機能アイコンにテキストが添えられるようになっていた。すごく使いやすい。文字を再発明できて偉い!■■■6月8日の日付が入ったバージョンにアップデートした。簡体字のリリースノートが読めないので3日でどういう違いがあるのか知らないけど、使っていて新しい発見が2つあった。いつからそうだったのかは不明。■1つ目。ステータスバー右端のページ番号をタップすると、当たり判定が厳しくて1タップでは難しいんだけど、ページを指定してジャンプする機能へのショートカットになっている。目次を見てすぐに戻るというときにページジャンプを使うので嬉しい。■2つ目。PDF のページ送りモードが左から「単ページ」「Continuous Page」「LTR」「RTL」なんだけど、自分が使うのは専ら右端の RTL なんだけど、これが LTR になってしまう間違いが頻繁に起こる。なぜなのか当たり判定を調べた。アイコンとアイコンのあいだの空白部分には判定がない。タップしても無反応。文字と絵の幅にだけ判定がある。ところで RTL だけ特殊なところがあって、RTL ボタンの左右に狭く LTR ボタンとして働く領域が存在している。つまり RTL ボタンへの狙いが微妙に左右に逸れたときに LTR ボタンを押したことになる。大きく外して空白部分を触っても無反応なのはさっき書いた通り。わずかなミスだけを許さない罠がある。


2023年06月08日 (木) 新聞にレッツ・スタディーというコーナーがあって、要約するとこういうお題が出ていた。「あなたにとってスマホで一番重要な機能やアプリはなんですか? (200 字以内)」。国語のテストを思い出す懐かしい文面だけど、すれた大人としては問いが雑ではないのかなと、だから子供の頃に困ってたんじゃないかなと思う。どういうことか。紙面にはアイドルの模範解答も載っていて、それは字数をほぼ使い切って理由や背景となる自身の状況まで説明している申し分のないものだった。でもね、それを読んでもう一度問いを読み直したんですよ。そしたら「なんですか?」「200 字以内」と書いてある。理由の説明いりますか? どうせ字数を大きく余らせたら減点するんでしょ? これはすれた大人だからではなく素直な子供だからそうするんだけど、アプリや機能の名前を1つだけ挙げて答えにするんですよ、自分は。国語の授業ってテストのための暗黙のルールを学ぶ時間なのだろうか。そうではないことを知っている。学校の授業ではルールは暗黙のまま伏せられていた。塾に通い出して初めて点を取るためのテクニックのひとつとしてこうしたルールが明示された。ルールが明かされないゲームはクソゲーなんよ。こちとら暗黙のルールなんてものはこれっぽっちも認識できないの。というか、ルールであることを理由にしてルールに従わされることに抵抗があるから、明示されないルールに自ら進んで縛られに行くつもりがないんだ。だから気がつきにくいし、察しても不確定ならしらんぷり。


2023年06月07日 (水) 「Excel」で数値先頭のゼロが勝手に消される仕様、ようやく改善へ? Twitterで歓喜の声/「Microsoft 365 Insider」でテスト中【やじうまの杜】 https://t.co/HI35QCsS4d https://t.co/xiVNNi09em」■タイトルからははっきりしないけど、記事を読むと従来数値として読み込んでいたゼロ始まりの数字の列に対して文字列として解釈するオプションが用意されたってことらしい。■これ Twitter の声には賛同できなくて、たとえば消されて困るゼロが電話番号のものならそれは文字列として扱うべきだし、CSV/TSV のインポートでは列ごとに型が指定できるので文字列として読み込めばいい。これまでも困ってない。で、そのときにあれっと思うのが文字列型は指定できても数値型を指定できないこと。数字に対しては標準を選ぶしかない。標準っていうのはたぶん日付っぽいものは日付に対応した数値に、数字っぽいものはそのままの数に、その他のものは文字列として解釈するものだと思う。Excel に数字としての解釈を強制する(その結果先頭のゼロが削除される)方が実は難しい。■ゼロを消させないために文字列として貼り付けたあとで書式設定を標準に戻すの面倒くさかったーってコメントが見えるけど、何がしたいのか不明。記事にはゼロ埋めで桁揃えされたコード番号の例が挙がってるけど、Excel を使う人間の少なくない割合が、値としての数字と書式化されて文字列になった元数値を区別せずごっちゃにしてると思う。数値として扱いたいならゼロ埋めは画面や紙に印字するまで考える必要のない単なるお化粧なので書式設定で行う(でも専用のフォームが用意されてないみたい「「ユーザー定義」で桁数を設定しておく!」)。だけどコードなら演算に意味がない場合も多いだろうから最初から文字列でいいと思う。数字で構成された文字列なら数値に違いないっていう誤った思い込みがあるのは Excel ユーザーの方ではないかと疑っている。標準にしたい理由ってなんだ。■もし書式を文字列に設定してるにもかかわらずことあるごとに Excel が標準に変更して数字として再解釈してデータをダメにするってんなら、ご愁傷様としか言えませんが……。■■■こんなんあった。「私「CSV開こうかな」Excel「俺俺俺!!!」私「じゃあお願い」Excel「先頭の0は消しといたし、日付っぽいのも直しといた」 - Togetter」 これはわかる。関連付けで開くと型指定はできないし文字化けもしやすい。空のブックを開いてから、インポートするかデータソースとして接続するのだ。


2023年05月31日 (水) 畳み込みの視点から見たforall(every)とexists(some): 空集合に対するforallは常にtrueになる - Lambdaカクテル」■Ruby もうまく定義されている言語のひとつ。自分の日記から「ところで空配列に関して、[].all? は true を返し、[].any? は false を返す。この違いによってメソッドの選択が制限されることがあるかなと一応警戒するんだけど、特にそういう違いは生まれないみたい。むしろそうならないようにデフォルト値が選ばれている。」■読んでたらモノイドと単位元の話になった。単位元だから true になったり false になったりするのだ(知らんかった)。それはこの前やらかしたやつ。「ST クラスの内部配列のサイズを2べきに揃えるときに埋める値がよろしくなかった。ACL などまともなライブラリのセグメント木を使ったことがあれば単位元がパラメータ(の1つ)だということがわかったはずだ。」■最後に chokudai さん出てきた。「・論理的にはtrue一択。false派は論理を勉強してほしい ・論理で判断できる項目でドキュメントを参照する手間を増やすのは良くないので、状況に拠らないで欲しい ・多くの環境では「全員が論理的に考えられる」と思わない方が良いので、ドキュメントやコメントは気を使うべき https://t.co/fovw2w1bIC」「「要件による」って言ってるたくさん人いるけど、要件は、「配列のすべての要素が条件を満たすならtrueを返す」であり、ここに「空配列はfalseにする」を入れるなら「配列の全ての要素が条件を満たし、空でないならtrueを返す」という要件にするべき。空配列がtrueはこの文章なら要件に入っている。」■これが一連の発端らしい。「「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、空の配列を渡したらfalseを返すかtrueを返すかが、良いプログラマかどうかの一つの境目だ」 このお題で「要件による」と言ってしまう、要件を定義する立場であってほしくない良くないプログラマがいっぱい炙り出されているのだ。とはいえ、もっともやべーのは「false に決まってる」と考えてしまう人間だし、実は「true に決まってる」という態度も現実では危うい。PHP みたいにときどき常識が通用しない言語があるわけなので。Ruby だってドキュメントを読むまでは理解できない罠があったりする>「Ruby クイズ (複合代入編)」。■chokudai さん「「全ての要素が条件を満たすならtrue」って要件の関数は場合はtrue一択だけど、実務上の要件はそれに合致しているとは限らないので、違うのであれば、 ・関数名を変えて要件が違うことを明確にする ・配列の外で判定する とかの処理は当然やるのよ。」っていう、元になったツイートのスコープ外までフォロー入れてるのにクソリプついてるぽくてかわいそう。有名税か。読めてないからこそクソなのであってどうしようもないね。あるいは読んだ上で語調から馬鹿にしてるとお感じになったのかしら。馬鹿だからどうしようもないね。読めない人に言葉を費やしても、煙に巻こうとしてるとかなんかめっちゃ焦ってるとかって「印象」を与えることしかできなさそうで、不毛だと思う。無視すれば無視したで「効いてる効いてる」なんて勘違いをされそうなので、「ここに書いてある。これを読め。わかるまで読め」が正解か。