" Vim plugin -- for a given script karma, print possible user votes " File: karma.vim " Created: 2007 Aug 29 " Last Change: 2007 Aug 29 " Author: Andy Wokula " Version: 1 " Installation: " :source karma.vim " or put the file into the ~/.vim/plugin/ folder " " Usage: " :Karma {score} {votes} " " http://vim.sourceforge.net/karma.php " script karma Rating {score}/{votes}, Downloaded by ... " " Note: the math is derived from an example, I didn't prove anything " Credits: " rewrite of vimscript #936 " Karma Decompiler : Makes statistics based on Karma if exists("loaded_karma") finish endif let loaded_karma = 1 if v:version<700 echo "karma: you need Vim7" finish endif function! s:Karma(...) if a:0 < 2 echo ":Karma {score} {votes}" return endif let score = a:1+0 " 2155 let votes = a:2+0 " 659 echo "Karma:" score."/".votes let pm = score / 4 " 538, close to score, still missing votes (p) let mv = votes - pm " 121, number of missing votes let sth = pm * 4 + mv " 2273, score too high, votes ok (p, q) let sd = (sth - score)/3 " 39, score diff let p = pm - sd " 499, lower bound for Life Changing let q = mv + sd " 160, upper bound for Helpful let r = 0 " 0, min for Unfulfilling let s = p*4 + q - r " 2156 = 499*4 + 160 - 0 let sd = 0 " declare var unused if s%2 != score%2 " 0 != 1 " adjusting with q and r requires an even difference let p += 1 " 500 let q -= 1 " 159 endif let sd = (p*4 + q - r - score)/2 " adjust with q and r let q -= sd " 157 let r += sd " 2 " :Karma 15 19 vs. :Karma 15 21 if p < 0 let sd = -p / 2 + -p % 2 let p += 2*sd let q -= 5*sd let r += 3*sd endif echo " 1. Life Changing:" p " Helpful:" q " Unfulfilling:" r " echo " Check: Score =" 4*p+q-r " Votes =" p+q+r if p < 0 || q < 0 || r < 0 echohl WarningMsg echo "This score is not possible, typo?" echohl none return endif let p+=2 let q-=5 let r+=3 if q < 0 return endif echo " 2. Life Changing:" p " Helpful:" q " Unfulfilling:" r " echo " Check: Score =" 4*p+q-r " Votes =" p+q+r let bm = q/5 let p += bm*2 let q -= bm*5 let r += bm*3 if bm==0 return endif if bm>1 echo " ..." endif echo (" ".(bm+2))[-4:].". Life Changing:" p " Helpful:" q " Unfulfilling:" r " echo " Check: Score =" 4*p+q-r " Votes =" p+q+r endfunction command! -nargs=* Karma call s:Karma() " vim:set ts=8 sts=4 noet: