
VimGolf.com - real Vim ninjas count every keystroke - igrigorik
http://vimgolf.com/
======
SwellJoe
Where are the solutions? That's the fun thing about Perl golf is seeing how
people did it in X characters. Without solutions...well, I don't see the
point.

~~~
igrigorik
I'm logging the solutions, but in real MVP fashion... not showing them just
yet. Need to bootstrap a vimscript parser first.

If anyone is up for it, would love some help with the client/parser:
<https://github.com/igrigorik/vimgolf>

~~~
preek
MVP meaning 'Most Valuable Player'?

~~~
johnswamps
Minimum Viable Product

------
Calamitous
This awesomeness unexpectedly sucked away half my afternoon. Not really sure
whether to be upset about it our not. :)

Only thing is that the key counting doesn't seem to be consistent. :\ Using
the command history seems to really, really screw with the counts. I thought
it counted up all the characters in the submitted command, but this doesn't
seem to be the case. I submitted an 18 for the "Sort and add attributes"
challenge, then realized that the text for the new key is longer than that. :\

I'm not really clear on what "counts" as a keypress (shift key? colon for
commands? Paste commands? Esc?) and I haven't been able to get any of my
"scores" to match up with the count in my head.

All that aside, this is a barrel of fun, and I'm sure these kinks will get
worked out.

~~~
Calamitous
Also, it would be awesome if I could delete some of my scores. :\ My bogus win
and early attempts are cluttering up the leaderboard.

------
luigi
I want to go head to head with someone in match play.

~~~
steveklabnik
DJ Hero has a great feature where after you beat a song, you can "Challenge a
friend" and it sends a message to them that says something along the lines of
"Steve just scored 200,000 points on $SONG_NAME. Can you do better?
OK/CANCEL/ABORT"

------
gfodor
The people submitting scores of 4 are probably just adding macros to their
.vimrc

~~~
gfodor
OP: can you figure out a way to get vim to not load vimrc?

~~~
silentbicycle
vim -u NONE

(real Vim ninjas _read man pages_ )

------
Bud
This is one of the most wonderfully geeky things I have ever seen. The analogy
to golf is exceptionally well-drawn, too! It might be entertaining if you
developed the parallel even more, perhaps by adapting some of The Rules of
Golf to your project.

~~~
rbxbx
Not an original concept here.

<http://en.wikipedia.org/wiki/Perl#Perl_golf>

'Golfing' different languages has been around for some time.

No discredit to the site though, certainly happy to have Vim golfing join the
ranks.

------
devin
I had an idea for an emacs version of this.

Anyone have any ideas on how you'd implement this with emacs?

~~~
jlongster
My emacs-fu is pretty stale, but I'm sure it has the hooks to track what you
need. Although, Emacs isn't all about keystrokes, it's more about interactive
coding and an integrated development environment.

Maybe you could do something more along the lines of Perl golf, where you
achieve certain things in as little code as possible.

------
callahad
I held the title on "Brackets or Braces?" [0] for a good seven minutes with a
44 character solution [1], only to be ousted by @ryanmusicman with 42. Can
anyone see an obvious way to improve mine?

[0]: <http://vimgolf.com/challenges/4d1a522ea860b7447200010b>

[1]: <https://gist.github.com/757767>

~~~
clvv
A quick thought: use surround.vim plugin for this.

~~~
callahad
Sadly, that's not allowed :(

~~~
graywh
Which kind of defeats the purpose. I use Vim plugins to reduce my keystrokes.

~~~
lelele
I agree that all users rely on plugins for doing real work. However, seeing
how much can be accomplished by using just vanilla features can be
enlightening.

------
DEinspanjer
Ugh.. wanted to play with it, but after three years, there still isn't a
simple way to get Ruby and Gems working nicely with modern Ruby apps on OSX.
Searching for ways to update show a variety of hacks, each uglier than the
last. Of course, I could always build it from source.. ::sigh::

~~~
luigi
Not sure what you mean, as the vast majority of Ruby developers I know use OS
X. Ruby works out of the box on Snow Leopard. Or try Homebrew. Or RVM.

~~~
DEinspanjer
I'm running an MBP received a clean install of the first Snow Leopard release
and has subsequently gone through the normal system updates. On this system,
and the previous one that was running 10.5, I've never managed to get RubyGems
updated successfully.. hence, when I try to gem install vimgolf, it tells me
that I need rubygems >=1.3.6. I guess I'm just failing as a hacker and missing
something obvious. Grr.

Well, I just discovered that I had two different conflicting gem home dirs.
was able to set GEM_HOME and do "gem cleanup" and things seem to be a bit
better now. Yay!

~~~
kunley
Just mercifully ignore OSX-shipped Ruby and go with Ruby from ports, homebrew,
vanilla-source install. Or just use RVM.

~~~
steveklabnik
I use rvm on OSX every day, Ruby would be worse without it.

I'm going to sorely miss it when I start working in other languages again.

------
exogen
Ha, I just started working on the same exact project a few weeks ago. Great
minds think alike, I guess. I'm taking a different approach, so I'll still
launch it to see what people think.

I brought up this idea in a "gamification of software development" talk I gave
last April.

------
jjcm
Looks like Tim Pope started playing. He's talking about the "anti cheat"
mechanisms on twitter: <http://twitter.com/tpope/status/19900265129836544>

------
clvv
Until somebody can come up with at least some method of restricting vim
scripting, the results are useless(one can easily only use 4 key strokes by
key mapping as you can see). But, on the other hand, you can't just disable
vim from loading scripts, because there's no point in mastering the plain old
vim without any plugins, custom key mappings and such.

~~~
askedrelic
I've been trying with editing the file in another editor, then :e! :wq which
seems to give 17/18 score mostly.

I love this idea and love the challenge, but would love to make it less
hackable as well.

~~~
jjcm
ZZ instead of :wq will knock a letter off. I'm guessing that's what the
current leader with 16 is doing on this challenge:
<http://vimgolf.com/challenges/4d1a1c36567bac34a9000002>

------
jjcm
You should really make some challenges that require the users to pass multiple
tests with the same script. Sure, you can solve the reformat/refactor
challenge by

    
    
        jd2jVjj=f(ci)*a^]jcfda.join(',')^]
    

but it wont generalize anywhere. Having a full script though that will detect
and do that automagically, now there's the fun part.

~~~
jjcm

        4JD=Gjwci(*a^]jcfda.join(',')^]
    

God this is addicting. Shaved off a few characters.

edit: switch the first three letters to j3D, as 4JD seems to work differently
between my two machines.

------
DEinspanjer
This one gives a score of 32, but I like it just for the sheer one-liner
obsfucatedness:

    
    
      :g/#/+1s/\v(.*)\n.*/\1\r\1

~~~
BrandonM
ed golf, eh?

------
jjcm
Here's my Flodder Challenge
(<http://vimgolf.com/challenges/4d1a4f2ba860b744720000bf>) solution:

    
    
        ~wqave~2wq@aw2@ab~ws**^]l~fe~ww@afg@aZZ
    

(where ^] is an esc). Currently gets a score of 41 (although I only count 38
keystrokes...)

------
jh3
Only scored a 27 on the 'Reverse characters in a line' challenge...

I was trying to do this:

    
    
      :s/./&\r/g|g/^/m0|j!
    

However, that causes a to be before b for some reason.

So I ended up doing:

    
    
      :s/./&\\r/g|g/^/m0\rV}gJ
    

Anyone know why appending j! joins everything correctly except a and b?

------
eterps
Any tips on improving 'Sort and add attributes'?

I have scored 38 with:

:sor<ENTER>:%s/)/, :country => "USA")/<ENTER>

~~~
birken
:sor|%s/)/, :country => "USA")<ENTER> works for me

This shaves off a few chars: a) combining the commands b) leaving off the last
/ in the search/replace

------
Symmetry
Lets see, for the simple text editing: qa/vim<ENTER>yypjddq@a@a so 18.

~~~
Complete
qa/v<ENTER>yypjddq@a@a

16 :P

~~~
Symmetry
qa/v<ENTER>yypJDq@a@a

15

~~~
gfodor
Nice!

qa/v<ENTER>YpJDq@a@a

~~~
Symmetry
Arg, the fact that Y and yy are synonyms always messes me up. Why can't it be
like c/C/cc and d/D/dd?

~~~
lelele
Because then it would be consistent ;-)

Of course I have remapped Y to be consistent with C, D, etc.

------
meastham
Kinda a bummer for those of us who don't use twitter..

Edit: Still a very cool project though

------
seles
You can also use Vi for hundreds of challenges at <http://golf.shinh.org> alot
of the newer challenges are stale but some of the older ones are gold.

~~~
jjcm
Different game, that's counting the resulting code that you create. This is
counting the number of keystrokes to create the code (for some at least).

------
meastham
Is there anything to stop people form just writing a macro beforehand that
does each task? I'm guessing that's how the guy who 4 keystrokes on Simple
Text Editing accomplished that.

------
jjcm
FizzBuzz: (score: 71)

    
    
        i1^]
        qaYp
        CTRL+a
        q98@aggjjqaA Fizz^]
        3jq32@agg:5
        ENTER
        qaA Buzz^]
        5jq19@a:%s/z B/zB/
        ENTER
        ZZ

~~~
psadauskas
You don't need the "gg" (move to top) before ":5" (go to line 5)

~~~
jjcm
Right, I'm an idiot. Good catch - likewise the ggjj earlier can just be
:3[enter]

~~~
graywh
3G is better

~~~
clvv
who voted this down? 3G is obviously 2 key stokes while :3<CR> is 3

------
gfodor
Anyone else having problems signing in? I connected my twitter account but its
still thinking I'm not logged in.

------
zacharycohn
Hey! You demo'd this to me at Beer && Code a few weeks ago. Good to see this
has come along!

~~~
exogen
Heh, that was me, and this is actually a completely independent project.
Mine's still coming along, and I think it's an improvement.

------
neilk
Unbelievable. I had this exact same idea. Get out of my mind!

~~~
Calamitous
Me too. :) This is a much, much nicer implementation than anything I had in
mind, though,

