두 번째 업데이트 :사용자 정의 정렬 하스켈
드디어 zurgl의 제안을 따라 반복적으로 순회 및 그룹 something을 썼다. 도움을 주려고하는 모든 사람들에게 감사드립니다!
먼저 업데이트 : 정렬 기능을 할 수있는 희망하지만, 따를 것입니다 그룹화 (그룹의 수를 최소화)를 최적화하기 위해 의미되었다에 대해 확신 할 수 없었다 무엇
. 은 "정렬"후에, 제 2 예의
f xs =
foldr (\[email protected](y,x) (([email protected](y',x'):xs):bs) -> if (y == y' && abs (x-x') == 1) ||
(x == x' && abs (y-y') == 1)
then (a:b:xs):bs
else [a]:(b:xs):bs)
[[last xs]] (init xs)
출력 : 그룹핑은 인접한 수평 또는 수직이다 튜플 수집
*Main> f [(0,1),(1,1),(2,1),(2,2),(2,3),(1,3),(0,3),(4,1),(4,2)]
[[(0,1),(1,1),(2,1),(2,2),(2,3),(1,3),(0,3)],[(4,1),(4,2)]]
--end
updates--의 나는 정렬 함수를 고민하는 데 어려움을 겪고 있으며, 누군가가 그것을 구현하는 방법에 대한 생각을 갖고 있거나 커스텀 정렬보다 더 많은 것이 필요할 지 모른다 고 생각하기를 바라고있다. 나는 sortBy와 함께 놀고 자 노력했지만 많은 진전을 보이지는 않는다.
어떻게이에서받을 수 있나요 :
[(0,1),(0,3),(1,1),(1,3),(2,0),(2,1),(2,3),(4,1),(4,2)]
이에 '및 X X' y를 y를 둘 사이에 0 또는 1의
[(0,1),(1,1),(2,0),(2,1),(0,3),(1,3),(2,3),(4,1),(4,2)]
차이 기본이 될 것이다. 말이 돼?
두 번째 예 :
[(0,1),(0,3),(1,1),(1,3),(2,1),(2,2),(2,3),(4,1),(4,2)]
=>
[(0,1),(1,1),(2,1),(2,2),(2,3),(1,3),(0,3),(4,1),(4,2)]
나는 "y y '와 x x'사이의 0 또는 1의 차이가 1 차가되어야 함을 이해하지 못합니다." – yiding
그래, 나도 이해가 안돼. 왜해야하는지 설명 할 수 있습니까? (2,1) 이전 (0,3)일까요? – mattiast
(2,1)은 선행 요소와의 차이가 2보다 작은 경우 y와 x가 모두 (2,0)이기 때문에 @yiding (2,1)은 (0,3) 앞에옵니다. 물어봐 줘서 고마워. –