Vectorのeraseの計算量はO(N)!w
気をつけないとTLEで殺される。
C++で二進数を扱うときのメモ
if(v[i] & (1ll<<j))
でv[i]を二進数に変換したときのj桁目にBitが立っているかを判定できるが、vの要素がlong longの場合、1
ではなく、1ll
としないと正しく計算できないので注意。
1ll
は1をintではなくlong longとして扱います。
この問題とか、注意が必要です。
論理演算を用いた奇数と偶数の判定
一般に奇遇の判定は
int a = 10; // aは任意の整数 if (a % 2 == 1) // 処理 else // 処理
みたいなことをするが、AND演算でできることを知ったのでメモ。
上のようなソースコードは
int a = 10; if(a & 1) // 処理 else // 処理
と書き換えられる。
上記のコードにおいて、なにが行われているか簡単に説明する。
はじめに、任意の整数をnと置き、1とnを二進の値に置き換える。
1を二進数に直すと0b0000…1。つまり最下位Bitが1で、最下位Bit以外はすべて0であることがわかる。
また、任意の奇数を二進数に直すと、最下位Bitが1でその他のBitは整数によって変化することがわかる。1
次に、この2つの値の論理積を求める。
まず、最下位Bitから考える。
aの最下位Bitは、aが奇数である場合必ず1になるので、最下位Bitの論理積は1になり、偶数の場合は0になる。
次にその他のBitを考える。
1の最下位Bit以外が全て0であることから、nがいかなる値であろうと最下位Bit以外の部分での論理積は0になる。
このことから、1とnの論理積は、nの最下位Bitによって決定することがわかる。
1をboolean型にキャストするとtrue、0をキャストするとfalseになることから、上記のコードで奇数偶数判定になることがわかる。
にしても、蟻本やチーター本を読んでると、解説以外のとこにもこういう豆知識みたいなのがちょくちょく混ざってるから楽しいね🤘
-
少し考えればわかることだが、最下位Bitはを表し、その他の部分はを表している。前者は奇数を表せるが、後者は必ず偶数になることから、奇数の場合最下位Bitは1、偶数の場合は最下位Bitは0となる。 ↩
大きすぎる配列をローカルに持たない🙅🏻♀️
大きい配列はグローバルに持つ。
スタック領域・ヒープ領域が関係しているらしい。(スタック領域には制限があるとかないとか)
とりあえずdpするときとか、配列はグローバルに持つのが丸そう。
.vimconf.swp 2018に行ってきました!!
こんにちは、イナズマです。
.vimconf.swp2018にいってきました。
自分はVimを使いはじめてまだ3,4ヶ月程度なのですが…
結論から言えばめちゃ楽しかったです!!!来年もあればまた行きたいなと思いました!!
いや本当に、予定とかあった人が可愛そうです;;
ここからはLTの内容のメモとともに細かく感想を。 ただスライドみながら相当急いで書いていたので敬称略かつ誤字脱字等あるかもしれないです…>< (メモは一部発表と順序を変更しています)
.vimconf.swp
LT(と言っていいのだろうか??)
VimConf タイムテーブル徹底解説(by ujihisa)
登壇者の審査は全員一致(多数決はなし)
mattn
- ネットに顔がないのでVimConfで見るしかない
はい、mattnさんについてはこれだけです…。 実は最初の5~10分席を外していて聞けませんでした…。
VimConfでmattnさんにお会いできることを楽しみにしています。
どのように登壇者を決めたかについてもお聞きすることができました。多数決は一切なしで、全員一致するまで議論を重ねたそうです。 ただ、誰一人として同じ考えの人がいないみたいで、5時間議論しても終わらなかったようです…(お疲れ様です)
Bram
- Vimの作者
- Youtuber
- 見よう!
Bram裏話
ここには載せられない
なんと、今年のVimConfにはVim作者のBramさんが来日します!! 実はVimはBramさんのみがコミット権限を持つので、VimへのPRは必ずBramさんが目を通すことになっています。
Contributors to vim/vim · GitHub
BramさんはYoutubeでも活動を行っています。
VimConf参加者はこの動画をみてぜひ予習してくれ!!とのことです!
懇談会でいろいろBramさとやり取りする際の裏話等も聞けたのですが、あまり言わないよう言われてたので割愛します^^;
daisuze
ujihisa
- C実装をみつつモードと正面から向き合う
- 話が面白い(らしい)
Okura Masahumi
Usami Kenta
- 日本語
- 外部ツールとの連携
- 仕事、プラギン開発、汎用ツール開発の架け橋
Alisue
- Eng
- Vimscript
- Neovimとの互換
- 非同期
Akin
- 英語
- Onivim
- 人口広める
rhysd
- 日本語
- 技術枠
- WebAssembly…言語
- ブラウザでVim
名前に誤字等あったら申し訳ないです><
5時間以上かけて厳選されたお話、どれもとても楽しみにしています!!
Differnces between Nvim and Vim8 full version(by @Shougo)
- swpではフルバージョン!!
- Vim8とNeovimの違い
NvimのVimの違うとこ
- Nvimは一人が管理してるものではない
- 開発にお金をもらっている
- :help donate
- XDG defaultsに従っている
- $XDG_CONFIG_HOME/nvim
- compatibleモードはない(Nocompatible)
- defaultでシンタックス、インデント等
- 一部のVimの機能を削除
- crypt機能削除(Vimの暗号化) :help encryton
- :smileコマンド削除(プラグインがある)
- viminfoがない
- 代わりにshada(バイナリ)(Viminfoはテキスト)
- 前回のレジスタを覚える、的な
- Nvim固有のAPI
- nvim_parse_expression() Vimscriptの式を評価
- :help api
- built in LSP
- LSPのクライアントを入れなくても動く
- GUIを再実装
- TUI(端末機能)再実装
- term.cを削除
- Vimでは動くけどNvimではうごかないみたいなことがある
- 逆も
- python, ruby機能を再実装
- ラッパーなのでVim8より遅い
- Nvim remote plugin(いろんな言語でVimのプラグインをかける)
- でふぉでLuaが入ってる
- Vimのif_luaとは微妙に挙動が違う
- LSPクライアントはLuaで実装されている
- jobとターミナル機能
- Vimのほうが実践的な機能
- remote機能等がないので
- Vimのパッチをすべてを取り込んでいるわけではない
- もっとContributeしてくれ!!
- どんな人がNvim使うべき??
- 独自機能が好き
- Vimscript嫌い!!
- Vimは?
- 互換性
- 開発スタイル
- NvimはVim8より早いの?→環境次第
- :help vim-differnceにvimとの違いが詳しく書いてある
最後に
- VimConf2019にリベンジしたい!!
- 第四世代のプラグイン
- defx, deoppet
うおおお濃厚だぁ!自分の知識じゃわからない単語もあったので少しづつ調べていこうと思います。
自分はNvimから入ったのでVimをほとんど使ったことがないのですがやっぱNeovim便利だなぁと。 端末の機能やLuaが最初から入ってるあたり、初心者にも優しいなと思いました。
でもやっぱり一概にNeovimのほうが上位互換ではないみたいですね。各自違いを認識して自分にあったVimを使いましょう!!
最後に、ShougoさんはVimConf2018には登壇できなかったので2019でリベンジしたいと話していました。第四世代のプラグイン、とても楽しみにしています!!(それ以前のプラグインもありがたく使わせてもらってます!!!)
いつか自分もcontributorとして貢献できるように強くなりたいです…!
ShougoさんのスライドはVimConf後に後悔されるようなので、楽しみに待ちましょう!
今回の発表資料はLTのネタバレになるため、本編のvimconf終了後に公開しようと思います#vimconfswp
— 暗黒美無王 dark Vim (@ShougoMatsu) October 31, 2018
僕の推しプラグインをみて! (by eiya000)
推しVimはNeovim
おすすめVimplugin
見た目
foldCC
- Vimの折りたたみの表示をわかりやすく
vim-matchup
- 括弧の対応付けを拡張
- カッコ以外も
vim-shot-f
- 飛べる位置を可視化
vim-highlightedyank
- yank箇所をハイライト
vim-indent-guides
- indent可視化
- トグルで有効無効
vim-devicon
- devicon表示
編集
ツール編
自作
プラグイン大量じゃああ!!
この中でも自分も使っていて便利に感じるのはlexima.vim
ですね。
個人的に気になったのは、
Elegant collabolate for vim(by hokke)
vimscriptの代わりにRubyを使いたいと思うはず!!
Rubyがあまりわからないです…orz
vimのヘルプボットは裏で何をしているのか(by @thinca)
Slackのvim-jpで:help *
みたいな感じでVimのヘルプを見せてくれるBotです。
どんな実装をされているのかを見ることができました。
なんかヤバそうな正規表現がでてきてましたw(thincaさんも覚えていない-1
の正体とは…?)
IOS DEV WORKFLOW WITH VIM(by jkaplan)
Nvim使い
XCodeを使ったことがないのであまりわからなかった…orz
スライドのメモはこんな感じで終わりです。
で、このあと追い夕食を食べに部屋を移動しました。
懇談会
大量のピザとコーラを食いながら(うまい!!)いろんなVimmersと交流しました。 僕のいた卓はたまたまVim歴が僕と同じくらいの人たちだったので、Vimトークもかなり弾みました!!
ちなみに、
「推しVimはなんですか?」
「僕Neovimです」
「私は普通のVimです」
「自分はgvimです」
みたいなVimmer特有の挨拶が繰り広げられてましたw
また、後半は突発的な質問コーナーが始まり、VimConfの裏話等々聞くことができました。 が、ここに載せられることではないので割愛します^^;
最後に
こんな感じでした。 いろんな方のいろんな視点からお話を聞けてとても楽しかったです!!
VimConf2018でまたお会いしましょう!!
Atommer「VimじゃTeletypeできないじゃん」Vimmer「え、できるけど^^」
別にTeletypeとか使う頻度低いけど、まぁできるに越したことはないよね。 日本語での解説記事がなさそうなので(あったら教えて)使い方を書いてみました。ちなみにTeletypeってのは一つのファイルをリアルタイムで共同編集する機能のことだと思ってください。
Installation
まず、これを落としてきてください。(インストール法はここでは割愛)
Python依存なので、もしpathを通してなかったら通し(方法はここでは割愛)*1、以下を実行します。
pip3 install neovim
次にここのアカウントを作ります。ここからGitHub連携させるのが楽でしょう。
作ったらホーム直下に.floorc.jsonを作ります。作成したアカウントに.floorc.jsonの内容があると思うのでそれをコピペすればおkです。 これの黄色で囲まれてる部分を一番下までまるまるコピペです。
最後にvimで:UpdateRemotePluginを実行します。 これで準備OKです!!
Usage
3つコマンドを覚えておけばだいたい大丈夫です。詳しくGitHubのREADMEあたりを読みましょう。
:FlooShareDirPublic /path/to/files
全人類に公開します。:FlooShareDirPrivate /path/to/files
↑のプライベート版
これらのコマンドを使ったとき、ワークスペースの名前も決定します。
:FlooJoinWorkspace https://floobits.com/owner/workspace_name
参加します。ownerとworkspace_nameは適宜変更しましょう。
最後に
ごめんなさい、ここまで書いてなんですがこの機能を使ったとき僕の環境下ではdeopleteが4にます。設定が悪いのか環境が悪いのか、相性が悪いのかはわかりませんが、この機能を使ってもdeopleteが使える人がいましたら、よかったらコメントお願いします。
*1::echo has('python3')で1が返ってくればおkです
Atom用のスニペットをVim用に変換するやつ
こんちゃーす、イナズマです。 この記事はAtomユーザー以外には無益です。Vimに移行する気が一ミリでもあるような(もしくはAtomとVimを併用している)Atomユーザーを対象に書いてます。
はじめに
ちょっと前までAtomだけ使ってたんですが、最近はVimをよく使うようになりました。 競技プログラミングにおいてスニペットは必須だと思っているので、Vimに乗り換えるにあたってスニペットの移行をしようと思いました。Vimのスニペットには(安定の)Shougoさんのプラグインを使います。 github.com
んで、いざ移行しようと思ったもののAtomのスニペットは.cson1というよくわからない形式で書かれていました。Vimのスニペットも.snipというよくわからない形式で書く必要がありました。 つまり単純なコピペでは移行できません。しかもスニペット本文(っていえばいいのか?)も微妙に書き方が違うので結構書き直す部分がありそうです。う〜ん困った。
作った
ということで、AtomのスニペットをVimのスニペットとして扱えるようにするnpmパッケージを作ってみました。 www.npmjs.com
最初はPythonで書こうと思ったのですが、csonっていう形式がよくわからなかったのでjsonに変換してくれるパッケージがあるNodeで書きました。 www.npmjs.com 使いにくい部分ありますが、最低限は動いてくれるかなと思います。
終わりに
文字がかなり読みにくいので文字色とか変えていこうかと思います。他にももう少し機能を追加する予定です。 すでにいくつか確認していますが、バグとかあったらIssueにおねがいします。
Issues · Inazuma110/snippets-resycler · GitHub
-
あんまり調べてないので詳しくはわからないが、jsonにコメントとかがかけるらしい。あとcoffeescriptってのに関係があるとか。↩