팩린이인 나는 기차의 회전률을 높일 수 없을까 고민하다가 불균형한 투입이 문제임을 발견했다.



가장자리가 먼저 바닥나서 가운데 네 줄만 작동하고 있었다.


하지만 분배기를 이리저리 돌려봐도 도저히 균등하게 6분할 할 수 있는 방법이 없었다. 

기차가 8칸이면 딱 좋았을 텐데... 가슴이 아팠지만 별 수 없었다.


그러던 중


 

밸런서라는 개념을 발견했고, 1 대 6 밸런서가 가능함에 감탄을 금치 못했다


여기에 흥미를 느낀 나는 밸런서의 원리와, 더 나아가 모든 n 대 m 밸런서가 가능한 지가 궁금해졌고,

몇날며칠을 고민하다가 오늘 런닝머신 위에서 간단한 해법을 찾았다.

혹시 나처럼 궁금했을 사람들을 위해 이를 공유하고자 한다.


밸런서는 크게 세 카테고리로 분류할 수 있다.


1. 입력과 출력의 갯수가 같은 경우 (6 대 6)

2. 입력이 출력보다 적은 경우 (1 대 6)

3. 입력이 출력보다 많은 경우 (7 대 6)


먼저 1번의 경우 

가장 간단한 형태는 2:2 이고, 분배기 자체가 이 기능을 한다.


다음으로 3 : 3은 잠깐 건너뛰고 4:4 부터 보자.

2:2 밸런서, 즉 분배기 두 개를 나란히 놓고 출력들을 각각 분배기로 합쳐주면 완성이다.




같은 방식으로 4:4를 맞붙여준다면? 8:8 밸런서가 만들어진다. 이는 무한히 반복할 수 있다.



이로써 2:2, 4:4, 8:8, 16:16 … 2^n:2^n 형태의 밸런서를 모두 만들었다.






이제 8:8 밸런서를 가져와 가장 끝쪽 입력 벨트 위에서 F를 누르고 서 있어 보자



그렇다, 7:8 밸런서를 만든 것이다.



여기서 입력라인을 원하는 만큼 지운다면?



그렇다, 8:8 밸런서를 만들면 1:8, 2:8 … 7:8, 8:8 밸런서를 모두 만들 수 있게 된다.



이번엔 7:8 밸런서에서 출력 라인 하나를 빈 입력 라인에 루프 형태로 연결해보자.



그렇다, 7:7 밸런서가 만들어졌다.



같은 방식으로 출력라인을 원하는 만큼 입력에 연결하면?



1:1, 2:2, 3:3 … x:x 형태의 밸런서를 모두 만들 수 있게 되었다.



이로서 1, 2번의 경우는 모두 가능하다는 사실을 확인했다.



이제 3번, 출력의 갯수가 입력보다 적은 경우이다. 이 경우는 매우 쉽다.

왜냐하면 우리는 사실 이러한 밸런서를 거의 만들 줄 알기 때문이다.

가장 간단한 형태인 x:1 밸런서를 머릿속에 떠올려보자.


그렇다, 바로 메인버스이다.





이번엔 x:5 밸런서를 만들어보자


끝에서부터 분배기 4개를 제거해주고,




5:5 밸런서를 이어주면 완성이다!




x:2, x:3, x:4, x:6 .. 모두 같은 방법으로 만들 수 있다.


이로써 모든 n:m 밸런서가 가능하다는 사실을 확인했다.



하지만 이 방식은 실용적이지는 않다. 

왜냐하면 분배기가 쓸데없이 많이 들어가서 부피가 크기 때문이다.

가장 작은 크기의 밸런서, 즉 분배기를 최소로 사용한 밸런서를 만들기 위해서는 아예 다른 방식으로 접근해야 한다.

모든 n:m 밸런서에서 최소 크기도 일반화하고 싶었지만.. 이건 너무 빡셌다.


참고로 레딧에 1:8 부터 8:8까지 다이어그램으로 정리한 자료가 있었는데 몇몇개 빼고는 최소 크기임

https://www.reddit.com/r/factorio/comments/jqfhlu/balancers_illustrated_1_through_8_balancers/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button