明けましておめでとうございます
明けましておめでとうございます。
asciifi all the iamges
このAAコンバーターを使うとこんなAscii Artになる。
00 00 0000000 1000 0000000 10000 000000 1 0000 00000000 010000 0000000 00000 01100000 00001 111110000 0001 100 0111110000 0011 0 1111000 0000 000 11100000000000 001 111000 0000000 00 1100000000 0000 1000 1 11000 0000 000 00 10000 000 0000000 11000 0000 0000010 1000 0000 00000100 100 0000000001100 100000000000000111100 11110000000001111 100 111111111111111 100 000 111111111 100000000 100111000 111111100 111 01100 1100 110 100 110 10 01 10001111 1111
さらにこれをBrainfuckにすると以下になる。
Brainfuckとは
Brainfuck -Wikipedia-
Brainf*ck -Kazuhiro Inaba-
++ ++ +++++++ ++++ +++++++ +++++ ++++++ + ++++ ++++++++ ++++++ +++++++ +++++ ++++++++ .---- ---.+++++ ++++ +++ +++..+++++ ++++ . [-]>++++ ++++ [<+ +++>-]<.+++++++ +++ ++++++ +++++++ ++ ++++++++++ ++++ ++++ + ++.-- ---- --- .++ +++++ +++ ++++++ ++.[- ]>++ ++++++[ <+++ +>- ]<.+++++++ +++ +++++++++++++ +++++++++++++++++++++ +++++++++++++.--- +++ ---------------- +++ ---- ---.----. +++++++++ ++++++++. ---------- --- ------ ---- --- --- --- -- -- -------- -----..
実装
Groovy版の実装がもうあったので、ありがたく使わせもらう。
普通はBrainfuckの実装を楽しむものなんだけどね。(^_^;)
[twitter:@fumokmm]版:GroovyでBrainf*ckインタープリタを実装してみた
[twitter:@uehaj]版:どう書く.org課題「BFコンパイラー」
複数行でもOKな@fumokmm版を使用した。
class BrainFuck { String source def tape int pointer def parenMap BrainFuck(source) { this.source = source this.tape = [0] this.pointer = 0 this.parenMap = makeParenMap() } def makeParenMap() { def list = [] source.eachWithIndex{ s, idx -> list << [idx, s] } list = list.findAll{ it[1] =~ /[\[\]]/ } assert list*.get(1).with{ it.count('[') == it.count(']') } def stack = [] def map = [:] list.each { def idx = it[0] def c = it[1] if(c == '[') stack << idx else { def from = stack.pop() def to = idx map[from] = to map[to] = from } } map } /** main process */ def run() { int cursor = 0 while(cursor < source.size()) { switch(source[cursor]) { case '>': pointer++; if(!tape[pointer]) tape[pointer] = 0; break case '<': pointer--; break case '+': tape[pointer]++; break case '-': tape[pointer]--; break case '.': print tape[pointer] as char; break case ',': getChar(); break case '[': if (tape[pointer] == 0) cursor = parenMap[cursor]; break case ']': if (tape[pointer] != 0) cursor = parenMap[cursor]; break } cursor++ } } /** read from STDIN */ String getChar() { // TODO } } new BrainFuck(new File(args[0]).text).run()
実行結果
groovy BrainF_ck.groovy 2012.txt
HAPPY NEW YEAR!!
本年もG*でいろいろ遊ばせてもらますので、よろしくお願いします。