石橋を叩いて壊すページ

ゼロから始めるFactorioの回路構築(算術回路編)

前回に引き続きFactorioの回路の話。

Factorioで「回路ネットワーク」の研究を完了させると、ケーブルやチェストのほかに「定数回路」「算術回路」「選別回路」「条件回路」が使用可能になる。
このうち定数回路については既に書いたので、算術回路と選別回路の使い方について書く。 条件回路については次回書く。

2025/3/11更新:
記事をV2.0.39向けに更新しました。(一部画像が古いままですが時間があるときに更新します。)
V1.1以降の差分はこちらの記事にまとめました
🚀のマークがついているのはDLC「SpaceAge」の機能です。

基本編 > 入力・出力編 > テクニック編 > 算術回路編 > 条件回路編 > 実践例編 > 累積回路編

算術回路

算術回路は入力された信号をもとに計算を行い、その結果を出力する。
例えば「鉄板×2」という計算式を設定した算術回路に「鉄板が100」という信号を入力すると 「鉄板が200」という計算結果が信号として出力される。


実際に「鉄板×2」を計算してみた例。
左下の「入力信号」欄がこの算術回路に入力されている信号の一覧、 右下の「出力信号」欄がこの算術回路が出力している信号の一覧なので、
この画像では「鉄板が100」が入力され、それが2倍されて「鉄板が200」という信号が出ているとわかる。
「入力」に設定されているのが計算式、「出力」に設定されているのが計算結果の出力方法なので、 この画像では「鉄板×2」の計算を行い、結果を「鉄板の数」として出力している。

算術回路には向きがあり、「入力側」と「出力側」のピンが分かれている。
キーボードのALTを押すか算術回路にマウスを合わせると、上記画像のように黄色い三角形が表示されるので、その三角の頂点側が出力である。
また上の画像で「R」と「G」はそれぞれレッドケーブル・グリーンケーブルを表し、どちらから入力された信号を計算に使うかを選択できる。
RとGを両方✅すると、両方の信号の合算を計算に使う。

異なる2つの入力を計算することもできる。例えば「鉄板の枚数から銅板の枚数を引いた値」という値を得ることができる。
その場合は、演算子の左に鉄板を、演算子にマイナスを、演算子の右に銅板を設定すればいい。

算術回路で使える演算子は結構多く、四則演算のほかにプログラマならおなじみのビット演算もできる。
一応書いておくが、このページを読んでいるような回路構築入門の方々は、ビット演算は知らなくても何とかなるので今は覚えなくていい。
かくいう自分もビット演算はわかるが使ったことは一度もない。よっぽど大規模な回路を書くときには重宝するだろう。多分。

算術回路で使用可能な演算子
演算子意味計算結果例備考
掛け算7*3=21
割り算7/3=2小数点以下は切り捨て。
足し算7+3=10
引き算7-3=4
割り算の余り7%3=17÷3は2余りなので、この1が得られる。
べき乗7^3=3437の3乗。
<<左ビットシフト7<<3=5632ビット算術シフト。
32以上シフトしようとすると実際には32で割った余りだけシフトされる。
>>右ビットシフト7>>3=0
ANDビットAND7AND3=332ビット符号あり整数。
ORビットOR7OR3=7
XORビットXOR7XOR3=4

%(割り算の余り)は使いどころが難しいと思うが、数字の特定の位を取り出すのに使える。
例えば「123」という数字の一の位は「3」だが、これは123を10で割れば「余り3」として算出できるから、 算術回路に「鉄板%10」などとすれば鉄板の枚数の一の位が得られる。
十の位「2」を得たい時は、123を一度10で割り、その答えを10で割った余りとして得られる。

出力は入力と異なるアイテムを設定できる。鉄板の数を2倍して、それを板の数として出力することができる。
もちろん鉄板の枚数を2倍して鉄板の枚数として出力してもかまわない。
出力側で論じている鉄板や銅板といったアイテムは、あくまで信号を伝えるための代数(数値の入れ物)として使われているに過ぎず、 実際が銅(どう)であるかは問題ではない。

