blog.monophile.net

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。 また、計算を主題に制作を行い、現代音楽作品や公共インスタレーション作品など技術提供を行う。 三輪眞弘に師事する。

List

そろばんを標準出力で表現

目的

プログラムでそろばんの盤面をAAで表現する。

soroban.py

pythonで書きました。

koma = "<|>"
jiku = " | "

d = { 0: [ koma, jiku, jiku, koma, koma, koma, koma ],
      1: [ koma, jiku, koma, jiku, koma, koma, koma ],
      2: [ koma, jiku, koma, koma, jiku, koma, koma ],
      3: [ koma, jiku, koma, koma, koma, jiku, koma ],
      4: [ koma, jiku, koma, koma, koma, koma, jiku ],
      5: [ jiku, koma, jiku, koma, koma, koma, koma ],
      6: [ jiku, koma, koma, jiku, koma, koma, koma ],
      7: [ jiku, koma, koma, koma, jiku, koma, koma ],
      8: [ jiku, koma, koma, koma, koma, jiku, koma ],
      9: [ jiku, koma, koma, koma, koma, koma, jiku ],
      "margin": [ "-", " ", " ", " ", " ", " ", " " ],
      "frame": ["|"] * 7
    }

def digits2str(digits):
    hrz = "|" + "=" * ( (len(koma) + 1)  * len(digits) -1 ) + "|"
    ret = [hrz]
    for i in range(7):
        if i == 2:
            ret.append(hrz)
        ret.append("|%s|" % " ".join([ d[digit][i] for digit in digits ]))
    ret.append(hrz)
    return "\n".join(ret)

if __name__ == "__main__":
    import sys
    for line in sys.stdin.readlines():
        digits = [ int(i) for i in line.replace("\n", "") ]
        print(digits2str(digits))

実行

標準入力から数値を表す文字列を投げ込むとそれに対応したそろばんが表示されます。

$ echo "0123456789" | python soroban.py
|=======================================|
|<|> <|> <|> <|> <|>  |   |   |   |   | |
| |   |   |   |   |  <|> <|> <|> <|> <|>|
|=======================================|
| |  <|> <|> <|> <|>  |  <|> <|> <|> <|>|
|<|>  |  <|> <|> <|> <|>  |  <|> <|> <|>|
|<|> <|>  |  <|> <|> <|> <|>  |  <|> <|>|
|<|> <|> <|>  |  <|> <|> <|> <|>  |  <|>|
|<|> <|> <|> <|>  |  <|> <|> <|> <|>  | |
|=======================================|