んぐのルーズリーフ

んぐの日記。最近はScrapBoxが主

Vimキーバインドの$と0を入れ替える

Vimマッピングのなかで唯一気に入らないキーバインドがあります。

それが0$です。

  • 0: カーソルがある行の先頭へ移動

  • $: カーソルがある行の末尾へ移動

ようは0は左端に移動、$は右端に移動です。でもね、キーボードの配列では0が右側、$が左側にあるんです!!!!!!!!!!!!!!!!!!!!()

これと似たようなものにIAがありますが、これはまだ納得できるんですよ。iIaAででそれぞれ「入る側」が同じだから。頭より先に手がすっと理解してくれる。 (さすがにiはキーボード右側にあるのにカーソル左側でインサートモードに入ることには文句つけません。「insert mode」のiなのにカーソル右側に入られたら嫌でしょう)

けど、0$はなんの脈絡も無くだよ!!ちょっと覚えにくすぎないですか???


というわけで0$の役割を入れ替えましょう。

nnoremap 0 $
nnoremap $ 0

はい解決すっきり。これですっきり。



mapは遅い場合があるのでsetやunorderedを検討する


対象の問題

https://atcoder.jp/contests/joi2007ho/tasks/joi2007ho_c

atcoder.jp



略解

2頂点決まれば、あともう2頂点の座標は計算で出せるので、そういう2頂点が存在するかを調べれば良い。 したがって、2頂点の存在を適切なデータ構造で確認すれば O\left( _nC_2 \log{n} \right)で解ける

適切なデータ構造 として map<pair<int, int>> を選んだが、これだとTLEだった



解決方法

setunordered_set を使う。map よりも高速に動作する。 特に unordered_set は格納順が規定されていないためより高速。

qiita.com


以下メモ的コード例です

// 要素の追加
mp[Key] = 1;      // map
st.insert(Key);   // set
u_ut.insert(Key); // unordered_set

// 要素が存在するか
if (mp[Key] == 1) { ... }
if (st.find(Key) != st.end()) { ... }
if (u_st.find(Key) != u_st.end()) { ... }


