[목요퀴즈 11] key-value pair

12 views
Skip to first unread message

June Kim (김창준)

unread,
Sep 2, 2011, 5:26:43 AM9/2/11
to jay...@googlegroups.com
추석도 있고 해서 좀 간단한 문제로 냅니다. 여러 방법을 찾아보시면 재미있는 연습문제가 될 것 같습니다.

목요퀴즈 10의 부분 변형 문제로 볼 수 있습니다.

   key=.;:'a b c d e f g'
   val=.   10 20 30 40 50 60 70
   ik=.;:'b c f'
   iv=.5 4 9

일 때, val 중 iv의 비율을 구합니다. 결과는 다음과 같아야 합니다.

0 0.25 0.133333 0 0 0.15 0

Yeonseung Kim

unread,
Sep 3, 2011, 8:54:34 AM9/3/11
to jay...@googlegroups.com
NB. 간단하다고 하시는데 저에게는 그게 그렇게 간단하지 않아요 ㅠㅠ

NB. 첫번째 시도
NB. 어떻게 해볼까 한참을 생각하다 한번도 안 써본 }을 써야겠다는 생각을 했습니다
NB. 0 20 30 0 0 60 0 과 0 5 4 0 0 9 0 을 만들어서 한꺼번에 처리할 겁니다
NB. 우선 0으로 된 열을 만듭니다.

temp =: 0 $~ #key

NB.  0 20 30 0 0 60 0과 0 5 4 0 0 9 0을 만들어 봅시다

a =: (val #~ key e. ik) (key i. ik)} temp
b =: iv (key i. ik)} temp
b % a

NB. 그런데 0 % 0을 다루고 있어서 바람직하지 않아요

NB. 두번째 시도
NB. }의 사용을 염두해두고 다시 해보겠습니다.
NB. 이번에는 계산을 먼저하고 필요한 위치에 끼워 넣은 방법을 택하겠습니다

(iv % val #~ key e. ik) (key i. ik)} 0 $~ # key NB. 이야!!, one-liner다!! 신난다!!

NB. }를 안 쓰는 방법은 없을까요? 고민해 보겠습니다

2011/9/2 June Kim (김창준) <june...@gmail.com>

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

Yeonseung Kim

unread,
Sep 3, 2011, 9:01:13 AM9/3/11
to jay...@googlegroups.com
NB. 보내고 다시 보니 약간 더 정리할 수 있네요. temp를 사용해서 반복되는 부분을 정리했습니다

(iv % temp { val) (temp =. key i. ik)} 0 $~ # key

2011/9/3 Yeonseung Kim <yun...@gmail.com>

June Kim (김창준)

unread,
Sep 8, 2011, 11:10:08 PM9/8/11
to jay...@googlegroups.com
2011/9/2 June Kim (김창준) <june...@gmail.com>
추석도 있고 해서 좀 간단한 문제로 냅니다. 여러 방법을 찾아보시면 재미있는 연습문제가 될 것 같습니다.

한가지 비교적 간단한 방법입니다.

   val%~ iv #inv~ key e. ik

Jooyung Han

unread,
Sep 16, 2011, 4:45:45 AM9/16/11
to jay...@googlegroups.com
괄호와 stdlib 을 적용하면 김창준 님의 풀이가 아래처럼 되는군요!
이해하는데 한참 걸렸습니다. ㅠ.ㅠ

((key e. ik) expand iv) % val

e. 와 expand( #inv 혹은 #^:_1)

그런데, e.(Member)는 ik 가 이미 정렬되어 있는 경우(key 순서대로 나열)에만 사용가능할 것 같습니다.


2011년 9월 9일 오후 12:10, June Kim (김창준) <june...@gmail.com>님의 말:
--
Google 그룹스 'jaylang' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 jay...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 jaylang+u...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/jaylang?hl=ko에서 그룹을 방문하세요.



--
Jooyung Han
Reply all
Reply to author
Forward
0 new messages