├── capture.gif ├── README.md ├── autoload ├── server │ ├── gvimrc.vim │ └── vimrc.vim ├── server.vim └── sprite.vim ├── proc ├── ario.vim └── joypad.vim ├── data ├── color.vim ├── m01.txt ├── m02.txt ├── m03.txt ├── m04.txt ├── m05.txt ├── m06.txt ├── m11.txt ├── m12.txt ├── m13.txt ├── m14.txt ├── m15.txt ├── m16.txt └── 16x16.txt ├── game.vim └── sprite └── ario.txt /capture.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koron/vim-ario/HEAD/capture.gif -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vim-ario 2 | 3 | ![capture](https://github.com/koron/vim-ario/raw/master/capture.gif) 4 | -------------------------------------------------------------------------------- /autoload/server/gvimrc.vim: -------------------------------------------------------------------------------- 1 | scriptencoding utf-8 2 | 3 | set guioptions= 4 | set guifont=MS_Gothic:h12 5 | -------------------------------------------------------------------------------- /autoload/server/vimrc.vim: -------------------------------------------------------------------------------- 1 | scriptencoding utf-8 2 | 3 | set enc=utf-8 4 | set linespace=0 5 | set nocompatible 6 | set viminfo= 7 | -------------------------------------------------------------------------------- /proc/ario.vim: -------------------------------------------------------------------------------- 1 | scriptencoding utf-8 2 | 3 | let s:dir = expand(':p:h:h') 4 | let &rtp .= "," . s:dir 5 | 6 | call sprite#init(16, 16) 7 | call sprite#load('sprite/ario.txt', ['#000000','#b13425','#6a6b04','#e39d25']) 8 | call sprite#install_keymap() 9 | -------------------------------------------------------------------------------- /data/color.vim: -------------------------------------------------------------------------------- 1 | syntax match Char0 /[00]/ 2 | syntax match Char1 /[11]/ 3 | syntax match Char2 /[22]/ 4 | syntax match Char3 /[33]/ 5 | 6 | highlight Char1 guibg=#b13425 guifg=#b13425 7 | highlight Char2 guibg=#6a6b04 guifg=#6a6b04 8 | highlight Char3 guibg=#e39d25 guifg=#e39d25 9 | -------------------------------------------------------------------------------- /data/m01.txt: -------------------------------------------------------------------------------- 1 | 0000011111000000 2 | 0000111111111000 3 | 0000222332300000 4 | 0002323332333000 5 | 0002322333233300 6 | 0002233332222000 7 | 0000033333330000 8 | 0000221222000000 9 | 0002221221222000 10 | 0022221111222200 11 | 0033213113123300 12 | 0033311111133300 13 | 0033111111113300 14 | 0000111001110000 15 | 0002220000222000 16 | 0022220000222200 17 | -------------------------------------------------------------------------------- /data/m02.txt: -------------------------------------------------------------------------------- 1 | 0000000000000000 2 | 0000001111100000 3 | 0000011111111100 4 | 0000022233230000 5 | 0000232333233300 6 | 0000232233323330 7 | 0000223333222200 8 | 0000003333333000 9 | 0000022221203000 10 | 0000322222233300 11 | 0003312222233000 12 | 0002211111110000 13 | 0002111111110000 14 | 0022111011100000 15 | 0020000222000000 16 | 0000000222200000 17 | -------------------------------------------------------------------------------- /data/m03.txt: -------------------------------------------------------------------------------- 1 | 0000011111000000 2 | 0000111111111000 3 | 0000222332300000 4 | 0002323332333000 5 | 0002322333233300 6 | 0002233332222000 7 | 0000033333330000 8 | 0000221222000000 9 | 0002222112200000 10 | 0002221131130000 11 | 0002222111110000 12 | 0001223331110000 13 | 0000123311100000 14 | 0000011122200000 15 | 0000022222220000 16 | 0000022220000000 17 | -------------------------------------------------------------------------------- /data/m04.txt: -------------------------------------------------------------------------------- 1 | 0000011111000000 2 | 0000111111111000 3 | 0000222332300000 4 | 0002323332333000 5 | 0002322333233300 6 | 0002233332222000 7 | 0000033333330000 8 | 0022221122000000 9 | 3322221112223330 10 | 3330221311122330 11 | 3300111111100200 12 | 0001111111112200 13 | 0011111111112200 14 | 0221110001112200 15 | 0222000000000000 16 | 0022200000000000 17 | -------------------------------------------------------------------------------- /data/m05.txt: -------------------------------------------------------------------------------- 1 | 0000001111100000 2 | 0000211111111000 3 | 0002222223230000 4 | 0033233233333300 5 | 0033233223322330 6 | 0003323333332200 7 | 0000111222133000 8 | 0001133321122200 9 | 0001233322222200 10 | 0001113322222200 11 | 0000111112222000 12 | 0000122211110000 13 | 0000022221110000 14 | 0020211222100000 15 | 0022222100000000 16 | 0002222000000000 17 | -------------------------------------------------------------------------------- /data/m06.txt: -------------------------------------------------------------------------------- 1 | 0000000000000333 2 | 0000001111100333 3 | 0000011111111133 4 | 0000022233230222 5 | 0000232333233222 6 | 0000232233323332 7 | 0000223333222220 8 | 0000003333333200 9 | 0022222122212000 10 | 0222222212221002 11 | 3322222211111002 12 | 3330112113113122 13 | 0302111111111122 14 | 0022211111111122 15 | 0222111111100000 16 | 0200111100000000 17 | -------------------------------------------------------------------------------- /data/m11.txt: -------------------------------------------------------------------------------- 1 | 0000001111100000 2 | 0001111111110000 3 | 0000032332220000 4 | 0003332333232000 5 | 0033323332232000 6 | 0002222333322000 7 | 0000333333300000 8 | 0000002221220000 9 | 0002221221222000 10 | 0022221111222200 11 | 0033213113123300 12 | 0033311111133300 13 | 0033111111113300 14 | 0000111001110000 15 | 0002220000222000 16 | 0022220000222200 17 | -------------------------------------------------------------------------------- /data/m12.txt: -------------------------------------------------------------------------------- 1 | 0000000000000000 2 | 0000011111000000 3 | 0011111111100000 4 | 0000323322200000 5 | 0033323332320000 6 | 0333233322320000 7 | 0022223333220000 8 | 0003333333000000 9 | 0003021222200000 10 | 0033322222230000 11 | 0003322222133000 12 | 0000111111122000 13 | 0000111111112000 14 | 0000011101112200 15 | 0000002220000200 16 | 0000022220000000 17 | -------------------------------------------------------------------------------- /data/m13.txt: -------------------------------------------------------------------------------- 1 | 0000001111100000 2 | 0001111111110000 3 | 0000032332220000 4 | 0003332333232000 5 | 0033323332232000 6 | 0002222333322000 7 | 0000333333300000 8 | 0000002221220000 9 | 0000022112222000 10 | 0000311311222000 11 | 0000111112222000 12 | 0000111333221000 13 | 0000011133210000 14 | 0000022211100000 15 | 0000222222200000 16 | 0000000222200000 17 | -------------------------------------------------------------------------------- /data/m14.txt: -------------------------------------------------------------------------------- 1 | 0000001111100000 2 | 0001111111110000 3 | 0000032332220000 4 | 0003332333232000 5 | 0033323332232000 6 | 0002222333322000 7 | 0000333333300000 8 | 0000002211222200 9 | 0333222111222233 10 | 0332211131220333 11 | 0020011111110033 12 | 0022111111111000 13 | 0022111111111100 14 | 0022111000111220 15 | 0000000000002220 16 | 0000000000022200 17 | -------------------------------------------------------------------------------- /data/m15.txt: -------------------------------------------------------------------------------- 1 | 0000011111000000 2 | 0001111111120000 3 | 0000323222222000 4 | 0033333323323300 5 | 0332233223323300 6 | 0022333333233000 7 | 0003312221110000 8 | 0022211233311000 9 | 0022222233321000 10 | 0022222233111000 11 | 0002222111110000 12 | 0000111122210000 13 | 0000111222200000 14 | 0000012221120200 15 | 0000000012222200 16 | 0000000002222000 17 | -------------------------------------------------------------------------------- /data/m16.txt: -------------------------------------------------------------------------------- 1 | 3330000000000000 2 | 3330011111000000 3 | 3311111111100000 4 | 2220323322200000 5 | 2223323332320000 6 | 2333233322320000 7 | 0222223333220000 8 | 0023333333000000 9 | 0002122212222200 10 | 2001222122222220 11 | 2001111122222233 12 | 2213113112110333 13 | 2211111111112030 14 | 2211111111122200 15 | 0000011111112220 16 | 0000000011110020 17 | -------------------------------------------------------------------------------- /data/16x16.txt: -------------------------------------------------------------------------------- 1 | 0000 0000 0000 0000 2 | 0000 0000 0000 0000 3 | 0000 0000 0000 0000 4 | 0000 0000 0000 0000 5 | 6 | 0000 0000 0000 0000 7 | 0000 0000 0000 0000 8 | 0000 0000 0000 0000 9 | 0000 0000 0000 0000 10 | 11 | 0000 0000 0000 0000 12 | 0000 0000 0000 0000 13 | 0000 0000 0000 0000 14 | 0000 0000 0000 0000 15 | 16 | 0000 0000 0000 0000 17 | 0000 0000 0000 0000 18 | 0000 0000 0000 0000 19 | 0000 0000 0000 0000 20 | -------------------------------------------------------------------------------- /autoload/server.vim: -------------------------------------------------------------------------------- 1 | scriptencoding utf-8 2 | 3 | let s:dir = expand(':p:h') 4 | let s:servers = {} 5 | 6 | function! server#start(name, script) 7 | silent execute join([ 8 | \ '!start', 9 | \ 'gvim', 10 | \ '-u', s:dir . '/server/vimrc.vim', 11 | \ '-U', s:dir . '/server/gvimrc.vim', 12 | \ '--noplugin', 13 | \ '--servername', a:name, 14 | \ '-S', a:script 15 | \ ]) 16 | let s:servers[a:name] = 1 17 | endfunction 18 | 19 | function! server#stop(name) 20 | if has_key(a:name) 21 | silent! call remote_send(a:name, 'ZQ') 22 | call remove(s:servers, a:name) 23 | endif 24 | endfunction 25 | 26 | function! server#stop_all() 27 | for k in keys(s:servers) 28 | silent! call remote_send(k, 'ZQ') 29 | endfor 30 | let s:servers = {} 31 | endfunction 32 | -------------------------------------------------------------------------------- /autoload/sprite.vim: -------------------------------------------------------------------------------- 1 | scriptencoding utf-8 2 | 3 | let s:chars = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'] 4 | 5 | function! sprite#init(width, height) 6 | set nofoldenable 7 | set nonumber 8 | set noruler 9 | set noshowcmd 10 | set noshowmode 11 | set noswapfile 12 | set buftype=nofile 13 | set cmdheight=1 14 | set foldcolumn=0 15 | set laststatus=0 16 | set lazyredraw 17 | set linespace=0 18 | set scrolloff=0 19 | if has('kaoriya') 20 | set guioptions=C 21 | else 22 | set guioptions= 23 | endif 24 | if has('gui_running') 25 | set guifont=MS_Gothic:h3 26 | endif 27 | 28 | let &lines=a:height + 1 29 | let &columns=a:width * 2 30 | let s:height=a:height 31 | 32 | highlight Cursor guibg=NONE 33 | highlight CursorIM guibg=NONE 34 | highlight Normal guifg=#ffffff guibg=#000000 35 | endfunction 36 | 37 | function! sprite#load(fname, colors) 38 | silent execute "r ".a:fname 39 | silent 1d 40 | let i = 0 41 | while i < len(s:chars) 42 | execute printf('syntax match Char%d /%s/', i, s:chars[i]) 43 | let i += 1 44 | endwhile 45 | let i = 0 46 | while i < len(a:colors) 47 | let c = a:colors[i] 48 | execute printf('highlight Char%d guibg=%s guifg=%s', i, c, c) 49 | let i += 1 50 | endwhile 51 | endfunction 52 | 53 | function! sprite#show(pnum) 54 | execute printf('normal! %dggzt', a:pnum * 16 + 1) 55 | endfunction 56 | 57 | function! sprite#install_keymap() 58 | let pnum = line('$') / s:height 59 | let i = 0 60 | while i < pnum 61 | execute printf('noremap g%02d %dggzt', i, i * 16 + 1) 62 | let i += 1 63 | endwhile 64 | endfunction 65 | 66 | function! sprite#update(x, y, p) 67 | silent! execute printf("winpos %d %d", a:x, a:y) 68 | call sprite#show(a:p) 69 | redraw 70 | return 71 | endfunction 72 | -------------------------------------------------------------------------------- /proc/joypad.vim: -------------------------------------------------------------------------------- 1 | scriptencoding utf-8 2 | 3 | let s:dir = expand(':p:h:h') 4 | let &rtp .= "," . s:dir 5 | 6 | let s:state = { 7 | \ 'left': 0, 8 | \ 'right': 0, 9 | \ 'bottom': 0, 10 | \ 'up': 0, 11 | \ 'jump': 0, 12 | \ 'dash': 0, 13 | \ 'quit': 0, 14 | \ } 15 | 16 | function! State() 17 | return string(s:state) 18 | endfunction 19 | 20 | function! s:show() 21 | " TODO: better view 22 | "echo string(s:state) 23 | endfunction 24 | 25 | function! s:toggle(name) 26 | let s:state[a:name] = s:state[a:name] ? 0 : 1 27 | endfunction 28 | 29 | function! s:on_clear() 30 | for k in keys(s:state) 31 | let s:state[k] = 0 32 | endfor 33 | call s:show() 34 | return '' 35 | endfunction 36 | 37 | function! s:on_quit() 38 | let s:state['quit'] = 1 39 | call s:show() 40 | return '' 41 | endfunction 42 | 43 | function! s:on_left() 44 | call s:toggle('left') 45 | let s:state['right'] = 0 46 | call s:show() 47 | return '' 48 | endfunction 49 | 50 | function! s:on_right() 51 | call s:toggle('right') 52 | let s:state['left'] = 0 53 | call s:show() 54 | return '' 55 | endfunction 56 | 57 | function! s:on_bottom() 58 | call s:toggle('bottom') 59 | let s:state['up'] = 0 60 | call s:show() 61 | return '' 62 | endfunction 63 | 64 | function! s:on_up() 65 | call s:toggle('up') 66 | let s:state['bottom'] = 0 67 | call s:show() 68 | return '' 69 | endfunction 70 | 71 | function! s:on_jump() 72 | call s:toggle('jump') 73 | call s:show() 74 | return '' 75 | endfunction 76 | 77 | function! s:on_dash() 78 | call s:toggle('dash') 79 | call s:show() 80 | return '' 81 | endfunction 82 | 83 | noremap on_quit() 84 | noremap on_clear() 85 | noremap h on_left() 86 | noremap l on_right() 87 | noremap j on_bottom() 88 | noremap k on_up() 89 | noremap f on_jump() 90 | noremap d on_dash() 91 | 92 | set guifont=MS_Gothic:h9 93 | winpos 1431 0 94 | -------------------------------------------------------------------------------- /game.vim: -------------------------------------------------------------------------------- 1 | scriptencoding utf-8 2 | 3 | let s:dir = expand(':p:h') 4 | let &rtp .= "," . s:dir 5 | 6 | let s:debug = 0 7 | 8 | if !s:debug 9 | stop 10 | endif 11 | 12 | call server#start('ario', s:dir . '/proc/ario.vim') 13 | sleep 500m 14 | call remote_foreground('ario') 15 | 16 | call server#start('joypad', s:dir . '/proc/joypad.vim') 17 | sleep 500m 18 | call remote_foreground('joypad') 19 | 20 | function! s:getpad() 21 | return eval(remote_expr('joypad', 'State()')) 22 | endfunction 23 | 24 | function! s:ario_set(x, y, p) 25 | call remote_expr('ario', printf('sprite#update(%d,%d,%d)', a:x, a:y, a:p)) 26 | endfunction 27 | 28 | let s:grand_y = 700 29 | let s:accel_walk = 1 30 | let s:accel_gravity = 2 31 | let s:jump_power = 24 32 | let s:jump_frames = 8 33 | let s:dumper = 1 34 | let s:velocity_horz_max = 10 35 | 36 | let s:game = { 37 | \ 'ario': { 38 | \ 'x': 240, 'y': s:grand_y, 'p': 1, 39 | \ 'v': 0, 'w': 0, 'q': 0, 40 | \ 'prev_jump': 0, 'j': 0, 41 | \ 'jump': { 42 | \ 'jumping': 0, 43 | \ 'frame': 0, 44 | \ 'prev_button': 0, 45 | \ }, 46 | \ }, 47 | \ } 48 | 49 | while 1 50 | let pad = s:getpad() 51 | if pad['quit'] 52 | break 53 | endif 54 | let ario = s:game.ario 55 | 56 | " left/right move. 57 | if pad['left'] 58 | let ario.v -= s:accel_walk 59 | if ario.v < -s:velocity_horz_max 60 | let ario.v = -s:velocity_horz_max 61 | endif 62 | elseif pad['right'] 63 | let ario.v += s:accel_walk 64 | if ario.v > s:velocity_horz_max 65 | let ario.v = s:velocity_horz_max 66 | endif 67 | else 68 | if ario.v > 0 69 | let ario.v -= s:dumper 70 | if ario.v <= 0 71 | let ario.v = 0 72 | endif 73 | elseif ario.v < 0 74 | let ario.v += s:dumper 75 | if ario.v >= 0 76 | let ario.v = 0 77 | endif 78 | endif 79 | endif 80 | 81 | " jump 82 | if pad['jump'] 83 | if !ario.jump.jumping && !ario.jump.prev_button 84 | let ario.jump.frame = 0 85 | let ario.jump.jumping = 1 86 | endif 87 | else 88 | if !ario.jump.jumping 89 | let ario.jump.frame = 0 90 | endif 91 | endif 92 | let ario.jump.prev_button = pad['jump'] 93 | if ario.jump.jumping 94 | if ario.jump.frame <= s:jump_frames 95 | let ario.w = -s:jump_power 96 | else 97 | let ario.w += s:accel_gravity 98 | endif 99 | let ario.jump.frame += 1 100 | endif 101 | 102 | let ario.x += ario.v 103 | if ario.x < 0 104 | let ario.x = 0 105 | endif 106 | if ario.x > 1800 107 | let ario.x = 1800 108 | endif 109 | 110 | let ario.y += ario.w 111 | if ario.y < 0 112 | let ario.y = 0 113 | endif 114 | if ario.y > s:grand_y 115 | let ario.y = s:grand_y 116 | let ario.jump.jumping = 0 117 | endif 118 | 119 | " select pattern 120 | if ario.jump.jumping 121 | let ario.p = ario.p <= 6 ? 6 : 12 122 | elseif ario.v > 0 123 | if pad['left'] 124 | let ario.p = 11 125 | else 126 | let ario.p = (ario.q / 4) + 2 127 | let ario.q = (ario.q + 1) % 12 128 | endif 129 | elseif ario.v < 0 130 | if pad['right'] 131 | let ario.p = 5 132 | else 133 | let ario.p = (ario.q / 4) + 8 134 | let ario.q = (ario.q + 1) % 12 135 | endif 136 | else 137 | let ario.p = ario.p >= 7 ? 7 : 1 138 | let ario.u = 0 139 | endif 140 | 141 | " TODO: update s:game 142 | call s:ario_set(s:game.ario.x, s:game.ario.y, s:game.ario.p) 143 | sleep 16m 144 | endwhile 145 | 146 | if !s:debug 147 | call server#stop_all() 148 | qa! 149 | endif 150 | -------------------------------------------------------------------------------- /sprite/ario.txt: -------------------------------------------------------------------------------- 1 | 0000000000000000 2 | 0000000000000000 3 | 0000000000000000 4 | 0000000000000000 5 | 0000000000000000 6 | 0000000000000000 7 | 0000000000000000 8 | 0000000000000000 9 | 0000000000000000 10 | 0000000000000000 11 | 0000000000000000 12 | 0000000000000000 13 | 0000000000000000 14 | 0000000000000000 15 | 0000000000000000 16 | 0000000000000000 17 | 0000011111000000 18 | 0000111111111000 19 | 0000222332300000 20 | 0002323332333000 21 | 0002322333233300 22 | 0002233332222000 23 | 0000033333330000 24 | 0000221222000000 25 | 0002221221222000 26 | 0022221111222200 27 | 0033213113123300 28 | 0033311111133300 29 | 0033111111113300 30 | 0000111001110000 31 | 0002220000222000 32 | 0022220000222200 33 | 0000000000000000 34 | 0000001111100000 35 | 0000011111111100 36 | 0000022233230000 37 | 0000232333233300 38 | 0000232233323330 39 | 0000223333222200 40 | 0000003333333000 41 | 0000022221203000 42 | 0000322222233300 43 | 0003312222233000 44 | 0002211111110000 45 | 0002111111110000 46 | 0022111011100000 47 | 0020000222000000 48 | 0000000222200000 49 | 0000011111000000 50 | 0000111111111000 51 | 0000222332300000 52 | 0002323332333000 53 | 0002322333233300 54 | 0002233332222000 55 | 0000033333330000 56 | 0000221222000000 57 | 0002222112200000 58 | 0002221131130000 59 | 0002222111110000 60 | 0001223331110000 61 | 0000123311100000 62 | 0000011122200000 63 | 0000022222220000 64 | 0000022220000000 65 | 0000011111000000 66 | 0000111111111000 67 | 0000222332300000 68 | 0002323332333000 69 | 0002322333233300 70 | 0002233332222000 71 | 0000033333330000 72 | 0022221122000000 73 | 3322221112223330 74 | 3330221311122330 75 | 3300111111100200 76 | 0001111111112200 77 | 0011111111112200 78 | 0221110001112200 79 | 0222000000000000 80 | 0022200000000000 81 | 0000001111100000 82 | 0000211111111000 83 | 0002222223230000 84 | 0033233233333300 85 | 0033233223322330 86 | 0003323333332200 87 | 0000111222133000 88 | 0001133321122200 89 | 0001233322222200 90 | 0001113322222200 91 | 0000111112222000 92 | 0000122211110000 93 | 0000022221110000 94 | 0020211222100000 95 | 0022222100000000 96 | 0002222000000000 97 | 0000000000000333 98 | 0000001111100333 99 | 0000011111111133 100 | 0000022233230222 101 | 0000232333233222 102 | 0000232233323332 103 | 0000223333222220 104 | 0000003333333200 105 | 0022222122212000 106 | 0222222212221002 107 | 3322222211111002 108 | 3330112113113122 109 | 0302111111111122 110 | 0022211111111122 111 | 0222111111100000 112 | 0200111100000000 113 | 0000001111100000 114 | 0001111111110000 115 | 0000032332220000 116 | 0003332333232000 117 | 0033323332232000 118 | 0002222333322000 119 | 0000333333300000 120 | 0000002221220000 121 | 0002221221222000 122 | 0022221111222200 123 | 0033213113123300 124 | 0033311111133300 125 | 0033111111113300 126 | 0000111001110000 127 | 0002220000222000 128 | 0022220000222200 129 | 0000000000000000 130 | 0000011111000000 131 | 0011111111100000 132 | 0000323322200000 133 | 0033323332320000 134 | 0333233322320000 135 | 0022223333220000 136 | 0003333333000000 137 | 0003021222200000 138 | 0033322222230000 139 | 0003322222133000 140 | 0000111111122000 141 | 0000111111112000 142 | 0000011101112200 143 | 0000002220000200 144 | 0000022220000000 145 | 0000001111100000 146 | 0001111111110000 147 | 0000032332220000 148 | 0003332333232000 149 | 0033323332232000 150 | 0002222333322000 151 | 0000333333300000 152 | 0000002221220000 153 | 0000022112222000 154 | 0000311311222000 155 | 0000111112222000 156 | 0000111333221000 157 | 0000011133210000 158 | 0000022211100000 159 | 0000222222200000 160 | 0000000222200000 161 | 0000001111100000 162 | 0001111111110000 163 | 0000032332220000 164 | 0003332333232000 165 | 0033323332232000 166 | 0002222333322000 167 | 0000333333300000 168 | 0000002211222200 169 | 0333222111222233 170 | 0332211131220333 171 | 0020011111110033 172 | 0022111111111000 173 | 0022111111111100 174 | 0022111000111220 175 | 0000000000002220 176 | 0000000000022200 177 | 0000011111000000 178 | 0001111111120000 179 | 0000323222222000 180 | 0033333323323300 181 | 0332233223323300 182 | 0022333333233000 183 | 0003312221110000 184 | 0022211233311000 185 | 0022222233321000 186 | 0022222233111000 187 | 0002222111110000 188 | 0000111122210000 189 | 0000111222200000 190 | 0000012221120200 191 | 0000000012222200 192 | 0000000002222000 193 | 3330000000000000 194 | 3330011111000000 195 | 3311111111100000 196 | 2220323322200000 197 | 2223323332320000 198 | 2333233322320000 199 | 0222223333220000 200 | 0023333333000000 201 | 0002122212222200 202 | 2001222122222220 203 | 2001111122222233 204 | 2213113112110333 205 | 2211111111112030 206 | 2211111111122200 207 | 0000011111112220 208 | 0000000011110020 209 | --------------------------------------------------------------------------------