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.
Odpowiedzi:
282524 naciśnięcia klawiszyZakł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.
źródło
cE
zamiastct
, jeśli to nie kończyło makra. Ale można użyćW
zamiastf l
zaoszczędzić 2 uderzeń.cE
robi, gdy kursor znajduje się na początkua retcarahc-041
? I zgadnij, coW
robi, kiedy jesteśmy na końcu linii?E
. małe literye
będą szły do kreski, stolicaE
szłyby do następnej przestrzeni. Właśnie próbowałem to potwierdzić.:set ri<Enter>^qqct <C-r>"<Esc>W@qq@q
za 23.E
, wiem co to robi. Mówiłem o tym,cE<C-r><Esc>
że zamieni sięa retcarahc-041
w140-character a
, AKA zamieni słowa.24 naciśnięcia klawiszy
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ć:
(19 klawiszy), ale potrzebujemy trochę więcej, aby zachować bezpieczeństwo bufora. To zakłada środowisko unixowe.
źródło