ただし、 unorderd_set<pair<int, int>> などはエラーが出るため以下のように解決する (参考: std::unordered_setはデフォルトではpairが使えない[自分用メモ] - Qiita

struct phash {
    inline size_t operator ()(const pair<int,int>& p) const {
        const auto h1 = hash<int>()(p.first);
        const auto h2 = hash<int>()(p.second);
        return h1 ^ (h2 << 1);
    }
};

int main() {
    unordered_set<pair<int, int>, phash> u_set;
}



同じ失敗を繰り返さないために

map<Key, bool> と定義したくなったら setunordered_set を検討する

  • 特にソートされている必要がないなら unorderd_set を検討する



参考

正答コード

atcoder.jp



2019年もそろそろ終わるので欲しい物全部言う

どうも、んぐです。

いよいよ12月も中旬、年を越すのもあともう少しということで。 編入の勉強やばいですが強く生きようと思います。

さて、今回は2019年、んぐがほしくなったもの総ざらいということでこのブログに列挙していきます。

本当は「欲しい物全部買いました!紹介します!」が良かったです。お金ください。


  • 文房具
  • パソコン・IT系
  • 編入参考書
  • 趣味の参考書
  • 普通の本
  • おもちゃ系
  • 終わりに
続きを読む

プロコン参加日誌 #procon30

どうも、んぐです。

プロコンの参加記を書きます。

疲れた()ので、簡単にだけ書き留めます。

  • 情報
  • 大会まで
  • 大会当日
    • 1日目
    • 2日目
    • 対戦終了後
  • 移動部門
  • プログラムの実装について
  • 最後に
続きを読む

LaTeXでプログラムのソースコードを綺麗に出力

完全に筆不精のんぐです。

この記事ではLaTeXでプログラムのソースコードを綺麗に出力する方法を書きます。

思ったより調べるのに苦労したので、1つでも参考資料を多くするという意味も込めて書き残します。



環境


{ \displaystyle
\LaTeX
}の環境って何をどこまで書けばいいのかよく分かりませんねー。 一応環境は書いておきましたけど、他の環境でも同じような方法でできると思います。

jlistingの導入

ソースコードの表示には主に listing というものを使うんですが、日本語が含まれるソースコードを書く場合には jlisting が必要になります。まぁなくても問題ないんですが、日本語のコメントアウトの表示がバグったりするらしいので入れておきます。

こちらのサイトからダウンロードさせていただきましょう → https://osdn.net/projects/mytexpert/downloads/26068/jlisting.sty.bz2/

ダウンロードして解凍したら jlisting.sty が入っているのが確認できると思います。

これを C:/w32tex/share/texmf-dist/tex/latex/listings/ の中にぶち込んでください。ここは環境によって変わると思いますが、WindowsW32TeXをインストールしてたら、まずこのパスだと思います。


これで環境構築は完了です。


ちなみにこのあとコマンドプロンプトmktexlsr を叩いたほうが良い説はあります。僕は叩きましたが意味はわかっていないので各自調べてください。

[参考]

TeX文書を書く

ここからは多種多様かと思いますが、一例を示します。以下の画像のような感じにすることを目指します。

f:id:luling:20190918221248p:plain


少し長いですが、以下のコードを挿入してください。 例の文書から、ソースコードの表示を制御している部分だけ抜き出してきました。雛形として利用してください。

\usepackage{listings, jlisting, color}
\definecolor{OliveGreen}{rgb}{0.0,0.6,0.0}
\definecolor{Orenge}{rgb}{0.89,0.55,0}
\definecolor{SkyBlue}{rgb}{0.28, 0.28, 0.95}
\lstset{
  language={C++}, % 言語の指定
  basicstyle={\ttfamily},
  identifierstyle={\small},
  commentstyle={\smallitshape},
  keywordstyle={\small\bfseries},
  ndkeywordstyle={\small},
  stringstyle={\small\ttfamily},
  frame={tb},
  breaklines=true,
  columns=[l]{fullflexible},
  numbers=left,
  xrightmargin=0zw,
  xleftmargin=3zw,
  numberstyle={\scriptsize},
  stepnumber=1,
  numbersep=1zw,
  lineskip=-0.5ex,
  keywordstyle={\color{SkyBlue}},     %キーワード(int, ifなど)の書体指定
  commentstyle={\color{OliveGreen}},  %注釈の書体
  stringstyle=\color{Orenge}          %文字列
}
  • 当然\begin{document}をする前の部分に挿入してください。

  • 一つの文書で複数の言語を利用する場合は、\lstset{ ..., language={C++}, ... }の部分を削除して、本文中で\begin{lstlisting}[language=Python]などというようにlistingを記述する毎に言語を指定するのが良いと思います。その例は「まとめ」の項に出てくる「全体のTeX文書例とその出力結果」を参考にしてください。



実際にコードを書く部分は以下のような感じです。

\begin{document}

\begin{lstlisting}[caption=, label=, language=C++]
# include <iostream>
using namespace std;

int main() {
    cout << "Hello, World!" << endl;
    
    return 0;
}
\end{lstlisting}

\end{document}


キャプション(caption)とラベル(label)を省略していますが、当然書くこともできます。デフォルトの設定では listing 1 というキャプションが付きます。

キャプションの listing の部分を変更したい場合は \renewcommand{\lstlistingname}{Code} などというコードを追加してください。

まとめ

最後に全体の全体のTeX文書例とその出力結果を載せておきます。適宜参考にしてください。 drive.google.com



参考

listingが対応している言語一覧 tex2e.github.io


所望の言語がlistingに対応していない場合

e8l.hatenablog.com

応用情報技術者試験に合格していました

応用情報技術者試験’(春期)に合格していました(今更)

f:id:luling:20190824182447j:plain

というわけで合格までの勉強法とか。感想戦をしたいと思います(今更)


目次

  • 試験の感想
  • 試験勉強の方法
    • 午前対策
    • 午後対策
    • 参考書
  • FE飛び級について
  • まとめ



俺、目次のCSS書こうな……

続きを読む

平成最後

どうも、んぐです。

いよいよ平成の時代も終わるということですが、皆さんいかがお過ごしでしょうか。


あまりそういう実感はないですが、私は平成12年生まれなので、人生の半分以上を平成で過ごしてきたんですね。そう考えると、平成も長かったような短かったような。不思議な気持ちになりますね。


さて、見切り発車でブログを書き始めたんですが何を書きましょうかね。

平成の歩みを年表で振り返りながら自分語りをするのもいいかなと思いましたが、そこまでの気力もモチベーションもないので、今回はここで終わりにしたいと思います。


令和の時代も良い時代になりますように。