참가자가 그래도 5명은 되지 않을까 기대했지만 3명밖에 없었다고 한다..

 

참가해준 사람들의 회로 해설 및 코멘트 진행합니다

내 회로도 몇개 들어가있음

 

 

 

작품1

https://factoriobin.com/post/49zvya71


내가 가장 처음에 만든버전



9조합기, 3


https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=33953



윗글의 8. 신호 고르기 3을 상당히 참조하는 방식임

원하는 신호만 음수로 바꿔버려서 필터링하고 원하는 값을 얻는 방식인데 원 소스는 5틱이 걸렸지만 그걸 좀더 손봐서 3틱으로 줄인 구조

 

1번에서는 서로 다른 42개 신호에 대해 1~42 번호를 매겨줌

2번에서는 노란별=점신호를 하고 있는데 만약 점신호가 20인 값이 들어온다면 20의 값을 하고 있는 J신호만 1 출력으로 나갈 수 있다

아 그리고 점신호=점신호이기 때문에 점신호 자기 자신도 1의 출력을 내보냄

3번에서는 각 신호에 대해 -0x80000000을 곱해주고 있음그래서 출력은 J신호 -0x80000000, 점신호 0x80000000이 됨

4번에서는 각 신호에 대해 원하는 출력값을 하나하나 적어놨음

3번과 4번의 출력이 합산되는데 이때 J신호=4-0x80000000, 점신호=0x80000000, 그 외의 신호는 양수값인 상태

이 값이 5번으로 들어감

5번에서는 음수만이 출력으로 나갈 수 있게 해놨음 그래서 출력은 J신호에 대해  4-0x80000000, 점신호에 대해 -0x80000000이 나가게 됨

근데 출력을 노란별로 안하고 점신호로 해놨기 때문에 이 값이 합쳐침 

(4-0x80000000)-0x80000000 = 4 

이렇게 원하는 출력이 나오게 됨

3틱이나 걸리기도 하고 모든 정의역 범위만큼 상수조합기를 써야하기 때문에 영 좋지는 않다



작품2

https://factoriobin.com/post/msTinKbU


17조합기, 1

 

치역의 범위가 1~8 이라는 점을 이용한 회로

제일 위에 상수조합기는 출력이 1이 되어야하는 입력값들이 각기 다른 신호로 설정되어있고

제일 아래 상수조합기는 출력이 8이 되어야 하는 애들을 묶어놓았음

비교조합기는 초록별=점신호를 걸어놔서 점신호가 하나라도 겹치는 애들이 있다면 정보신호가 출력으로 나가게 해놨다

 

왼쪽 상수조합기들에는 전부다 -2.1G의 정보신호가 걸려 있는데 얘네들은 서로 각각 다른 값이다

제일 위는 -0x80000000+1, 그다음은 -0x80000000+2 ... 마지막은 -0x80000000+8

만약 입력 점신호가 20이라면 위에서 4번째 조합기만 아무거나=20 조건을 만족하기 때문에 이 때의 출력은 -0x80000000+4를 내보낼 것이고 오른쪽 상수조합기에서는 또 -0x80000000을 내보내고 있기 때문에 이 값이 서로 상쇄되서 최종 출력 정보신호 4를 얻게 된다.

 

처음에는 왜 굳이 0x80000000차이나는 값을 세팅했지라고했는데 정의역과 치역의 범위가 겹쳐서더라고ㅋㅋ 

그저 범위가 겹치지 않도록 준 offset 값이 0x80000000인거고 작품1에서 0x80000000 사용한 것과는 좀 다른 용도인셈

 

비록 아래의 나올 다른 작품들에 비해 조합기를 좀더 쓰긴했지만 그래도 1틱만에 원하는 답을 얻었고 나도 이런 발상은 또 상상 못했던지라 마음에 드는 답안임

참가상 페레로로쉐 받아가세요

 

 

내가 처음 문제조건을 걸 때는 입력을 무조건 점신호출력을 무조건 점신호로 내라고 적어뒀었는데 이 조건이 그대로 남아 있었으면 이런 회로에서 조금 난감했을 거임

점신호는 이미 조건판별에 써먹었는데 출력도 점신호로 나간다그럼 이 비교문 자체가 의미가 없어져버리기때문 ㅋㅋ

만약 조건을 유지했다면 정보신호로 나간걸 또 점신호로 바꾸는 과정에서 1틱이 추가 됐어야 했을것이고 이는 별로 취지에 맞지 않는 것 같아서 정보신호가 출력으로 나와도 되도록 조건을 변경했었음



 

작품3-1

https://factoriobin.com/post/eYIGKKqy



매우 많은 조합기,1

 

시행착오중에 나온거라지만 그래도 보기에는 재밌네

 


LUT에서 출력이 증가하거나 감소하는 구간마다 조합기를 달아서 누적될 값을 설정하는 식

출력 값이 잘 변하지 않는 회로였다면 꽤나 유리한 방식이였겠지만 테이블이 너무 와리가리했다 ㅋㅋ

 

 

작품3-2

https://factoriobin.com/post/oPMkTS_a


9조합기 1

 

참으로 심플하다

비교 조합기에서는 아무거나=점신호 를 수행하고 출력으로는 정보신호를 1 로 내보내주고 있는데

만약 입력 점신호가 20이라면 20의 값을 가지고 있는 빠른투입기,선별투입기,묶음투입기만이 조건을 만족하고 그래서 각각 1을 출력으로 내보내서 3의 값을 얻게됨

점신호=점신호니까 이것도 1의 출력이 나가서 최종 출력은 4가 나오게 된다

 

