1 of 15

ベルトコンベアで�何でも計算しよう

wass

2 of 15

自己紹介

  • wass
    • んなぁ

  • 最近の話題
    • 研究久しぶりすぎてやり方全部忘れた

3 of 15

工場生産ゲームをご存知ですか?

  • Factorio
  • Dyson Sphere Program

4 of 15

工場生産ゲームに登場する「論理」の要素

  • ベルトコンベアを装置に流すところで論理が出てくる。
    • 需要に合わせて材料を流したい
    • 交互に材料を流したい

5 of 15

「論理」が出てくると気になりますよね

  • これは「計算」ができるのではないだろうかと

6 of 15

これを叶えてくれるゲーム 『Infinite Turtles』

数字流れてくる�配線する�答え作り出す

使える素子は�たった6素子

7 of 15

使える素子

  • 複製する
  • +1/-1する
  • ゼロとnullを入れかえる
  • nullだけ弾く
  • 右に流すか左に流すか、裏から流すと反転する
  • ロックする

8 of 15

使える素子

  • 複製する
  • +1/-1する
  • ゼロとnullを入れかえる
  • nullだけ弾く
  • 右に流すか左に流すか、裏から流すと反転する
  • ロックする

計算できそう……?

9 of 15

使える素子

  • 複製する
  • +1/-1する
  • ゼロとnullを入れかえる
  • nullだけ弾く
  • 右に流すか左に流すか、裏から流すと反転する
  • ロックする
  • 他の実装を参照する

10 of 15

使える素子

  • 複製する
  • +1/-1する
  • ゼロとnullを入れかえる
  • nullだけ弾く
  • 右に流すか左に流すか、裏から流すと反転する
  • ロックする
  • 他の実装を参照する ← 計算できそう!!!

11 of 15

というわけで結構な計算をやらされます

  • AtCoderでA問題以上B問題未満ぐらいの問題をベルコンで

12 of 15

任意の計算をさせたい

  • いちいちベルトコンベアを引くのはしんどい
  • プログラムをベルトコンベアで書いて、�計算をさせれば良いのでは?
  • BrainFuckをTuring Turtlesで実装したよ!!!

13 of 15

実装

数字しかないので置き換えてるよ�メモリが存在していて

  • 0: < 左のメモリへ
  • 1: > 右のメモリへ
  • 2: + メモリの値+1
  • 3: - メモリの値-1
  • 4: . メモリ出力(out)
  • 5: , メモリ入力(in)
  • 6: [ メモリ0なら対応する]へジャンプ
  • 7: ] 対応する[へジャンプ

14 of 15

  • 5 4 $ → in out $
    • 入力を読んで出力する
  • 2 4 3 4 $ → + out + out $
    • 1と2を出力
  • 5 0 5 4 1 4 $ → in > in out < out $
    • A Bを受け取ってB Aを出す
  • 50563120714$ → in>in[+<+>]<out$
    • A Bを受け取ってAとBの和を出す
  • 54$544$554$
    • 同じ計算素子を再利用できる
  • 5663020211700630217006302170411363120717
    • これなんのコードだっけ…?

15 of 15

  • Infinte Turtle 面白いよ! 今割引して500円
  • 有志和訳を作者に投げて反映されてるので遊んでね!