1. Euphorize THIS!
- Posted by Irv Mullins <irv at ELLIJAY.COM> Jan 23, 1999
- 430 views
-- Here's code that creates a list of coordinates, -- and then deletes each n-th element of that list -- I would like some feedback on a more Euphorish -- way to accomplish the task. Any takers? -- Thanks, Irv include get.e constant n = 4, -- each n-th element scrn = 1 sequence dyn_list, new_list dyn_list = {} -- create an empty dynamic list new_list = {} function GetCoords() integer x,y x = prompt_number("Coord X:",{1,640}) y = prompt_number("Coord Y:",{1,480}) return({x,y}) end function function delete(sequence list, integer item) return list[1..item-1] & list[item+1..length(list)] end function dyn_list = {GetCoords()} -- get the first set of coords while 1 do dyn_list = append(dyn_list,GetCoords()) -- get the next coords ? dyn_list if match(dyn_list[1], dyn_list[length(dyn_list)]) then -- compare first and last list items exit -- quit when equal end if end while printf(scrn,"You have entered %d items\n",length(dyn_list)) printf(scrn,"Now removing each %dth item\n",n) puts(scrn,"Before: ") ? dyn_list ----------------------------------- -- Here's where I need some help.-- -- Isn't there a more Euphorish -- -- way to do this? Maybe without -- -- duplicating sequences and so -- -- tying up more memory? Tnx -- ----------------------------------- for i = 1 to length(dyn_list) do if remainder(i,n) then new_list = append(new_list,dyn_list[i]) end if end for puts(scrn,"After: ") ? new_list
2. Re: Euphorize THIS!
- Posted by The AfterBeat <afterbeat at GEOCITIES.COM> Jan 23, 1999
- 435 views
Erm, will this suffice? -- Code starts here -- integer i, max i = 0 max = length(dyn_list) for count = n to max by n do dyn_list = dyn_list[1..(count - i) - 1] & dyn_list[(count - i) + 1..length(dyn_list)] i += 1 end for -- Code ends here -- I tested it, and it works.. I hope this is what you want. The AfterBeat Irv Mullins wrote: > -- Here's code that creates a list of coordinates, > -- and then deletes each n-th element of that list > -- I would like some feedback on a more Euphorish > -- way to accomplish the task. Any takers? > -- Thanks, Irv > > include get.e > constant n = 4, -- each n-th element > scrn = 1 > > sequence dyn_list, new_list > dyn_list = {} -- create an empty dynamic list > new_list = {} > > function GetCoords() > integer x,y > x = prompt_number("Coord X:",{1,640}) > y = prompt_number("Coord Y:",{1,480}) > return({x,y}) > end function > > function delete(sequence list, integer item) > return list[1..item-1] & list[item+1..length(list)] > end function > > dyn_list = {GetCoords()} -- get the first set of coords > while 1 do > dyn_list = append(dyn_list,GetCoords()) -- get the next coords > ? dyn_list > if match(dyn_list[1], dyn_list[length(dyn_list)]) then -- compare first > and last list items > exit -- quit when equal > end if > end while > > printf(scrn,"You have entered %d items\n",length(dyn_list)) > printf(scrn,"Now removing each %dth item\n",n) > puts(scrn,"Before: ") ? dyn_list > ----------------------------------- > -- Here's where I need some help.-- > -- Isn't there a more Euphorish -- > -- way to do this? Maybe without -- > -- duplicating sequences and so -- > -- tying up more memory? Tnx -- > ----------------------------------- > for i = 1 to length(dyn_list) do > if remainder(i,n) then > new_list = append(new_list,dyn_list[i]) > end if > end for > puts(scrn,"After: ") ? new_list
3. Re: Euphorize THIS!
- Posted by Irv Mullins <irv at ELLIJAY.COM> Jan 23, 1999
- 422 views
On Sat, 23 Jan 1999 11:40:20 -0800, The AfterBeat <afterbeat at GEOCITIES.COM> wrote: >Erm, will this suffice? > >-- Code starts here -- >integer i, max > >i = 0 max = length(dyn_list) >for count = n to max by n do > dyn_list = dyn_list[1..(count - i) - 1] & dyn_list[(count - i) + > 1..length(dyn_list)] > i += 1 >end for >-- Code ends here -- > >I tested it, and it works.. I hope this is what you want. > > The AfterBeat > Yup. That frees up memory that the second sequence was taking up. I wonder if there is a way to do it with Euphoria's sequence functions - so as to avoid the for/loop? Irv
4. Re: Euphorize THIS!
- Posted by Mike <michael at IGRIN.CO.NZ> Jan 25, 1999
- 421 views
- Last edited Jan 26, 1999
>>Erm, will this suffice? >> >>-- Code starts here -- >>integer i, max >> >>i = 0 max = length(dyn_list) >>for count = n to max by n do >> dyn_list = dyn_list[1..(count - i) - 1] & dyn_list[(count - i) + 1..length(dyn_list)] >> i += 1 >>end for >>-- Code ends here -- >> >>I tested it, and it works.. I hope this is what you want. Excuse me, but isn't this code somewhat inefficient? The line within the for-loop causes the *entire* list to contract at each iteration.Try the following code. I tested it against the above and i figured that its quicker (well at least for a 1-d sequence of integers 4000 elements long) by a factor of about 100.... (I hope it gives the right answer!) function nth(sequence s, integer n) -- remove each nth item from the list integer rem,len,c,d,p len=length(s) rem=remainder(len,n) c=n-1 d=n-2 p=n for i=n+1 to len - rem by n do s[p..p + d]=s[i..i + d] p+=c end for if rem then s[p..p + rem - 1] = s[len - rem + 1..len] end if s=s[1..p + rem - 1] return s end function