manywaypark's Blog
개발, 검색, 함수

'Fun'에 해당되는 글 1건

  1. 2008.08.13 [FUN] Spiral Array

[FUN] Spiral Array

함수형 언어/Erlang 2008. 8. 13. 18:11 by manywaypark
여기에서 호기심을 조금 느꼈는데, 링크된 여기를 보고는 완전 몰입.

문제를 푸는 것자체는 그다지 어렵지 않았으나, 멋있게 풀어보려고, 오늘 출근길 지하철에서 타블렛에 좀 끄적였다.
W by H 행렬이라 보고, top left에서, 시계방향, 반시계방향 Spiral Array를 출력해주는 것을 만들었다.
(물론 요즘은 erlang에 심취해있으므로,  구현언어는 당연히 erlang이다.)

요지는 조건 검사 같은 것을 하는 것이아니라, 수열을 사용한다.
즉, 동일한 상태 이동의 반복 회수가 수열이다. 연속된 transition의 개수를 구하는 함수를 f(x)라 하면,
f(x) = f(x - 2) - 1

x가 2보다 크면 무조건 성립이고, x = 1, 2 일때의 값은 clockwise, counterclockwise에 따라 W 또는 H로 조금 달라지기는 하지만 중요한 요점은 수열을 이용해 계산으로 구한다는것이다. 자세한 건 코드 참조!

성능은 1000 x 1000의 결과 구하는데 3초정도 걸리는 것같다.

실행예:
(emacs@desktop)2> sa:do(5,4).
   1    2    3    4    5
  14   15   16   17    6
  13   20   19   18    7
  12   11   10    9    8
ok
(emacs@desktop)3> sa:do(4,5).
   1    2    3    4
  14   15   16    5
  13   20   17    6
  12   19   18    7
  11   10    9    8
ok
(emacs@desktop)5> element(1, timer:tc(sa,solve, [1000,1000])) / 1000000.
3.126565

code listing:

2008-08-18 : 거의 동일한 방법으로 푼 사람이 이미 있었다. 맨앞에 몇개와 끝부분의 erlang 버전만 확인하고서 획기적인 방법이라고 좋아라하고 있었다니.... Orz. 그래도 high order function을 사용해서 functional에 걸맞는 멋진 프로그램이라고 나 자신에게 조금은 구차한(?) 최면을 거는 중이다.

happy hackin'

1 
분류 전체보기 (306)
잡담 (20)
함수형 언어 (65)
emacs (16)
java (18)
tips & tricks (154)
사랑 (1)
가사 (0)
독서 (4)
mobile (6)
비함수형 언어 (2)

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

04-19 01:43