Re: List processing
- To: mathgroup at smc.vnet.net
- Subject: [mg37228] Re: List processing
- From: Selwyn Hollis <selwynh at earthlink.net>
- Date: Thu, 17 Oct 2002 00:09:14 -0400 (EDT)
- References: <200210161825.OAA10586@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
I'm not 100% sure of this, but how about sortout[intervals_] := ({First[#1], Last[#1]} & ) /@ Sort /@ Flatten /@ Split[Sort[intervals], #1[[2]] >= #2[[1]] & ] ? Example: intrvls = Table[x = Random[Integer, {0, 30}]; {x, x + 2}, {10}] {{18, 20}, {2, 4}, {14, 16}, {1, 3}, {0, 2}, {16, 18}, {7, 9}, {19, 21}, {6, 8}, {6, 8}} sortout[intrvls] {{0, 4}, {6, 9}, {14, 21}} --- Selwyn Hollis John Leary wrote: > Greetings > > This problem can be solved by conventional programming, but I wonder if > there is an elegant Mathematica solution ? > > A list contains pairs of values, with each pair representing the lower and > upper edge of a sub-range. Some of the sub-ranges partially overlap, some > fully overlap, others don't overlap at all. The problem is to produce a > second list that contains the overall upper and lower edges of the > overlapping sub-ranges. > > A simple example : {{100,200},{150,250},{120,270},{300,400}} would result > in {{100,270},{300,400}}. > > In the real case, the input list has several hundred elements and the > output list typically has five elements. > > I have a working solution based on loops, but there must be a more elegant > one. I would be very grateful for any suggestions. > > > Best regards > > John Leary > > >
- References:
- List processing
- From: John Leary <leary@paradise.net.nz>
- List processing