Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

VimGolf の人気問題 "One number per line" を解説してみる

$
0
0

VimGolfとは

簡単に言うとショートコーディング、コードゴルフのVim版。実行結果でなく Start, Goal のテキストが与えられて、どれだけ短いキーストローク数で変更できるかを競う。

https://www.vimgolf.com/

紹介する問題はこれ: https://www.vimgolf.com/challenges/56fb2e75ccffcc0009026473
興味ある方は是非、下の解説を見ずに挑戦してみてください。

start
- One number per line -
-----------------------
2,3,5,7,
11,13,17,
19,23,29,
goal
2
3
5
7
11
13
17
19
23
29

以下解説


解答(現状最短解)

14 ストローク
5gJV"=[<C-R><C-A>]<CR>pZZ

解説

この14文字に詰まっているテクニックを解説する。

5gJ

Jスペースで(下の)行連結
gJスペースを入れずに行連結
5gJ 5行(5回)スペースを入れずに行連結

ここではすべての行を1行にまとめている。

終了後の状態
- One number per line ------------------------2,3,5,7,11,13,17,19,23,29,
                                                               | (カーソル位置)

V"=[<C-R><C-A>]<CR>p

V行選択
"=Expression レジスタ

ここでVim式の記述モードに入る
http://vim-jp.org/vimdoc-ja/eval.html#expression

<C-R><C-A>カーソル下の WORD を挿入

今回はカーソルの位置から ------------------------2,3,5,7,11,13,17,19,23,29,が挿入される。
よって command line は
=[------------------------2,3,5,7,11,13,17,19,23,29,]
となる
------------------------2 が2と評価されて 1行目 2行目 の-(ハイフン)が打ち消される :thumbsup:

<CR> command line 入力終了

pペースト
先程 V で行選択した部分を上書きしながらペースト。
[2, 3, 5....] のリストなので改行区切りで文字列に変換されます。

終了後の状態
2
3
5
7
11
13
17
19
23
29

ZZ

ZZ保存して終了
VimGolf の定例

終わり

1, 2行目にトリックが隠されていて面白い問題でした!

VimGolf の問題は実例っぽいテキスト、コード編集です。じかに実用できるかは別として Vim の知らないテクニックが学べると思うのでおすすめです。
ちなみに vimgolf gem で手元のターミナルで問題に挑戦できます。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>