Jolly Jumper in Erlang

문제와 다른 언어 풀이들은 여기


-module(jollyjumper).
-include_lib("eunit/include/eunit.hrl").
-compile(export_all).

is_stair([], _) ->
true;
is_stair([H|T], Prev) when H =:= Prev + 1 ->
is_stair(T, H);
is_stair(_, _) ->
false.

jolly(L) ->
jolly(L, []).
jolly([A,B|L], Acc) ->
jolly([B|L], [abs(A-B)|Acc]);
jolly([_], Acc) ->
is_stair(lists:sort(Acc), 0).

jollyjumper_test_() ->
[?_assertMatch(true, jolly([1,4,2,3])),
?_assertMatch(false, jolly([2,4,7,11,16])),
?_assertMatch(true, jolly([1]))].


문제 그대로 풀면 하스켈보다 이쁘기 힘드니 수열이 엄청 클 때 병렬로 풀기를 해야겠군.

by 이피 | 2008/02/16 15:12 | Erlang | 트랙백(1) | 덧글(1)

트랙백 주소 : http://colus.egloos.com/tb/4159656
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from 일상 혹은 이상 at 2008/02/16 23:36

제목 : 그다지 유쾌하지 않은 Jolly Jumper, 그리..
이피님 블로그에 갔다가 Jolly Jumper in Erlang 버전을 보고 그다지 유쾌하지 않았던 Jolly Jumper의 추억(?)을 떠올려본다. 이 유쾌하지 않은 추억의 서막은 Programming Challenges라는 책을 구입하면서 부터 시작됐다. 이 책의 저자는 무척 친절하게도 이 책에 나온 문제를 푼 소스코드가 맞았는지 틀렸는지 알 수 있도록 판정해주는 사이트를 제공하고 있었는데 (사이트에가면 문제의 내용도 모두 볼 수 있다......more

Commented by 오자 at 2008/02/16 22:18
예전에 한참 Programming Challenges에 나온 문제 풀 때 C/C++ 풀어본 적이 있었는데, 그 때는 n > 0 이라는 조건이 있어서 n = 1인 경우에는 범위가 1 ~ n - 1이라고 볼 수는 없어 애매했던 기억이 나네요. 나중에 몇번 시도 해보니 PC 사이트에서는 n = 1인 경우는 [1] == [1]이라 그런지 jolly jumper로 판단하더군요.
C/C++로 짤 때는 distance 구하고 원래 리스트하고 match되는지 보려면 일일히 비교하는 수 밖에 없었는데.. 역시 erlang의 패턴 매칭이란!!!

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