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
"이 질문의 목적을 위해 그것의 정력은"정상적인 코드 골프 도전을 게시 만 C.에 대한 답변을 요청하는 등의 언어에 제한을 임의의로 보인다 ( 그리고 나는이 의견에 혼자하지 못하는 것 같습니다. )
마틴 Ender

27
왜 RACECAR가 역전되지 않습니까?
orlp

3
회문이기 때문에. 직접 뒤집어보십시오.
Joe Z.

2
와, 난 바보 야 Derp.
orlp

7
@orlp Lol. 농담하는 줄 알았는데
mbomb007

답변:


9

28 25 24 키 스트로크

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

재귀 매크로, 나는 가정 Ctrl- r하나의 키 입력으로 계산됩니다.

가장 어려운 부분은 매크로가 같은 줄에 있고 파일의 나머지 부분을 파괴하지 않도록하는 것입니다.


매크로를 끝내지 않은 경우 cE대신 대신 사용할 수 있습니다 ct . 그러나 대신 2 스트로크를 저장 하는 대신 사용할 있습니다 . Wf l
Caek

@Caek 잘못된 x2. cE커서가 시작될 때 무엇 을 a retcarahc-041하는가? 그리고 W우리가 줄의 끝에있을 때 무엇을 하는가?
orlp

수도에 주목하십시오 E. 소문자 e는 대시까지, 대문자 E는 다음 공간까지갑니다. 방금 확인하려고했습니다.
Caek

시도하십시오 : :set ri<Enter>^qqct <C-r>"<Esc>W@qq@q23.
Caek

@Caek 작동하지 않습니다. 에 관해 E, 나는 그것이 무엇을 하는지를 안다. 나는 그 언급했다 cE<C-r><Esc>될지는 a retcarahc-041140-character aAKA는 말을 바꿀 것이다.
orlp

3

키 입력 24 개

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

이 질문은 아주 오래 알고 있지만, 내가하지 수 있도록 내가 vimgolf을 사랑 하지 사이트에서 몇 VIM-특정 문제 중 하나에 답변을 게시 할 수 있습니다. 또한이 솔루션은 Orlp와 관련이 있습니다.

Orlp가 말했듯이 가장 어려운 부분은 나머지 버퍼가 수정되지 않았 음을 확인하는 것입니다. 그 제한이 없다면 간단하게 할 수 있습니다.

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

(19 번의 키 입력) 버퍼 안전을 유지하려면 조금 더 필요합니다. 이것은 유닉스 환경을 가정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.