AtCoder Library(ACL)をWindowsで入れようとしたらハマったのでメモ
前菜
ABC193のE問題で中国剰余定理が出た。実装、できず…(実装力が皆無なので)
Pocala「ACLとやらを、入れてみるか…」
(atcoder.cppの入っているのと同じディレクトリにatcoderフォルダを置き、いろいろしたのち実行)
Pocala「…!?!?!?」
ばーん
困った。…のでTwitterで見当をつけたのち聞いたら優しい返信を頂いた…どうにかなった…ありがてえ…ありがてえ…
- 多くの環境で動くように作っていますが、C++標準からある程度の拡張機能を要求します。具体的には以下のことを仮定します。
— Pocala (@pocalamochi) March 1, 2021
- `__int128 / unsigned __int128(g++, clang++)` か `_mul128 / _umul128(Visual Studio)` が使えること
これの話をしているのかな…
本題
どんな人向け?
WindowsにMinGWを入れた覚えがあって、AtCoder Libraryを入れたけど、さっき書いたような「error:expected')' before 'unsigned'」みたいなエラーが出て「C++何もわからないよ~(泣)」となっている人
原因(僕の場合)
MinGWの入れ方をミスった結果、unsigned __int128 が使えない設定になってしまっていた
ac-library-master>document.ja>appendix.md 辺りに
C++標準からある程度の拡張機能を要求します。具体的には以下のことを仮定します。
- `__int128 / unsigned __int128(g++, clang++)` か `_mul128 / _umul128(Visual Studio)` が使えること
って書いてあったので…
対処法
今入れてる方のMinGWを消したあと、MinGW-w64を気をつけてインストールする
qiita.com
www.javadrive.jp
リンク切れた時用に超簡略文字起こしをしておくと
【消し方】C: 直下のMinGWフォルダを消して、環境変数のPATHのところにあるMinGWへのパスを消す
【入れ方】気合でMinGW-w64とかをインストールしていく。インストーラの設定の所でArchitectureをi686からx86_64に変更することを忘れない
該当ツイートへのリンク
https://twitter.com/pocalamochi/status/1366370691939926017
ぐわあああああああ(これはAtCoder Libraryを手元に入れても実行できない人の図) pic.twitter.com/bFO6dQbvSy
— Pocala (@pocalamochi) March 1, 2021
https://twitter.com/pocalamochi/status/1366374010615832577
- 多くの環境で動くように作っていますが、C++標準からある程度の拡張機能を要求します。具体的には以下のことを仮定します。
— Pocala (@pocalamochi) March 1, 2021
- `__int128 / unsigned __int128(g++, clang++)` か `_mul128 / _umul128(Visual Studio)` が使えること
これの話をしているのかな…
俺のと違ーーーう!!
ごめん…
英辞郎のtxtデータを使ってSVLが載ったシンプルなCSVを作ってAnkiに入れる
おはようございます。Pocalaです。今回はタイトル通り、「英辞郎のtxtデータを使ってSVLが載ったシンプルなCSVを作ってAnkiに入れる」のを目標として頑張っていきます。
この記事は他の人の記事と比べて非常に雑、雑だな…というやり方なので、参考にする際には気をつけて下さい。
SVLとは?
先にSVLの説明です。自分も昨日知ったんですが…ざっくり言うと「重要順に12000語集めたよ」ってやつです。
www.alc.co.jp
1000語ずつで12段階に分かれる。後半に近づくにつれてだんだん難しくなる。level10だとjeopardizeとか出てくる。
某黒色の単語帳でも3600語以下なので、いっぱいある。
ということで12000語のうち、割と後半の方を入れていきたい!というのが今回のモチベです。
理想
簡単なのは避けたい
Ankiに既に3000枚ほど突っ込んでいるのと、あと正直SVLの序盤は「a」とかなので避けたい。(Gawr Gura並感)
シンプルにしたい
例えば、cartridgeを普通に英辞郎から引っ張ってくると
cartridge
{名-1} 〔銃の〕弾薬筒、薬包、カートリッジ
{名-2} 爆薬筒[カートリッジ]
{名-3} パトローネ◆カメラ用フィルムの入っている筒状のカートリッジ◆【参考】patrone
{名-4} 〔インクなどの〕カートリッジ◆装置にはめ込む小さな容器で、プラスチックで作られることが多い。
{名-5} 〔レコード・プレーヤーの〕カートリッジ◆【同】magnetic cartridge
{名-6} 〔磁気テープの〕カセット
{名-7} 〔シェーバーの〕替え刃
【レベル】7、【発音】kα':(r)tridз、【@】カートリッジ、【変化】《複》cartridges、【分節】car・tridge
みたいになる。多い…ので
cartridge
弾薬筒、薬包
みたいにしたい。
方針
英辞郎の説明をシンプルにするのは難しそうに感じたので、Weblioをスクレイピングすることにした(大丈夫なのか…?不安).
12000語(単語とレベル、発音)を英辞郎から引っ張ってきて、レベル順にソート、それを元にシンプルな意味…をWeblioを使って追加して、Ankiに追加する。
12000語を英辞郎から持ってくる
funct.hatenablog.com
この記事を参考に頑張りました。グッ…と睨んで、そこからいじると単語とレベル、発音が抜き出せます。自分は正規表現を知らなかったので、ここで3時間位試行錯誤しました。
ということでなんとかCSVファイルを作ることに成功。これを難易度順で再ソートして、今から入れるlevel5~9のみに手動で調整しておきます。
スクレイピング
Weblioから意味だけ取ってくることにします…手動で追加するよりかは楽だと思っています。退屈なことはPythonにやらせよう(?)コードはめんどくさいので載せません。頑張って書きましょう。間隔を開けること!
最後に
はい。ということで新規に4008単語が追加されて、6957枚になりました。お疲れさまでした。
いや、これからが本番なんだよな…
PocalaのJOI参加記(1日目)
えー、2/8(土)~2/9(日)に開催された第19回日本情報オリンピックに参加してきたので、それの記録をある程度細かく書いていきます。膨大な量になるので、覚悟の準備をしておいて下さい!知らんけど。ノリで書いているので…この記事は1日目についてです。
1日目前半
新幹線で東京へ…
起きたのは午前5時40分くらい。大阪から東京は遠い…というか、10時くらいに東京に着いていたい(理由は後述)ので、これくらいの時間に起きることになりました。
某ルートから新大阪駅に着いて、そこから東海道新幹線に乗って東京へ。交通費、JOI側が出してくれるらしいので、安心して乗ることができました。友達に「JOIの本選でつくばに行くんやわ〜」という話をするとき、「交通費支給されるって凄ない?」って話をすると「すげぇー」って返ってきがちです。人生に置いて交通費が支給される機会、少なそう。
富士山が窓から見えたとき、「Mt.Fuji〜」という気持ちになりました。いっぱい写真を撮った気がします。でも帰りは全然写真撮ってないよね…この行きはすげぇ盛り上がるけど帰りは全然写真取らない現象に名前をつけてあげたい。
みたいなことをしていると、東京駅に到着。Altair氏が一回東京駅の写真を撮ってたのを見たことがあるので、とりあえず外に出…ってどこが出口か分からない。何分か彷徨ったあと、それっぽい出口を見つけたんですが、この改札に新幹線のきっぷが入るか不安だったのですぐ左にあるインフォメーションカウンターの人にさっと確認してから、外へ。レンガ造りの建物の写真を撮ることにした。「あー見たことあるわ〜」という気持ちになりました。
ふぁすたざんざすたー
実は10時50分にJoe氏とぷにぷにさん(以下じょえ、ぷに)に会うという約束があって、その為に東京に早く来たんですが、新幹線搭乗を素早く終わらせてしまったせいで、約束の時間まであと50分ある…という状況になりました。なので、「神田川JET GIRLS」の聖地巡礼、柳橋に行くことにしました。
感想:すごい。アニメで川に木造の小屋みたいなのがあったけど、本当にあるんだ〜。下町?下町感を感じました。
じょえぷにとエンカ
そこから集合場所の御徒町駅前へ。「おかちまち」って読むらしいよ。おんとちょう!
外に出て「デザインあ」のTシャツを着てますよ〜というツイートをしたりしていると、大学生っぽい人(ぷに)と大学生っぽい人(じょえ)の2人がいたので合流。ぷにぷにさん、ぷにぷにしていなかった…
とりあえず中本に行くことに。開店前で人が並んでいたんですが、土曜日のこの時間にしては混んでいない(じょえ曰く)とのことで、ゆるーく並びながら話したり話さなかったりした。確かじょえが「競プロ界隈ってlogは定数説が普及してるけど、実際研究とかでは10時間可動させたりとかだから結構差が出るんだよね〜」みたいな話をしていたような気がする。
明日JOIがあるので…ということで味噌ラーメンを推奨され、それを頼むことにした。おごってくれたので「じょえチャンネルアイコン作成代ですね笑」と返しておいた。じょえ、自販機のスマホをかざす所に垂直にスマホを押し込んで決済していて、「(それでも反応するんや…)」という気持ちになっていました。
なんか「こどふぉって逆に夜にあるくらいの方が参加しやすいよね〜」みたいな話をしてると、ラーメンが到着。話したりしつつ、味噌ラーメンを堪能した。ぷに、間違って喉に唐辛子成分を投入してしまったらしく、げほげほしていた。
えー、中本でした pic.twitter.com/wmaZ5HMoNS
— Pocala (@microkents) February 8, 2020
店を出てから、自分がJOIで机に置く用のマスコットを買いたい!という理由で、秋葉原まで歩いて移動することにした。じょえチャンネルの話を聞いたり、研究室の話を聞いたりした。あと自炊のはなしもしていた気がする。ぷに、「久しぶりに太陽の光を浴びたような気がする…」と言っていて、少し心配になった。
ぶらぶらする
秋葉原に到着。秋葉原は日本橋(大阪)を御堂筋サイズまで拡大したレベルで規模がすごい。アニメイトに行って、階段昇降をしました。ゆるキャン△のなでしこのマスコットを購入。これが一番高い買い物になりました。はい。
その後、何をするか…?という雰囲気になっていたら、じょえが「なんか近くに線路と線路の間にあるカフェがあったような気がするので、行きませんか」という提案をしてくれ、行くことに。コンクリートな感じの階段を上るとガラス張りの部屋に。部屋の隅っこの方でうだうだ喋った。自分はジンジャーエールを頼みました。じょえとぷにがニュートラルネットワークの話をしていたような気がしますが、僕は絵を描いていたので余り聞いていませんでした。残念。
このノリで書いていると長くなりそうなのでここから先を簡単に説明すると、カフェを出て、本屋に行って、駅に戻って、バイバイしました。じょえに「JOI本選erにじょえチャンネル布教しといて」と言われたような気がした。いやー、楽しかった。しかしこれは土曜日前半である。まだ土曜日後半と日曜日前半と日曜日後半が残っている。まじか。
1日目後半
つくば国際会議場へ
つくばエクスプレスに乗ってつくばへ。特に目立つことはありませんでした…途中寝落ちしてて、気づいたら窓の外から見える景色が広大な土地!みたいなのになっててびっくりしました。電車を降りて、外へ。
つくば〜!広い! pic.twitter.com/xRzRUePL6G
— Pocala (@microkents) February 8, 2020
つくば国際会議場へ。途中で何人かJOIerだな?という人(荷物が大きい)を見かけましたが、誰かわからないのでダッシュで走り抜けました。
建物の中に入ると、また広さに圧倒されました。しかも凄い綺麗。大阪府咲洲庁舎の一階を20年くらい新しくした感じ。
3階に受付へ。50音順で名札が並んでいて、生徒証を見せて名札をもらうと、「左側の机のやつ取ってってくださいね〜」と言われたので色々貰った。JOIのファイルとかメルカリのファイルとか、手帳とかデータ構造の本(1900円+税)がタダで貰えたので、「350点取るだけで東京に行けたり本も貰ったり宿もタダだし飯もタダだし、凄いな…」という気持ちになりました。すごくないですか。
途中で人と仲良くなりました。緑色のチェックを着ていたような気がするので、Mさんと呼ぶことにします。
プラクティス
いざ、プラクティス会場へ。入り口に手ピカジェルが置いてあったよ。
プラクティスは5問をゆるーく解いて、本番に備えましょうね!という主旨のやつ。机にmercariの水が置いてありました。Ubuntuに慣れていないので(??)無限にバグらせてしまった。そういえば今回のJOIで、 for (int i = 0; i < n; i++){ が素早く手打ちできるようになった気がします。
えーと問題の方ですが、5完…ではなく4完です。5問目は数分考えたら「半分全列挙じゃ〜ん」となったんですが、これを実装して時間を潰すより、環境に慣れるほうがいいのでは…?と思ったのでそっちを優先していました。
スタッフの人でEclipceの使い方を優しく教えてくれた方がいて、とても良かったです。誰とは言いませんが…
夕食会
プラクティスを終え、夕食会へ。比較的広い部屋の中央に長ーいテーブルとその上に料理が置かれていて、それを食べる形式。机が微妙に低いのと椅子がないのとで、皿を持って立ち食いをしていました。
何か満点を撮った人の表彰があって、その後に80何人の自己紹介フェーズがありました。色んな人がいろんな紹介をする中で、自分は「〜高校の〜です。ボーダーギリギリで本選に出れました…!Twitterをしていて、Pocalaって言います。よく絵を描いていて、"AC そのまさかだよ"の人です。じょえチャンネルっていうのがあるんですが、それのアイコンも描きました。じょえチャンネルを知らない人は、チャンネル登録宜しくお願いします。」って言ったら、会場が「お〜っ」ってなって、自分も「(お〜っ)」ってなってました。
Pocalaさん「TwitterやっててPocalaです」
— Nanashi@目指せJOI本選 (@WrongAccept) February 8, 2020
みんな「ほー…」
Pocalaさん「絵をかいていてAC,そのまさかだよとかを書いてます」
みんな「ワァァァァァ↑↑」
Pocalaさん「あとじょえチャンネルの絵も描いてます」
みんな「ウオオオオォォォ↑↑」
夕食の量が多くて、「サンドイッチまだ残ってるんで食べれる人は食べて下さい〜」と言っていたので、サンドイッチを積んで食べました。少し食べすぎました。
サンドイッチを積む人 #いろいろな人 pic.twitter.com/usTg7ICo6X
— Pocala (@microkents) February 8, 2020
宿へ
夕食の後は宿へ。バスに乗って10分位…?で到着。自分は311号室でした。
部屋を開けて電気を点けると、「あ〜これが独房と言われる所以なのかー」という気持ちになりました。
これが「独房」と呼ばれる所以ですか…いやーー、好き pic.twitter.com/E1uOYFhUKf
— Pocala (@microkents) February 8, 2020
部屋の写真を撮ったりしていたら、自分の向かいのたいさーさんが「風呂混みそうなので、先に入浴ってきます」と言って風呂に行ったので、自分も行くか…という気持ちになって風呂に行きました。
風呂、暑い。あと熱い。のぼせました。シャンプーとボディーソープだけなので、コンディショナーが欲しい人は持参すると良いと思います。
そこから部屋に戻ってきて、暇だなぁ…と思っていると、たいさーさんのスマホの画面が割れたらしく、部屋の前に他のJOIerが煽りに集まってきていました。草。
スマホの画面が割れた人の部屋の前でエイサイハラマスコイを踊っている人達… pic.twitter.com/OfZJyjkRmd
— Pocala (@microkents) February 8, 2020
そこから云々話して、部屋に戻りました…。Twitterを見ていたら、sashimingさんが「519です」と言っていたので、訪ねることにしました。そこで家庭菜園に苦しんでから、寝ました。1階でメッツライチを120円くらいで買って、それを部屋で飲んでました。
以上、これが1日目です。濃い、というか文章量が多い。2日目が書ける気がしないけど…
AtCoder Beginner Contest 153の解説
全完です!嬉しいです!
時間が余ったので解説を書くことにしました…!
A - Serval vs Monster
小数点以下切り上げの割り算をする問題です。
forループを回して実際にシミュレーションをして解くこともできますが、このような「Aを最低何回使ったらH以上になるか?」みたいな問題は「(H+A-1)/A」で一発で求めることもできるので、覚えておくと便利です。
B - Common Raccoon vs Monster
アライグマが同じ必殺技を使わないように相手にダメージをいっぱい与えたいですね…
よく考えると、「全ての必殺技を1つずつ出せばいい!」ということが分かります。全ての必殺技を使ってそのダメージ合計が敵の体力に届かない(合計<体力)の場合、相手を倒すことができません。
実装としては、forループを回しながら合計を数える変数に足していく…という方法が使えますが、C++の場合vectorを使うことでaccumulate(v.begin(), v.end(), 0)のように1行で書くこともできるので、覚えておくといいでしょう。
C - Fennec vs Monster
問題文を理解すると、「必殺技は使い切りたい!!」という気分になります。どの相手に必殺技を使うのが最適なのでしょうか。
よーく考えると、強い敵に必殺技を使うほうが良い、と分かります。巨大セルリアンを必殺技で倒しておいたほうが、あとは弱いセルリアンを倒したら全体として楽に倒せますね。
で、実装なのですが、C++の場合ソートを使うと楽です。ソートをすると右から大きい順に並ぶことになります。
ここで、体力をあらかじめ0にする…ということは既に倒されている→無視していい、ということなので、右からK体の体力を数えないように、つまりfor (int i = 0; i < N - K; i++) ans += v[i]; のようにすれば楽に実装ができます。
D - Caracal vs Monster
実際にどういうふうに分裂するのか、図に描いてみましょう。
それぞれの段ごとの縦線の本数が、1,2,4,8…と2倍になっています。段の高さを求めてしまえば、段の高さだけ1+2+4+…をすれば答えが求められることが分かります。段の高さは実際にシミュレーションをするといいです。半分、またその半分…となっていくので計算回数は意外と少なく済みます。
E - Crested Ibis vs Monster
ここから説明が雑になっていきます。
パッと見ですが、貪欲だと最後のあたりの処理で困っちゃうことが分かります。なので動的計画法を使いたいな…というお気持ちになります。
蟻本を読んだことがある人は、一瞬58ページの個数制限なしナップサック問題かな?と思うかもしれません。
しかしこの問題のミソは制約です。敵の体力が最大で10000、使える魔法も最大1000種類です。
なので、「dp[i] // 攻撃力の総和をiにするために必要なトキの魔力」という風にして、それらをまずはINFで初期化、dp[0] = 0; をしてから下から上るように配るDPをして、dp[H以上]の最小値を出力すればいいです。O(HN)で間に合います。
Hがたかだか10000、攻撃力もたかだか10000なので、dp[100000]のように大きめに配列を持っておくと、配列外参照を考える必要がなくなるので実装が簡単になります。
F - Silver Fox vs Monster
まず問題文を読みます。図に描いて表すのですが、ここでx-D以上x-D以下の範囲…と描くより、幅D*2+1の攻撃だ!!と考えたほうが楽になります。
ここで、数直線上に並んだものに区間を〇〇していく、という辺りで、あれ?なにか聞こえる?
…最小を求めなさい…
…Face…
…Face The…
…Face The Right Way(蟻本p.139)を思い出すのじゃ…
という声が聞こえてきます。ウソです。言い過ぎました。すいません…
このFace The Right Wayで使った考え方は、「左端のものから順番に考えていくと、それぞれ何回反転させればいいかが簡単に求められる」ということです。この問題でも、左端から考えていくと考えやすくなります。
今回の問題では「あと何回攻撃するべきか」というのが簡単に求められます。左端の敵のそのときの体力がH、攻撃力がAのとき、最低何回攻撃するべきか…そうです!A問題で問われたことと同じことが問われています。(H+A-1)/Aが使えますね。その回数だけ攻撃をすればいいことが分かります。
でも、例えば左端が「あと5回攻撃が必要!」と分かった所で、どのように攻撃するのが一番区間の使い方として賢いのでしょうか…?
よーく考えると、その部分を左端にして攻撃するのが一番いい、ということが分かります。
区間を一様に減らす…ということは遅延セグメント木が使えそうです…!
左から登場する順に体力を並べた配列を元に遅延セグメント木を作ります。
i番目の敵を左端で攻撃するとして、攻撃が重なる範囲までの敵の体力を-Aしたいので、ここで左から登場する順に敵の位置を並べた配列を使って、攻撃が何番目の敵まで当たるのかをlower_boundで求めて(右端の位置を使うといいです)、i番目の敵から二分探索で求めた位置までの区間をを(H+A-1)/A * -Aすればいいです。
あとは、左から順番に「体力が残っていれば攻撃する」を繰り返し、それをカウントしていけばいいです…!
僕はupper_boundを書いて1WAしました。気をつけましょう…
以上!
競プロの精進とそれができないPocalaについてのメモ
なんか、精進しようと思ってもできないことってないですか…?僕はあります。
先に謝りたい
適当なノリで記事を書いてしまいました。
ネットはこんな適当な記事がいっぱいある方が盛り上がるとは思っているのですが、この記事は特に適当で、箇条書きに近いです。ごめんなさい。
僕について
- 眠たい。中学のとき、授業中に寝がちだったので内申が落ちて先生に「点数は良いんですけど…内申がね…」と言われ、それから睡眠は大切!とn回言っている。
- 田舎住み。高校に行くのに1時間30分くらいかかるので、6時くらいに起きないといけない(遅刻するので)。
- タスクや予定の把握が苦手。夏休みの宿題をまともに終わらせたことがない。「始業式前日に徹夜する」じゃなくて「始業式の日を間違っていて学校から電話がかかってくる」みたいなことを今年はしました。あと夏休みの宿題何すればいいか分からずに半分終わってるとか。
- 飽き性。というかこれは自分の目標設定が下手なだけな気もしますが。
Pocalaの現状
最低限の精進ができていない
とある人が、「(精進は)コンテストに出ていればいいと思います」って言っていたような気がする。しかし自分の場合、コンテストに出れていないので精進になっていない。
土曜日に予定が重なることが多くなった気がする。最近のコンテスト全般に出れていないし、Codeforcesとかは特に「睡眠が崩壊するから出たら負けだ」とか勝手に思ってしまっている。
コンテストに出ないと精進ができない→実力は±0、とはならない。TLがコンテストで盛り上がっているのを見て、一人だけ取り残されてる気分になって(自分が悪いんですが)そういうことを考えてしまってマイナスの方に傾いてしまう。
何かと理由をつけて精進から離れている気がする
「睡眠が大切だから」「来週中間考査だから」「提出物が終わっていないから」みたいな言葉で精進から目を背けがち。
でも精進が必要なことは分かっている。なぜなら何もしなかったせいでレートが落ちたことがあるから。実際ヨーロッパに旅行に行ったとき、3週間くらい何も精進をしていなかったので実装力がレートでいうと500くらい落ちた。
「精進は大切。」それが分かっているのに、精進ができない。そんな自分を認識すると更に悔しくなってくる。しかも夜だったりするので落ち込みやすくなる…
そんなことを考えていると寝られなくなり、睡眠時間が短くなり、人間の質が落ち、負のループへ入っていく。えー。つらい。
Twitterをずーっと見ていませんか
多分この記事を読んでいる人の中でも数人かは「Pocala君、たまに秒でレスポンス返ってきてないか」って思ってるのでは…?というくらい、別タブでTwitterを常時開いている。
TLを見ていて、つよつよの人が「500点問題解きました…!」とか言ってたりすると、それに対して「(自分は何もしていないな…)」と "弱い人間なので"少しその才能に嫉妬してしまう…
ある程度時間が経つと、「他人と比較するのではなく過去の自分と比較するべき」っていうのを思い出す。それは分かっていても、他人と比較してしまう自分がダメに見えてくる。
そんなこと言ってる間にみんなこどふぉに出てるし、ぞいぞいしてる
口だけマンをしている
Twitter上で、「よし、精進するぞ」ってツイートをしてから、20分くらいツイートを見てしまっていることがよくある。で、そのあと、「いやなにもしてねぇじゃねぇか」って突っ込んでしまう。セルフ漫才ですか。
精進の方法論ばっかり考えて何もしていないのでは…?
「まず600点問題解いたほうが良いんですか…?」「解ける問題を解いて実装力を上げる方が良いんですか…?」「蟻本をまずしっかりやった方が良いんですか…?」みたいなことを色々な人に聞いてしまう。でも、その方法はみんな「良い」って判断がされる。どれも全て精進なので。「悪くはない→良い」という返事が返ってくる。うんうんそれもまた精進だね!みたいな感じで。
あれも良い、これも良い…となると精進の選択肢が増えすぎるので、この中から何をすればいいかわからなくなってきて、何もできなくなる。
この前中断したタスクを投げてしまう
実はこのブログですが、下書きの記事がめちゃくちゃあります。一度はモチベがあるのでうぉ〜!って感じで書けるんですが、一旦中断して次の日にそれを見ると「あ〜、やっぱええかな」ってなってタブを閉じてしまう。みたいなことを少なくともこの数ヶ月で5回以上はしています。もっと多いかも。このブログは途中で中断すると負けな気持ちがするので、頑張って1日で書きます。
コンテスト後にモチベが出ない
コンテストで「うわぁああああE解けなかった…」ってなっても、「自分のどこが間違っていたのか?何故この方法がダメだったのかが分からずに写経AC、解説ACした所でそれは意味がないのでは…?」と考えると深夜0時くらいになって、一旦寝て起きると「あ〜、やっぱええかな」ってなって諦めちゃいます。→コンテストで解けなかった問題はその日のうちにどんな手を使ってでも解くのがいいかもしれない
蟻本が荷物になっていませんか
「もしかしたら使いたくなるかもしれないから蟻本を持っていこう」と思って毎日カバンに蟻本を入れて高校に登校していませんか…?学校で読むのは変好きですよね…?休み時間は提出物してるし、行きと帰りは寝てますよね…?何で持っていくんですか…?重いのに…というようなことをしがち。まあそれで足腰が鍛えられたら良いんですが。
覚悟がなさすぎでは
競プロに人生(?)の多くを割いている人がいることを知ってる。でも、自分の場合重要度が「目先のタスク > 競プロ精進」となってしまう。目先のタスクのほうが、やらなかった時のデメリットに具体性があることが多いので。今競プロに高校2年をかけられますか?と聞かれても、微妙な答えしかできないと思う。
競プロ以外に時間をかけすぎている
最近していることをまとめると「精進、宿題、宿題、行事、宿題、テスト、行事、宿題」みたいな感じになっている…。上にも書いたとおり、自分にとっては「目先のタスク > 競プロ精進」なので、「あ〜宿題しないと」っていつも言っている。宿題をしなければならない(今は精進をしないべき)ということは分かっているのに、「競プロと宿題、どっちにするんだ〜!?」っていう無駄な選択を自分でしていることが多い。
タスクのハードルを上げすぎたのでは
ABC-Dの解説記事全部書く、という目標設定をしていた。けど、「いざ精進するぞ〜!」ってなった時に、400でいちいち解説書くのもなぁ…という考えから、「あ〜、やっぱええかな」ってなりがち。実際にやるタスクの分量が大きいので、そもそもやる気にならないという。
しかも、「他の精進もしてみたい!」みたいな気持ちがある時にABC-Dのやつをしようとすると「え〜、これはABC-Dより一旦〇〇するほうが良いのでは…?」みたいな思考になってしまい、手が進まない…
どうすれば良さそうか
ちょっとは「エンジニアの知的生産術」を読んだやつが活かされたかもしれない…あの本良いですよね(突然の宣伝)
まず他のタスクを一通り片付ける
片っ端から終わらせたらすっきりした気持ちで精進に挑めるのではないか…?みたいな考え。でも、これだと優先順位がめちゃ低そうなタスクも手前に無限に持ってきてしまいそうな気がする。タスクが無限に生えてきそう。
タスクを全て書き出す
自分がやろうか悩んでいることも全て、何かしらの媒体に書き出しておくと作業途中で「〇〇したほうがよかったかな…?」みたいな気持ちに囚われずにやりやすいのかな〜、みたいな気持ち。
精進のハードルを下げる
これまで、「精進の質を上げる!!」みたいなことばかりずっと考えていたので逆に精進そのものができなかった。なので、精進の質というより精進の量を上げていく方針で一旦やってみたい。
夜は疲れがちなので、逆に朝とか午前に精進を持ってくる、というのもありかもしれない。
あと、目標も具体的なものにしたほうが良いかなと思っている…(「ABC-Dを解く!」ではなくて、「ABC-Dから一問を選んで10分間で考えてみる」、のように時間設定を作ったほうがだらだら〜と考えてしまうあの現象も防げるのかもしれない)
こどふぉに出ない
リアルタイムで出てしまうと睡眠サイクルが爆散してしまうことを知りました(僕は7時間以上睡眠を取らないと昼間に睡魔がのしかかってくるので)。
よくTLでこどふぉにでたり3時ごろまで平気で起きてる人がいたりしますが多分あれはそういう人だからで、自分はそんなことできないです…
というのもこれはこないだ競プロキャンプに行った時の話があって…
自分は10時くらいからもう眠たくて脳が停止し始めてたんですが、それでも深夜2時まで謎解きをしたりボドゲをしたりする人がいて、その人たちは5時間睡眠でも大丈夫だったそうで(自分は帰りのバスでkakiraさんと2時間くらい喋った後梅田の手前までずっと爆睡してしまいました)体質の違いを思い知らされました。
長期的な計画を無理に立てない
逆転の発想(?)です。下手に長期的な計画を立てるより短期的な目標をちょこちょこ立てて実際に精進を生成したほうがいいのではないでしょうか…?みたいな考えです。どれだけ良い質の精進があったとしても精進量が0なら0になってしまうので…
あと、自分は飽き性な所があるのでずーっと同じことをするより、違うことに切り替えたりしたほうがモチベが続きそう、というのもあります。
まとめ
- ちゃんと寝る!
- 精進のハードルを下げる!
- 無理に下手な目標を立てない!
- 競プロ以外のタスクをきちんと捌く!
- 上のことができなくても、落ち込まなくても良い!
さいごに
4000文字超えました…めっちゃ下手な文章ですいません。まあ深夜テンションで書いてしまったので仕方ないと思います。
自分はTLの「できる人」と比べてあまりできない側の人なんですが、まぁなんやかんや自分の能力を見極めつつ競プロライフを送っていきたいと思います…!
ここまで読んでくださりありがとうございました!おやすみなさい…!
追記
色々と意見を聞いたり考えたりして、ある程度自分の考え(?)が固まってきたような気がするので追記します。
自分は今のところ競プロがしたい
「精進が苦しいのなら無理にやらなくても…」という意見が出てきました。確かにそれはそうです。やりたくないことを無理にするのは精神に悪い、と僕は思っています。
(でも、だからといって「休養だな〜」と思って精進をしないとレートは落ちます。というか自分は落ちました。)
まぁ、「競プロを(苦しいと思いながら)無理に続けるべきか?」というのは、精神が壊れない範囲で自分自身と相談して決めるのが良いと思います。
というのはおいておき、自分がこの記事で書きたかったのは「競プロしたい!精進したい!けど手が動かねぇ…!!うぉおお動けよ俺の右手!何で動かねぇんだよ!悔しい!」みたいな話で、「苦しみに耐えながら競プロすべきか否か」とは若干話が違ってきます。
「めっちゃ精進したい!動けよ俺の右手!何で動かねぇんだ…?」「無理にやるんだったら一旦競プロ休めば?」「いや…そういうことじゃなくて(ごめん)」ってやつに近いです(すいません…)
目先のタスク > 競プロ について
これまで自分は、「精進をするか、しないか」の2択というか、競プロの範囲だけで物事を考えてきました。でもここで、目先のタスクの存在が精進に影響を与えてしまうことに気づきました。
自分は、競プロより目先のタスクを優先してしまいます(というかある程度の人はそうだと思っています…)。すると、精進をしようと思った時に「精進ができるかできないか」というのは、そう思ったときに「目先のタスクが存在するかどうか」というのに依存してきます。
これからは「精進をどうするか」で考えるのではなく、「精進をするためにどうやって目先のタスクを片付けるか」という考え方をしていきたいと思います。分かりにくい日本語ですいません。国語勉強します(いや、そういう問題なのか…?)
つまり
- 自分は「精進したい!でも何故1mmも進まない。え〜、なんでや…?」という状態だった
- 実は、精進ができない理由は「精進の方法」にあるのではなくて、「目先のタスク」が終わってなくてそっちに逃げていたからなのでは…?という考えが出てきた。競プロの精進は精進だけでなく、人生のタスクもセットで考えたほうが良いのでは
はい、また思ったことがあれば追記することにします…
Ubuntuでタッチパッドのon/offをショートカットキーを使って切り替える
全然競プロと関係なくてすいません。要点だけまとめておきます。基本的に自分用のメモです。
まずタッチパッドが消せるかやってみる
ターミナルで
xinput list
を実行するとデバイスの一覧ができます。その中でタッチパッドっぽいやつのidを覚えておきます。(例:13)
xinput disable 13
のようにすると、タッチパッドを無効にすることができます。ちなみに反対はenableをすればいいです。
シェルスクリプトを記述する
メモ帳を開いて、
#!/bin/bash state=`xinput list-props "デバイス名" | grep Device | grep Enabled | tail -c 2` if test $state = '1' then xinput disable "デバイス名" else xinput enable "デバイス名" fi
デバイス名のところを自分のタッチパッドの名前に置き換えて、/home/hoge/bin/ に touchpad.sh で保存します。(いや多分どこでも良いと思うんですが)
ショートカットに追加
「キーボードショートカット」の設定を(多分設定からいけると思う)開いて、そこに
/home/hoge/bin/touchpad.sh
(hogeの部分は適宜書き換えて下さい)って書いて、Ctrl + Shift + Tとかで切り替えれるようにします。(このショートカットを指定する所で既存のショートカットとかぶらないように注意したほうが良いと思います…)
以上。