좀 아쉬운점이 있다면 1~21의 입력일 때는 값이 5 이하정도였지만 22~42의 입력일 때는 죄다 6이상의 값들이라서 얘네들 떄문에 일정신호기 사용량이 팍 늘었다는 점?

 

2등했으니 싸이버거 받아가세요

 

 

 

작품

 

4번은 또 내가 만든거임

대회 글 올리고 나서 조금 고민하다가 만든 회로

https://factoriobin.com/post/oYRKj-HH


6조합기 1

 

작품3이랑 거의 똑같음

다만 차이점이 있다면 입력이 22 이상이면 상수 5를 더하게 해줬다는 점?

 


 테이블을 이렇게 바꿔버린셈

덕분에 상수조합기를 꽤나 줄일 수 있었다

 

대회글 올리자마자 3시간만에 작품나온거 봤을때는 조금 식겁했음 ㅋㅋ

 

 

작품5-1

https://factoriobin.com/post/3gH1YDo5


6조합기 3

유일하게 이진연산을 활용한 회로

 

0신호 17 = 1<<4+1 = 0b000001_0001

1신호 33 = 2<<4+1 = 0b000010_0001

...

J신호 324 = 20<<4+4 = 0b010100_0100

...

하늘색신호 678 = 42<<4+372+6 = 0b101010_0110

 

정의역과 치역을 하나의 숫자로 묶어버린 모습

 

2번에서는 점신호를 <<4를 해주고 있다

이 값과 1번 상수조합기들에서 나오는 값이 3번 회로로 가서 xor 되어버리는데

만약 처음 입력신호가 20=0b010100 이였다면 <<4를 하면서 320=0b010100_0000 이 된다

이 값을 상수 조합기와 xor 한다면

 

0신호 : 0b000001_0001 ^ 0b010100_0000 = 0b010101_0001 >=16

1신호 : 0b000010_0001 ^ 0b010100_0000 = 0b010110_0001 >=16

...

J신호 : 0b010100_0100 ^ 0b010100_0000 = 0b000000_0100 <16

...

하늘색신호 : 0b101010_0110 ^ 0b010100_0000 = 0b111110_0000 >=16

 

J신호만이 상위 비트가 xor 과정에서 상쇄되어서 전부 0이 되고 그래서 혼자 16보다 작은 숫자가 나오게 된다!

4번에선 이걸 필터링해서 출력으로 내보내면 끝

3번회로에서 점신호^점신호도 하긴할텐데 어짜피 자기 자신과의 xor 결과는 0이기 때문에 출력에는 영향을 끼치지 않는다

 

3틱이 사용되긴 했지만 그래도 재미있는 회로

 

 

작품 5-2

https://factoriobin.com/post/j5tEryoV


5조합기 1 !

 

작품3-1처럼 출력의 값이 변화하는 구간을 확인하는 방식이다

 

일단 입력이 1일 때는 1번회로에서는 아무것도 조건을 만족하지 못하기 때문에 출력이 아무것도 안나온다

아 점신호<=점신호는 만족하기 때문에 출력이 1이 나오긴 하게 된다

 

3번회로에서는 12개 신호에 대해서 모두 조건을 만족하기 때문에 점신호 12개 나오고 점신호>=점신호 또한 만족함으로 13의 출력이 나온다

1,3번의 출력을 합치면 14가 되는데 입력이 1일 때는 출력값이 1이여야하기 때문에 5번에서 -13을 더해주어 보정한다

 

입력이 차차증가하면서 8이 될때까진 출력이 변화하지 않다가 9가되면 1번 회로에서 조건을 만족하는 신호가 하나 생긴다(0 신호)

그래서 출력이 1 증가해서 2가 된다

 

입력이 10이 되면 1번회로에서 조건을 만족하는 신호가 2개 더 생긴다(1,2 신호그렇기에 출력은 2증가해서 4가 된다

입력이 13이 되면 이번엔 2번 회로에서 조건을 만족하는 신호가 2개 줄어드게 된다(1,2 신호그렇기에 출력은 2 감소해서 2가 된다

 

작품3-1에서는 값이 증가하거나 감소하는 구간이 생길 때마다 "조합기"가 하나씩 추가 되었지만 

작품5-2에서는 그런 구간이 생길 때마다 상수조합기 내부에서 "신호"가 추가 되는셈

그렇기에 조합기의 개수를 극단적으로 줄일 수 있었던 것

 

아웃풋이 단순 증가함수였으면 나도 비슷한걸 시도해봤을 것은데 오르락 내리락하는걸 보고 난 적용해볼 생각조차 하지 못했었다

막상 알고나면 간단한건데 왜 이 발상을 못 떠올렸을까진짜 콜럼버스의 달걀이네 

 

아무튼 제가 만들었던 6조합기보다 1개 더 줄였기 때문에 상품은 싸이플렉스버거세트 또는 배라쿼터입니다

뭐 받을지 말해주삼

 

 


-- 이 회로는 한글 디스플레이 회로에 성공적으로 이식되었음 --



1등을 제외한 나머지는 방명록 비밀글로 상품전달했으니 확인ㄱㄱ

 

 

그리고 대회 기간은 지났기는 했다만 만약 더 해보고 싶은 사람 있다면 추가로 제출도 받으려고 함

다음주 일요일까지는 참가하기만 하면 참가상은 계속 주려고 하니 지각자들의 열렬한 참가바람

당연하지만 이전에 제출과는 뭔가 다른 무언가가 있어야 인정됨틱 수는 느려도 전혀 상관 없어

그리고 벨트/투입기 쓴 버전도 보고 싶다고 ㅋㅋ