なお、固定値の足し算であれば算術回路より定数回路を使ったほうが簡単である。
既に書いた通り1つの回路に複数の出力があると信号は合計されるので、 足したい値を定数回路から出力させケーブルを繋ぐだけで足し算になる。 マイナスの足し算をすれば引き算にもなる。

特殊なアイテム「それぞれ」

算術回路には特殊なアイテムとして「それぞれ」を設定できる。
これは算術回路に入力された値を「それぞれ」計算するという意味である。
例えば算術回路に「それぞれ*2をそれぞれ出力」を設定し、 「鉄板が100、銅板が50」という信号を入力した場合、値がそれぞれ2倍された「鉄板が200、銅板が100」という信号が出力される。


実際に「それぞれ*2をそれぞれ出力」してみた例。
「入力信号」「出力信号」のところを見ると、「鉄板が100、銅板が50」が入力され、「鉄板が200、銅板が100」が出力されていることがわかる。
つまり入力された鉄板と銅板の値が「それぞれ」2倍にされて「それぞれ」出力されていることになる。

ひとつ注意が必要なのが、ゼロの存在。
それぞれ」は入力された信号を計算するが、 値がゼロの信号は信号が入力されていないのと同じなので無視されてしまう。
例えば「鉄板が0、銅板が1」の信号を「それぞれ+2をそれぞれ出力」 の算術回路に入力した場合、出力は「鉄板が2、銅板が3」ではなく「銅板が3」だけとなる。
「それぞれ」を使わず直接「鉄板+2を鉄板として出力」とした場合は入力がゼロでも無視されず0+2を計算して 「鉄板が2」の信号が出力されるので、「それぞれ」を使う際はこの違いを踏まえて回路を構築する必要がある。

🚀選別回路

選別回路も算術回路と同様に、入力された信号をもとに計算を行い、その結果を出力する。
算術回路と違うのは、計算方法がちょっと複雑なこと。
選別回路には計算モードが予め組み込まれているので、そこから選んだ方法で計算が行われる。


「入力の選択」モードを使って、多い順に並び替えた信号の2番目(インデックス1)を取り出している例。
画像右上の入力と出力を見ると、入力の4つの信号の2番目だけが出力されているのが分かる。

選択可能な計算モードは以下の6つである。

入力の選択
入力信号を「量が多い順→アイテム一覧画面の順」で並び替え、そのうち指定した順位の1つだけを取り出す。
例えば「鉄板が20、銅板が10、鋼鉄が5、木材が1」という信号が入力され「2番目を取り出す」とした場合「銅板が10」が出力される。
量が少ない順で並び替えることもできる。
注意点として、取り出し順位(インデックス)はゼロから数えるので、先頭を取り出すにはインデックスに0を、2番目を取り出すには1を指定する。
入力シグナル数
入力信号の信号数を取り出す。
例えば「銅板が10、鉄板が5、鋼鉄が3」という信号が入力された場合、3が出力される。
値がゼロの信号は数えない。
ランダム入力
入力信号のうちランダムな1つだけを取り出す。一定時間ごとに再抽選される。
スタック数
入力信号それぞれにつき、1スタックの数が出力される。
例えば「銅線が10、鉄板が5、鉄鉱石が3」という信号が入力された場合、「銅線が200、鉄板が100、鉄鉱石が50」が出力される。
スタックできないもの(流体、色信号、レシピ信号など)は出力されない。
ロケット容量
入力信号それぞれにつき、ロケット1発へ収容数が出力される。
例えば「銅線が10、鉄板が5、鉄鉱石が3」という信号が入力された場合、「銅線が4000、鉄板が1000、鉄鉱石が500」が出力される。
ロケットに載せられないもの(流体、ロケットサイロ、色信号など)は出力されない。
品質フィルター
入力信号のうち品質が条件を満たす信号を取り出す。
品質はコモン<アンコモン<レア<エピック<レジェンドの順に高くなるため、 例えば「レア以上の信号」を取り出すよう指定すると入力信号のうちレア・エピック・レジェンドの信号だけが出力される。
品質転換
入力信号のうち指定した信号を指定した品質に上書きして信号を出力する。
例えば「鉄板」を「レア」に変更、と指定した選別回路に「コモンの鉄板が3」という信号が入力された場合、「レアの鉄板が3」が出力される。

