vimの行のすべての単語を逆にします


9

あなたの仕事は、vimスクリプトを構築するか、最大140の印刷可能なASCII文字(ファイル内の任意の場所、カーソルは行の任意の場所で始まる)で単一行のテキストを操作し、すべてのスペースを逆にする一連のキーストロークを提供することです。文字列を同じ順序に保ちながら、文中の文字列を分離しました。

たとえば、入力:

roF emos nosaer m'I gnisu a retcarahc-041 timil no siht noitseuq neve hguoht ti t'nseod evlovni .rettiwT RACECAR  

返す必要があります:

For some reason I'm using a 140-character limit on this question even though it doesn't involve Twitter. RACECAR  

この結果を達成するために、文字数が最も少ないスクリプト、またはキーストロークが最も少ないスクリプトが勝者です。


1
「この質問の目的のためのvimのは唯一、」通常のコードゴルフチャレンジを掲示し、Cのみで回答を求めるなどの言語制限、任意のようらしい(そして、私はこの意見に一人であるように思われません。
マーティンエンダー

27
RACECARが反転しないのはなぜですか?
orlp 2015年

3
パリンドロームだからです。自分で逆にしてみてください。
Joe Z.

2
うわー、私は愚かです。ダープ。
orlp 2015年

7
@orlp笑 冗談だと思った。
mbomb007 2015年

回答:


9

28 25 24キーストローク

:se ri<CR>^qqct <C-r>"<Esc>f l@qq@q

再帰的なマクロ、私は仮定Ctrl- r1つのキーストロークとしてカウントされます。

最も難しいのは、マクロが同じ行にとどまり、ファイルの残りの部分が破壊されないようにすることです。


マクロが終了していない場合cEct 、の代わりに使用できます。しかし、あなたがすることができます使用するW代わりに、f l2ストロークを保存します。
Caek

@Caek Wrong x2。何推測cEカーソルがの先頭にあるときに行いますかa retcarahc-041?そしてW、行の最後に来たらどうなるでしょうか?
orlp 2015年

首都に注意してくださいE。小文字eはダッシュまで行き、資本Eは次のスペースまで行きます。確認のために試してみました。
Caek

試してみてください。:set ri<Enter>^qqct <C-r>"<Esc>W@qq@q23.のために
Caek

@Caek動作しません。に関してE、私はそれが何をするか知っています。私はそれcE<C-r><Esc>がに変わることを言及していa retcarahc-041ました140-character a、別名それは言葉を交換するでしょう。
orlp 2015年

3

24回のキーストローク

ma:s/ /\r/g
V'a:!rev
gvJ

私はこの質問が非常に古いことを知っていますが、私はvimgolfを愛しているため、サイトにあるいくつかのvim固有の課題の1つに回答を投稿できませんでした。さらに、このソリューションはOrlpと結びついています。

Orlpが言ったように、最も難しい部分は、バッファーの残りが変更されていないことを確認することでした。その制限がなければ、次のようにすることができます。

:s/ /\r/g
!{rev
V}J

(19回のキーストローク)しかし、バッファを安全に保つにはもう少し必要です。これは、UNIX環境を想定しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.