Inverta cada palavra em uma linha no vim

9

Sua tarefa é criar um script vim ou fornecer uma sequência de pressionamentos de teclas que funcionem em uma única linha de texto com até 140 caracteres ASCII imprimíveis (em qualquer lugar de um arquivo, com o cursor iniciando em qualquer lugar da linha) e inverter todos os espaços. seqüência separada na frase, mantendo as seqüências na mesma ordem.

Por exemplo, a entrada:

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

deve retornar:

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

O script com o menor número de caracteres ou a sequência de menos pressionamentos de tecla, para alcançar esse resultado, é o vencedor.

Joe Z.
fonte
11
"Para os propósitos desta pergunta, é apenas vim" parece uma restrição de idioma arbitrária como postar um desafio normal de golfe com código e pedir apenas respostas em C. ( E eu não pareço estar sozinho com essa opinião. )
Martin Ender
27
Por que o RACECAR não é revertido?
orlp
3
Porque é um palíndromo. Tente reverter você mesmo.
Joe Z.
2
Uau, eu sou estúpido. Derp.
Ou orp
7
@orlp Lol. Eu pensei que você estava brincando.
mbomb007

Respostas:

9

28 25 24 pressionamentos de teclas

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

Macro recursiva, suponho que Ctrl- rconta como um toque de tecla.

A parte mais difícil foi garantir que a macro permaneça na mesma linha e não destrua o restante do arquivo.

orlp
fonte
Você poderia usar em cEvez de ct , se não estivesse finalizando a macro. Mas você pode usar em Wvez de f lsalvar 2 traços.
Caek
@Caek Wrong x2. Adivinha o que cEfaz quando o cursor está no início de a retcarahc-041? E adivinhe o que Wacontece quando estamos no fim da fila?
orlp
Observe a capital E. minúsculas eiria até o traço, o capital Eiria até o próximo espaço. Eu apenas tentei confirmar.
Caek
tente: :set ri<Enter>^qqct <C-r>"<Esc>W@qq@qpor 23.
Caek
@ Caek Isso não vai funcionar. E em relação E, eu sei o que faz. Eu estava me referindo que cE<C-r><Esc>iria transformar a retcarahc-041em 140-character a, AKA seria trocar as palavras.
orlp
3

24 pressionamentos de teclas

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

Eu sei que essa pergunta é muito antiga, mas eu amo vimgolf, então não pude não postar uma resposta em um dos poucos desafios específicos do vim no site. Além disso, esta solução está ligada à Orlp.

Assim como Orlp disse, a parte mais difícil foi garantir que o restante do buffer não fosse modificado. Se não fosse por essa restrição, poderíamos simplesmente:

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

(19 pressionamentos de tecla), mas precisamos de um pouco mais para mantê-lo seguro para buffer. Isso pressupõe um ambiente unix.

James
fonte