World: r3wp
[Core] Discuss core issues
older newer | first last |
GrahamC 3-Dec-2010 [584] | huge? Only 250 lines where a line is 2-3 rebol words :) |
Steeve 3-Dec-2010 [585] | It's late here, and if see more than a dozen of lines, I could die |
GrahamC 3-Dec-2010 [586x6] | there is probably a better method than the one I use to generate the permutations |
sorry , combinations | |
we have something like this drug1 [ id1 id2 id3 .. ] drug2 [ id1 id5 id6 .. ] drug3 [ id4 id7 .. ] | |
I have to generate all the possible combinations of each drug id with all the others but not with those in the same set | |
so at present I think I generate all possible combinations and check to see if they're in the same set and if not do the sql query | |
that's my contribution to lazy programming :) | |
Steeve 3-Dec-2010 [592] | Would you kind enough and give us the expecting output from the input. I can't read all your lines currently. drug1 [ id1 id2 id3 .. ] drug2 [ id1 id5 id6 .. ] drug3 [ id4 id7 .. ] --> |
GrahamC 3-Dec-2010 [593x4] | combinations = pairs |
If you use these 855348 211885 541713 849339 108911 | |
as input to this page https://fd.cloud-ehr.net/drugrx.rsp | |
you'll see the output of the original script which produces html and not json | |
Steeve 3-Dec-2010 [597] | Well I was doing reference to this input -> drug1 [ id1 id2 id3 .. ] drug2 [ id1 id5 id6 .. ] drug3 [ id4 id7 .. ] |
GrahamC 3-Dec-2010 [598x4] | ["IBUPROFEN" [1113 2214 3359 3441 200017 200085] "HEPARIN" [706 1397 5027 200078 200081 200082 200085] "ABCIXIMAB" [730 200018] "WARFARIN" [698 200023] "ASPIRIN" [40 724 1707 1733 3411 3688 3689 3704 3709 4339 4876 200018]] |
interaction found on ATC pair 40 200017 Knowledge IDs : 6 7 289 interaction found on ATC pair 40 200023 Knowledge IDs : 3 4 5 164 interaction found on ATC pair 40 200081 Knowledge IDs : 15 1159 interaction found on ATC pair 40 200082 Knowledge IDs : 16 1164 interaction found on ATC pair 724 200017 Knowledge IDs : 6 7 289 .... | |
I suspect optimizing this part of the code is only going to save ms | |
the real cost is the sql queries | |
Steeve 3-Dec-2010 [602] | And what about purchasing a faster computer ? (I'm in a deep shit right know, I don't understand what he's talking about) |
GrahamC 3-Dec-2010 [603] | There's a big difference in price between the various CPU configurations on amazon |
GrahamC 4-Dec-2010 [604] | We have find/only for this a: [ [ 1 2 ] [ 3 4 ] [ 5 6 ]] find/only a [ 3 4 ] but what if we wanted to find [ 4 3 ] where we want [ 3 4 ] to be equal [ 4 3 ] ie. same set? |
Andreas 4-Dec-2010 [605] | Store sorted in a and sort the query before find. |
GrahamC 4-Dec-2010 [606] | seems expensive to sort each element first |
Andreas 4-Dec-2010 [607] | Cheaper than sorting it during each find. |
GrahamC 4-Dec-2010 [608] | intersect I guess |
BrianH 4-Dec-2010 [609] | Sort the elements on insert and keep them sorted. Then sort the value you are comparing to before looking for it. |
Andreas 4-Dec-2010 [610] | Thanks, Brian, for reformulating what I wrote above. |
BrianH 4-Dec-2010 [611] | Ah yes :) |
Andreas 4-Dec-2010 [612x2] | Interesting R3 "bug" btw: >> intersect [[1 2] [3 4] [5 6]] [[4 3]] ** Script error: block! type is not allowed here |
Works fine in R2. | |
BrianH 4-Dec-2010 [614] | There is a ticket for that. |
GrahamC 4-Dec-2010 [615x2] | very odd ... I changed to using blocks instead of sql, and the query increased from 1.7 s to 7 seconds! |
I guess the sql indices are just faster than using a brute force search thru blocks | |
Henrik 5-Dec-2010 [617] | does a REBOL tar dearchiver exist? I can find an archiver in rebol.org, but not one the other way around. |
BrianH 5-Dec-2010 [618] | Graham, you can do your own indices using hash!, but that might be pushing your complexity budget. Try it and see. |
Anton 6-Dec-2010 [619] | Henrik, just run the program backwards. ...... sorry. |
Rebolek 9-Dec-2010 [620] | Is there some function for switching two values in series? Ie. I have [1 2 3 4 5 6] and want to switch second and third element so result is [1 3 2 4 5 6]. |
Anton 9-Dec-2010 [621] | reverse/part |
Rebolek 9-Dec-2010 [622] | I'm afraid this will not help very much if I want to switch second and fifth element. |
Henrik 9-Dec-2010 [623] | MOVE |
Rebolek 9-Dec-2010 [624] | thanks! |
Henrik 9-Dec-2010 [625] | :-) |
BrianH 9-Dec-2010 [626x2] | Also SWAP. |
SWAP is designed for just this situation, and has been backported to R2 as well. Here is the source if you have an old R2 version: swap: func [ "Swaps elements of a series. (Modifies)" series1 [series!] series2 [series!] ][ unless any [empty? series1 empty? series2] [ poke series1 1 also pick series2 1 poke series2 1 pick series1 1 ] series1 ] | |
Rebolek 9-Dec-2010 [628] | SWAP is not mezanine, better! |
BrianH 9-Dec-2010 [629] | In R3, true :) |
Rebolek 9-Dec-2010 [630] | Ah, sorry, I was looking for R3 sollution. |
BrianH 9-Dec-2010 [631x3] | Note that the unless guard above is compatible with the R3 version. If either series is empty or at its tail at that position, it's a noop, silently. |
So watch out. | |
Watch out for this limit in R3 too (which I forgot to backport): >> swap a: "a" b: %b ** Script error: values must be of the same type ** Where: swap ** Near: swap a: "a" b: %b | |
older newer | first last |