Odwróć każde słowo w linii w vimie


9

Twoim zadaniem jest zbudowanie skryptu vim lub zapewnienie sekwencji naciśnięć klawiszy, które będą działały w jednym wierszu tekstu z maksymalnie 140 drukowalnymi znakami ASCII (w dowolnym miejscu pliku, z kursorem rozpoczynającym się w dowolnym miejscu w linii) i odwracają każdą spację oddzielony ciąg w zdaniu, utrzymując ciągi w tej samej kolejności.

Na przykład dane wejściowe:

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

powinien zwrócić:

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

Zwycięzcą jest skrypt z najmniejszą liczbą znaków lub sekwencja najmniejszej liczby naciśnięć klawiszy, aby osiągnąć ten wynik.


1
„Na potrzeby tego pytania jest to tylko vim” wydaje się tak arbitralnym ograniczeniem językowym, jak publikowanie normalnego wyzwania golfowego i proszenie tylko o odpowiedzi w C. ( I nie wydaje mi się, że jestem sam z tą opinią. )
Martin Ender

27
Dlaczego RACECAR nie jest cofany?
orlp

3
Ponieważ to jest palindrom. Spróbuj to odwrócić samodzielnie.
Joe Z.

2
Wow, jestem głupia. Derp.
orlp

7
@orlp Lol. Myślałem, że żartujesz.
mbomb007

Odpowiedzi:


9

28 25 24 naciśnięcia klawiszy

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

Zakładam, że makro rekurencyjne Ctrl- rliczy się jako jedno naciśnięcie klawisza.

Najtrudniejsze było upewnienie się, że makro pozostaje w tej samej linii i nie niszczy reszty pliku.


Możesz użyć cEzamiast ct , jeśli to nie kończyło makra. Ale można użyć Wzamiast f lzaoszczędzić 2 uderzeń.
Caek

@Caek Wrong x2. Zgadnij, co cErobi, gdy kursor znajduje się na początku a retcarahc-041? I zgadnij, co Wrobi, kiedy jesteśmy na końcu linii?
orlp

Zwróć uwagę na stolicę E. małe litery ebędą szły do ​​kreski, stolica Eszłyby do następnej przestrzeni. Właśnie próbowałem to potwierdzić.
Caek

spróbuj: :set ri<Enter>^qqct <C-r>"<Esc>W@qq@qza 23.
Caek

@ Caek To nie zadziała. A jeśli chodzi o to E, wiem co to robi. Mówiłem o tym, cE<C-r><Esc>że zamieni się a retcarahc-041w 140-character a, AKA zamieni słowa.
orlp

3

24 naciśnięcia klawiszy

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

Wiem, że to pytanie jest bardzo stary, ale uwielbiam vimgolf więc nie mogłam nie pisać odpowiedź na jedną z kilku specyficznych wyzwań vim na miejscu. Ponadto to rozwiązanie jest powiązane z rozwiązaniami firmy Orlp.

Tak jak powiedział Orlp, najtrudniejszą częścią było upewnienie się, że reszta bufora nie została zmodyfikowana. Gdyby nie to ograniczenie, moglibyśmy po prostu zrobić:

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

(19 klawiszy), ale potrzebujemy trochę więcej, aby zachować bezpieczeństwo bufora. To zakłada środowisko unixowe.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.