Fork me on GitHub

2010/03/12


このエントリーをはてなブックマークに追加
先日、「はてなFizzBuzzグループ」に入って、さっそくvimのFizzBuzzを書いたのですが...
2010-03-04 - mattnの日記 - fizzbuzzグループ
for v in range(1,100)|ec v%15?v%3?v%5?v :"Buzz":"Fizz":"FizzBuzz"|endfo
http://fizzbuzz.g.hatena.ne.jp/mattn/20100304
数日後にid:tyruさんにgolfで抜かされた!
Vim script - id:tyruが毎日FizzBuzzを一生懸命書く日記 - fizzbuzzグループ
for i in range(1,100)|ec[[i,"Buzz"],["Fizz","FizzBuzz"]][i%3<1][i%5<1]|endfo
http://fizzbuzz.g.hatena.ne.jp/tyru/20100310
これはくやしい!


ということで、もっかいFizzBuzzにチャレンジ。
ただこのgolf度はちょっとやそっとじゃ抜けないだろうし、そのままやっても面白くないのでFizzBuzzやめてBrainfuckやってみた。
コードはこんな感じ。

続きを読む...

Posted at 00:55 in ソフトウェア::vim
Tagged as: brainfuck, fizzbuzz, vim
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2008/03/06


このエントリーをはてなブックマークに追加
追記1
おもいっきり間違ってる。
後で直します。
追記2
直した。

vimも負けません。
そろそろ FizzBuzz に飽きた - にぽたん研究所
Lingua::JA::Numbers無いなら作ります。
もちろんHiraganaだけですが...
scriptencoding utf-8

silent! unlet s:ndg
let s:ndg = [
  \ {0: ''},
  \ {0: 'じゅう'},
  \ {0: 'ひゃく', 3: 'ぴゃく', 6: 'ぴゃく', 8: 'ぴゃく'},
  \ {0: 'せん', 3: 'ぜん'},
\ ]

silent! unlet s:dig
let s:dig = [
  \ {0: ''},
  \ {0: 'まん'},
  \ {0: 'おく'},
  \ {0: 'ちょう'},
  \ {0: 'けい'},
  \ {0: 'がい'},
  \ {0: 'じょ'},
  \ {0: 'じょう'},
  \ {0: 'こう'},
  \ {0: 'かん'},
  \ {0: 'せい'},
  \ {0: 'さい'},
  \ {0: 'ごく'},
  \ {0: 'こうがしゃ'},
  \ {0: 'あそうぎ'},
  \ {0: 'なゆた'},
  \ {0: 'ふかしぎ'},
  \ {0: 'むりょうたいすう'}
\ ]

silent! unlet s:num
let s:num = [
  \ {0: 'ぜろ'},
  \ {0: 'いち'},
  \ {0: 'に'},
  \ {0: 'さん'},
  \ {0: 'よん'},
  \ {0: 'ご'},
  \ {0: 'ろく', 3: 'ろっ'},
  \ {0: 'なな'},
  \ {0: 'はち', 3: 'はっ', 4: 'はっ'},
  \ {0: 'きゅう'}
\ ]

" return japanese numeric string from 'num'
function! s:num2ja(num)
  let str = "" . a:num
  let len = len(str)
  if str == 0
    return s:num[0][0]
  endif
  if len >= 17*4+1
    return s:dig[17][0]
  endif
  let n = 0
  let ret = ""
  while n < len
    if str[n] != 0 && (str[n] != 1 || (len-n)%4 == 1)
      let ret .= has_key(s:num[str[n]], len-n) ?
        \ s:num[str[n]][len-n] : s:num[str[n]][0]
    endif
    if str[n] != 0
      let ret .= has_key(s:ndg[(len-n-1)%4], str[n]) ?
        \ s:ndg[(len-n-1)%4][str[n]] : s:ndg[(len-n-1)%4][0]
      let ret .= has_key(s:dig[(len-n-1)/4], str[n]) ?
        \ s:dig[(len-n-1)/4][str[n]] : s:dig[(len-n-1)/4][0]
    endif
    "echo ret
    let n = n + 1
  endwhile
  return ret
endfunction

" generate array from 'start' to 'end'
function! s:gen_array(start, end)
  let ret = []
  let n = a:start
  while n <= a:end
    call add(ret, n)
    let n = n + 1
  endwhile
  return ret
endfunction

for n in s:gen_array(1, 40)
  echo (!(n % 3) || n =~ '3') ? s:num2ja(n) : n
endfor
期待する結果:

:so NabeAtzz.vim
1
2
さん
4
5
ろく
7
8
きゅう
10
11
じゅうに
じゅうさん
14
じゅうご
16
17
じゅうはち
19
20
にじゅういち
22
にじゅうさん
にじゅうよん
25
26
にじゅうなな
28
29
さんじゅう
さんじゅういち
さんじゅうに
さんじゅうさん
さんじゅうよん
さんじゅうご
さんじゅうろく
さんじゅうなな
さんじゅうはち
さんじゅうきゅう
40

dankogai++ nipotan++ bram++
Posted at 20:28 in ソフトウェア::vim
Tagged as: fizzbuzz, tips, vim
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip