1부터 n까지 숫자의 합

159 views
Skip to first unread message

Hyunku Jeong

unread,
Mar 8, 2012, 8:47:03 AM3/8/12
to jay...@googlegroups.com
지난 번 오프라인 모임을 계기로 J에 대해 관심이 다시 살아나서
Learning J를 7장까지 읽었는데 예전에 공부했던 것도 조금씩 생각이 나네요. :)

1부터 n까지 합을 구하는 프로그램을 몇 가지로 만들어 봤습니다.
글자를 줄이려고 노력하다보니 나름 눈이 뜨이는 경험을 해서 글을 한 번 남겨봅니다.

sum1 =: +/ @: >: @: i.
처음 생각한 가장 간단한 버전. composition 사용. 공백 빼고 10글자
sum2 =: + (+/ @: i.)
>: 을 안 쓸 수는 없을까 싶어 hook을 이용. 9글자
sum3 =: %&2 @: (* +&1)
공식과 bonding을 이용. 11글자로 늘어남
sum4 =: 2 %~ (* +&1)
시험삼아 commuting을 이용. 다시 9글자
sum5 =: 2 %~ (* >:)
increment를 쓰면 글자를 더 줄일 수 있을 것 같았음. 8글자
sum6 =: >: * -:
반으로 나누는 연산자가 있을 것 같아 사전을 찾아봄. fork를 사용. 5글자

일단 여기까지 해봤습니다. 특히 마지막 버전을 쓰고 보니
1부터 n까지 합이 '하나 더한 것과 반으로 나눈 것을 곱한 것'으로 읽히면서
((n + 1) * n) / 2라는 공식의 의미가 더 직관적으로 받아들여지는 느낌이 들었습니다.
그리고 이런 것이 J가 주는 재미 중 하나가 아닐까 하는 생각도 들었습니다.

이런 경험하신 분들 또 안 계신가요?

Yeonseung Kim

unread,
Mar 9, 2012, 3:35:42 AM3/9/12
to jay...@googlegroups.com
저는 inverse(^:_1)을 사용하는 모습을 보면서, 즐거운 경험을 했습니다.

16진수를 10진수로 바꾸는 코드입니다.
dfh=. 16&#. @ ('0123456789ABCDEF'&i.) NB. decimal from hex
dfh 'FEED' 
65261

그런데 hfd(hex from decimal)는 너무나 간단하게 hfd =: dfh inv 라고 풀어버립니다. 생각해보면 맞는 말인데, 이렇게 생각하기가 쉽지가 않았습니다. 하지만 J에서는 흔하게 볼 수 있는 문제해결법입니다. 저는 이걸 볼 때 정말 큰 재미를 느꼈습니다. 이게 저의 Aha! moment였습니다.
(hfd =: dfh inv) 65261

--
Google 그룹스 'jaylang' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 jay...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 jaylang+u...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/jaylang?hl=ko에서 그룹을 방문하세요.


이광운

unread,
Mar 9, 2012, 4:14:04 AM3/9/12
to jay...@googlegroups.com
'좋아요'를 누르고 싶은데...

2012년 3월 9일 오후 5:35, Yeonseung Kim <yeonse...@gmail.com>님의 말:
Reply all
Reply to author
Forward
0 new messages