c언어로 세포가 점차 퍼저나가는 것을 시뮬레이션하는 프로그램 짜는게 과제이다. 전체 공간의 크기는 50x50개.

세포 주변의 4칸 이상이 다른 세포로 차 있으면 그 세포는 과잉밀집으로 사망.
세포 주변의 1칸 이하만 세포가 있으면 그 세포는 고립으로 사망.
세포 주변의 2~3칸에 이웃하는 세포가 있으면 그 세포는 그대로 살아간다.
세포 주변의 3칸에 이웃하는 세포가 있으면 그 지점에 세포가 자라난다.

ex>
▒▒▒▒▒
▒▦▦▒
▒▦▦▒
▒▒▒▒▒
 
상태에서

▒▒▦▒▒
▒▦▒▦▒
▒▦▒▦▒
▒▒▦▒▒

빨간 애들은 인구밀도가 높아서 사망. 아래 녀석은 주변에 무언가 닿지 않는 한 그대로 무한정 살아간다.[각주:1]

뭐 이런 프로그램을 짜란다. 인터넷 뒤져보니 Conway's Game of Life라는 시뮬레이션인듯. 이런 종류를 가리켜 Cellular Automaton이라고 부르는 듯 하다. 흥미가 생겨서 이것 저것 찾아보았는데, 70년대부터 여러가지 이유로 유명했던 시뮬레이션인 모양이다.

단, 이렇게 세포가 배치된 모양은 세개의 외부파일로부터 불러들여오거나 무작위로 생성하도록 하는 것이 조건.

외부파일 세개를 지정하는게 귀찮아서 어떤 파일이든 주소를 입력만 하면 불러올 수 있도록 만들었다. <space>가 포함된 string을 받아오게 하는게 좀 힘들긴 했지만 어쨌든 성공... 무작위생성은 인터넷에서 난수생성 알고리즘을 참고해가며 만들었다.

마지막 상태를 파일로 출력하는 기능도 추가했는데, 돌리면서 장난치다 보니까 자기가 출력한 파일을 제대로 못 읽는 상황이 발생해서 부랴부랴 디버깅을 했다. 문제는 그랬더니 입력을 조금 이상하게 받더라는 것(...) 이번에는 문제없을거다. 한줄이 50글자가 넘어가지 않는 한...

다 제작한 뒤에 한 나흘정도 잡고 장난치고 놀면서 최대한 메모리를 적게 잡아먹고 계산이 빠르도록개선한 결과물이다. 그리고 잘못 알고 있었던 진화조건(?)때문에 부랴부랴 알고리즘을 바꾼 것도 있고.(그래도 비슷한 알고리즘들 중에서는 계산이 빠른 편일듯)




전 적절한 카피레프트를 지지합니다.

완벽하게 최적화되었다고는 못 하니까 알아서 고쳐 쓰세요 -.-;;
  1. 전에 썼던 글에서 조건을 잘못 달았다 OTL. 어쩐지 예시와는 전혀 다른 방향으로 진화하더라... [본문으로]

'Programme' 카테고리의 다른 글

Reversible Computation  (0) 2013.10.29
[C] Entering strings including <space>  (0) 2010.09.11
[C] Pseudorandom number generator  (0) 2010.06.14
C언어 달팽이(나선)배열  (7) 2010.04.26
Posted by 덱스터

블로그 이미지
A theorist takes on the world
덱스터
Yesterday
Today
Total

달력

 « |  » 2024.3
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

최근에 올라온 글

최근에 달린 댓글

글 보관함