Invertire ogni parola in una riga in vim


9

Il tuo compito è costruire uno script vim o fornire una sequenza di tasti che funzionerà su una singola riga di testo con un massimo di 140 caratteri ASCII stampabili (ovunque in un file, con il cursore che inizia in qualsiasi punto della riga) e inverti ogni spazio- stringa separata nella frase mantenendo le stringhe nello stesso ordine.

Ad esempio, l'input:

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

dovrebbe restituire:

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

La sceneggiatura con il minor numero di personaggi, o la sequenza del minor numero di tasti, per ottenere questo risultato è il vincitore.


1
"Ai fini di questa domanda è solo vim" sembra una limitazione linguistica arbitraria come pubblicare una normale sfida di golf in codice e chiedere solo risposte in C. ( E non mi sembra di essere solo con questa opinione. )
Martin Ender,

27
Perché RACECAR non è invertito?
orlp,

3
Perché è un palindromo. Prova a invertirlo da solo.
Joe Z.

2
Wow, sono stupido. Derp.
orlp,

7
@orlp Lol. Pensavo stessi scherzando.
mbomb007,

Risposte:


9

28 25 24 sequenze di tasti

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

Macro ricorsiva, presumo che Ctrl- rconta come una sequenza di tasti.

La parte più difficile è stata assicurarsi che la macro rimanga sulla stessa riga e non distrugga il resto del file.


È possibile utilizzare cEinvece di ct , se non terminasse la macro. Ma puoi usare Winvece di f lsalvare 2 colpi.
Caek,

@Caek Wrong x2. Indovina cosa cEsuccede quando il cursore si trova all'inizio di a retcarahc-041? E indovina cosa Wfa quando siamo alla fine della linea?
orlp

Nota la capitale E. le lettere minuscole eandrebbero fino al trattino, il capitale Eandrebbe fino allo spazio successivo. Ho appena provato a confermare.
Caek,

prova: :set ri<Enter>^qqct <C-r>"<Esc>W@qq@qper 23.
Caek,

@Caek Non funzionerà. E riguardo E, so cosa fa. Mi riferivo che si cE<C-r><Esc>sarebbe trasformato a retcarahc-041in 140-character a, AKA avrebbe scambiato le parole.
orlp

3

24 sequenze di tasti

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

So che questa domanda è molto antica, ma adoro Vimgolf, quindi non ho potuto non pubblicare una risposta su una delle poche sfide specifiche di VIM sul sito. Inoltre questa soluzione è legata a quella di Orlp.

Proprio come ha detto Orlp, la parte più difficile era assicurarsi che il resto del buffer non fosse modificato. Se non fosse per quella restrizione, potremmo semplicemente fare:

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

(19 sequenze di tasti) ma abbiamo bisogno di un po 'di più per tenerlo al sicuro. Questo presuppone un ambiente unix.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.