Đảo ngược mọi từ trong một dòng trong vim


9

Nhiệm vụ của bạn là xây dựng tập lệnh vim hoặc cung cấp một chuỗi các tổ hợp phím sẽ hoạt động trên một dòng văn bản với tối đa 140 ký tự ASCII có thể in (bất cứ nơi nào trong tệp, với con trỏ bắt đầu ở bất kỳ đâu trong dòng) và đảo ngược mọi khoảng trống- tách chuỗi trong câu trong khi giữ các chuỗi theo cùng một thứ tự.

Ví dụ: đầu vào:

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

nên trả lại:

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

Kịch bản có ít ký tự nhất hoặc chuỗi các tổ hợp phím ít nhất, để đạt được kết quả này là người chiến thắng.


1
"Đối với mục đích của câu hỏi này, nó chỉ là vim" có vẻ như tùy tiện hạn chế ngôn ngữ khi đăng một thử thách golf mã thông thường và chỉ yêu cầu trả lời trong C. ( Và tôi dường như không đơn độc với ý kiến ​​này. )
Martin Ender

27
Tại sao RACECAR không được đảo ngược?
orlp 28/03/2015

3
Bởi vì nó là một bảng màu. Hãy thử tự mình đảo ngược nó.
Joe Z.

2
Wow, tôi thật ngốc. Derp.
orlp 28/03/2015

7
@orlp Lol. Tôi nghĩ bạn đang nói đùa.
mbomb007

Câu trả lời:


9

28 25 24 tổ hợp phím

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

Macro đệ quy, tôi giả sử rằng Ctrl- rđược tính là một tổ hợp phím.

Phần khó nhất là đảm bảo macro nằm trên cùng một dòng và không phá hủy phần còn lại của tệp.


Bạn có thể sử dụng cEthay vì ct , nếu nó không kết thúc macro. Nhưng bạn có thể sử dụng Wthay vì f lđể lưu 2 nét.
Caek

@Caek Sai x2. Đoán xem cEkhi con trỏ ở đầu là a retcarahc-041gì? Và đoán xem Wchúng ta sẽ làm gì khi chúng ta ở cuối hàng?
orlp

Lưu ý về vốn E. chữ thường esẽ đi cho đến dấu gạch ngang, vốn Esẽ đi cho đến không gian tiếp theo. Tôi chỉ thử nó để xác nhận.
Caek

thử: :set ri<Enter>^qqct <C-r>"<Esc>W@qq@qcho 23.
Caek

@Caek Điều đó sẽ không làm việc. Và liên quan E, tôi biết những gì nó làm. Tôi đã đề cập rằng cE<C-r><Esc>sẽ biến a retcarahc-041thành 140-character a, AKA nó sẽ trao đổi các từ.
orlp 30/03/2015

3

24 tổ hợp phím

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

Tôi biết câu hỏi này rất cũ, nhưng tôi yêu vimgolf vì vậy tôi không thể đăng câu trả lời về một trong vài thử thách cụ thể của vim trên trang web. Thêm vào đó, giải pháp này được gắn với của Mitchp.

Giống như Mitchp đã nói, phần khó nhất là đảm bảo rằng phần còn lại của bộ đệm không bị thay đổi. Nếu không có hạn chế đó, chúng ta có thể thực hiện:

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

(19 tổ hợp phím) nhưng chúng ta cần thêm một chút để giữ an toàn cho bộ đệm. Điều này giả định một môi trường unix.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.