なお選別回路はDLC「SpaceAge」を購入した場合のみ使えるが、もし未購入で同様のことがしたい場合は、 一部については次頁で解説する判断回路で同様の計算ができる。
入力された信号のうち1つを取り出す操作は判断回路で「それぞれ≠0をそれぞれ出力」、
入力シグナル数を取り出すには判断回路で「それぞれ+0を木材を1」でできる。
詳しくは次頁。

算術回路を使った信号の抽出

複数の信号から特定の1つだけを抽出したい場合、算術回路が使える。
例えば鉄板の信号だけを抽出するなら算術回路に「鉄板+0を鉄板として出力」と設定すれば、 鉄板の信号だけを元の信号+ゼロ、つまり元の信号のまま出力でき、信号を抽出できる。

2つ以上の信号を抽出したい場合は以下画像のように「それぞれ」を使うのが便利。


レッドケーブルから入力された複数の信号から鉄板と銅板だけを抽出する例。
定数回路から「鉄板が1、銅板が1」の信号が出力されており、それが算術回路にグリーンケーブルで入力されている。
算術回路には「レッドケーブルのそれぞれ*グリーンケーブルのそれぞれをそれぞれ出力」 が設定されている。
この場合算術回路は 「鉄板が100×鉄板が1」「銅板が50×銅板が1」「緑基板が100×緑基盤が0」「赤基板が50×赤基盤が0」「鋼鉄が25×鋼鉄が0」 のように入力信号をそれぞれ計算する。
ゼロを掛ければなんでもゼロになるので、よって定数回路から1が出力された信号だけを抽出することができる。

算術回路を使った信号の一方通行化

既に書いた通り、算術回路には向きがあり「入力側」と「出力側」のピンが分かれている。
これを利用して、算術回路は信号を一方通行で流すのに使える。

たとえば2つの工場AとBがあり、AからBに信号を伝えたいが、 単純にケーブルをつなぐとBの信号がAへ逆流して混乱が生じてしまうような場合、
工場A→[算術回路]→工場B
のように算術回路を噛ましておくと、AからBへは信号が流れるが、BからAへは信号が流れなくなる。
上記した抽出の仕組みを併用すれば、必要な信号だけを選択的に流すこともできる。

算術回路を使った信号の変換

算術回路を使うと、信号を他のアイテムの信号に変換することができる。
例えば「鉄板が50」の信号を「が50」の信号に変換することで、 ケーブル1本で複数の信号をやりとりできる。

たとえば工場Aに鉄板の在庫が1000枚あり、そのことを工場Zに知らせたいとする。
また工場Bにも鉄板の在庫が2000枚あり、そのことも工場Zに知らせたい。
先の記事で触れたとおり、ひとつの回路に複数の出力があるとそれらは足し算されてしまうため、 上記の在庫数をひとつの回路に出力すると工場Zには「鉄板が3000」という信号が届いてしまう。

そんなときは工場Aに算術回路を置き、「鉄板+0をとして出力」と設定する。 そこに鉄板の枚数を入力すれば、工場Aの鉄板在庫数をという信号に変換して送ることが出来る。
同じように工場Bの鉄板の在庫数もに変換しておけば、 それらをひとつの回路に混ぜても「が1000、が2000」 という信号になり、2つの情報をケーブル1本で工場Zに送信可能になる。

次回はもうひとつの回路アイテム、条件回路について書く。

基本編 > 入力・出力編 > テクニック編 > 算術回路編 > 条件回路編 > 実践例編 > 累積回路編

この記事を評価

この記事にコメント

  1. ...

【この記事にコメント】
お名前:
コメント:

Menu