Language detail: Vim
Coverage: 7.14%
|
number of '+' ratings |
contribution for coverage |
Unsolved challenges
- タブ区切りデータの処理 (Nested Flatten)
- LL Golf Hole 9 - トラックバックを打つ (Nested Flatten)
- 起動オプションの解析 (Nested Flatten)
- 文字列型日時ののN秒後時間取得 (Nested Flatten)
- LL Golf Hole 7 - バイト数を読みやすくする (Nested Flatten)
codes
METHINKS IT IS A WEASEL
(Nested
Flatten)
やればできる子でした<Vim
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | :function! s:Random(n)
: if has('win32')
: let r = libcallnr("msvcrt", "rand", 0)
: else
: let r = libcallnr("libc", "rand", 0)
: endif
: return r % a:n
:endfunction
:function! s:MakeRandom()
: let res = ''
: for i in range(strlen(s:goal))
: let res = res . nr2char(char2nr('A')+s:Random(26))
: endfor
: return res
:endfunction
:function! s:CheckScore(line, goal)
: let score = 0
: for i in range(strlen(a:goal))
: let a = char2nr(strpart(s:goal,i,1))
: let b = char2nr(strpart(a:line,i,1))
: let d = a < b ? b - a : a - b
: let score = score + d
: endfor
: return score
:endfunction
:function! s:SortLines(num)
: for i in range(a:num)
: let line = getline(i+1)
: let score = s:CheckScore(line, s:goal)
: let line = printf("%05d:%s", score, line)
: call setline(i+1,line)
: endfor
": %!sort
: let lines = sort(getline(1,a:num))
: for i in range(a:num)
: call setline(i+1,strpart(lines[i],6,strlen(s:goal)))
: endfor
:endfunction
:function! s:ChangeLine(line_num, idx_num, var_num)
: for i in range(a:line_num)
: let line = getline(i+1)
: for j in range(a:var_num)
: let vline = line
: for k in range(a:idx_num)
: let split_idx = s:Random(strlen(s:goal))
: let head = strpart(vline,0,split_idx)
: let tail = strpart(vline,split_idx+1,strlen(s:goal))
: let vline = head .nr2char(char2nr('A')+s:Random(26)) . tail
: endfor
: call setline(a:line_num*(j+1)+i,vline)
: endfor
: endfor
:endfunction
:let s:initial_line_num = 300
:let s:change_idx_num = 1
:let s:variaty_num = 5
:let s:goal = "METHINKSITISAWEASEL"
:let s:start_time = localtime()
:new
:for s:i in range(s:initial_line_num)
: call setline(s:i+1, s:MakeRandom())
:endfor
:call s:SortLines(s:initial_line_num)
:let s:break_flag = 0
:while s:break_flag == 0
: call s:ChangeLine(s:initial_line_num,s:change_idx_num,s:variaty_num)
: call s:SortLines(s:initial_line_num * s:variaty_num)
: let s:line = getline(1)
: if s:line ==# s:goal
: let s:break_flag = 1
: endif
: echo getline(1)
:endwhile
:1
:let s:end_time = localtime()
:call append(0, (s:end_time - s:start_time) . " seconds elapsed")
|
LL Golf Hole 8 - 横向きのピラミッドを作る
(Nested
Flatten)
バッファが1つの数値のみからなる1行のみのとき、この数値を入力としてバッファを横向きピラミッドで置き換えます。
実行前にカーソルが1行目の左端にあることが必要です。なお、[Esc]はエスケープキー。Vim7で確認。
ほぼあなごるのASCII Starsに投稿したものの流用です。
1 | D@"A*[Esc]oGYlpxYggP@1[Esc]dd@1
|
すべて置換
(Nested
Flatten)
正規表現は magic オプションとかでいろいろ変わるので注意が必要です。
:help pattern
1 2 3 4 5 | substitute("2007-06-07", "-", "/", "g")
"=> 2007/06/07
substitute("2007-06-07", "[0-9][0-9]*", "*", "g")
"=> *-*-*
|
HTTPでGET
(Nested
Flatten)
コマンドモードで実行する。 このあと :w 好きなファイル名 とかすればよい。
1 | :e http://ja.doukaku.org/feeds/comments/
|
ピラミッドを作る
(Nested
Flatten)
vim7で...
1 2 3 | fun! Pyramid(n)
exe "normal! ".(a:n-1)."o\<esc>:%s/^/\\=repeat('*',line('.')*2-1)\<cr>:%ce\<cr>"
endfun
|
分数を小数に展開
(Nested
Flatten)
君はやれば出来るんだから、ちゃんと宿題やってきなさい!ってよく言われたなぁ...(意味不明)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | fun! Frac(a, b)
let a = a:a
let b = a:b
let i = 0
let col = range(1, b*b)
let col[0] = 0
let col[b] = 0
let s = (a / b) . "."
while 1
let i = i + 1
let a = a % b
let col[b+i] = a
let j = col[a]
if j >= 0 && j < i && col[b+j] == a
break
endif
let col[a] = i
let a = a * 10
let s .= (a / b)
endwhile
if a == 0
return s
endif
if col[a] == (i-1)
let i = 1
endif
let s = strpart(s, 0, col[a]+1) . "{" . strpart(s, col[a]+1, i) . "}"
return s
endfun
|
n人中m人が当選するくじ
(Nested
Flatten)
あ、ハードコーディング...orz
1 2 3 4 5 6 7 8 9 10 11 12 | fun! Lot(n, m)
let v = range(1, a:n)
while len(v) > a:m
if has('win32')
let r = libcallnr("msvcrt", "rand", 0)
else
let r = libcallnr("libc", "rand", 0)
endif
silent! call remove(v, (r % len(v)))
endwhile
return v
endfun
|
我ながら強引すぎるな...
(libcは動くかどうかわかりません汗)「:echo Lot(10, 5)」で実行
1 2 3 4 5 6 7 8 9 10 11 12 | fun! Lot(n, m)
let v = range(1, a:n)
while len(v) > a:m
if has('win32')
let r = libcallnr("msvcrt", "rand", 0)
else
let r = libcallnr("libc", "rand", 0)
endif
silent! call remove(v, (r % 10))
endwhile
return v
endfun
|
指定されたフォルダ以下のゴミ掃除
(Nested
Flatten)
vimスクリプト
1 2 3 4 5 6 | fun! DeleteBackupFiles(dir)
for v in split(globpath(a:dir, "*~"), "\n")
call delete(v)
endfor
endfun
call DeleteBackupFiles("/tmp")
|





turugina
#7653()
[
Vim
]
Rating0/0=0.00
Rating0/0=0.00-0+
[ reply ]