at_yasu's blog

ロード的なことを

Hellow world と書かずに、Hellow worldと表示

「プログラム内にHellow world を書かずに、Hellow world を表示させる」という息抜きをしました。
今回は、引数ではなく、配列に数値を溜め込んで、ascii 文字にして表示させるという方法。配列内の数値操作には、+-{}[] を使います。

+
カウンターを1上げる
-
カウンターを1下げる
{
カウンターを100上げる
}
カウンターを10下げる
[
次の文字へ
]
前の文字へ

  • 「+{{}}+」= [182]
  • 「+{{[+{}}}-]}}+」= [182,70]
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import logging

_BUFFER_ = []
_INDEX_ = 0

def parse (s, ns=0):
        global _BUFFER_
        global _INDEX_

        if len(_BUFFER_) <= _INDEX_:
                _BUFFER_ += [0 for n in range(0, _INDEX_ +1)]

        if s[ns] == '+':
                _BUFFER_[_INDEX_] += 1
        elif s[ns] == '-':
                _BUFFER_[_INDEX_] -= 1
        elif s[ns] == '{':
                _BUFFER_[_INDEX_] += 100
        elif s[ns] == '}':
                _BUFFER_[_INDEX_] -= 10
        elif s[ns] == '[':
                _INDEX_ += 1;
        elif s[ns] == ']':
                if _INDEX_ > 0:
                        _INDEX_ -= 1
        if len(s) <= ns+1:
                return
        parse(s, ns+1)

if __name__ == '__main__':
        f = "+{+}[{-}[{++}+[{--[{-}[{}}+++[[{-[{-}[{[{}}-[{--}}}]---]}++}]}]--}]]++++]}]--}}]+}++}]}}]}}"

        parse(f)
        for n in _BUFFER_:
                print "%c" % (n+32)