유쾌한 점퍼 (Jolly Jumper)
August 28th, 2008
이전 연습: 여행 비용를 공평하게 나눠라 다음 연습: 안녕, UI! 작전명: 창을 띄워라
계속 쉬운 문제만 푼다. 짧게 금방 풀 수 있어서 좋다.
문제
http://www.programming-challenges.com/pg.php?page=downloadproblem&probid=110201&format=html
리스트에서 인근한 값들의 차이를 구했을 때 1~N-1의 숫자를 모두 포함할 때 이 리스트를 jolly jumper라 부른다고 한다. 주어진 리스트가 jolly인지 아닌지 판단하는 문제.
풀이
- class Array
def jolly?
differences.sort == (1...length).to_a
end
def differences
self[0..-2].zip(self[1..-1]).map{|x| (x[0] - x[1]).abs }
end
end
- : differences ( seq -- new-seq )
[ but-last ] keep rest v- [ abs ] map ;
: jolly? ( seq -- ? )
differences natural-sort
[ length >array [ 1+ ] map ] keep
= ;
- % from trip.erl
subtract(A, B) -> subtract(A, B, []).
subtract([A|H], [B|T], L) -> subtract(H, T, L ++ [abs(A-B)]);
subtract([], [], L) -> L.
differences(A) ->
List1 = lists:sublist(A, length(A)-1),
List2 = lists:sublist(A, 2, length(A)),
subtract(List1, List2).
is_jolly(L) ->
lists:sort(differences(L)) == lists:seq(1, length(L)-1).
후기
- 약간 허전한데, 맞게 푼건가? -_-;
- 이번에 만든 factor 코드가 살짝 마음에 든다 :)
- erlang은 여행 비용를 공평하게 나눠라에서 만든 함수를 재활용해서 쉽게 해결되었다.




Leave a Reply