Re: make a set of conditions without the parameters
- To: mathgroup at smc.vnet.net
- Subject: [mg57953] Re: make a set of conditions without the parameters
- From: "Jens-Peer Kuska" <kuska at informatik.uni-leipzig.de>
- Date: Tue, 14 Jun 2005 05:10:18 -0400 (EDT)
- Organization: Uni Leipzig
- References: <d8jlkt$sum$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi,
t2 = {{0, 0, 0, {3}, 0, {4}, 0, 0, 0}, {0, {7},
{3}, 0, 0, 0, {1}, {4}, 0},
{{4},
0, 0, 0, {7}, 0, 0, 0, {6}}, {0, {9}, {5}, {4}, 0,
{6}, 0, 0, 0}, {{8}, 0,
0, 0, {9}, 0, 0, 0, {3}}, {0, {4}, {6}, {8}, 0,
{1}, 0, 0, 0}, {{6}, 0,
0, 0, 0, 0, 0, 0, {5}}, {0, {2}, {7}, 0, 0, 0,
{3}, {8}, 0}, {0, 0,
0, {5}, 0, {7}, 0, 0, 0}};
rulesperline = Table[MapIndexed[ToString["#[["] <>
ToString[#1] <>
ToString["]]!="] <> ToString[#2] &, (Part[#, i] &
/@ Partition[Flatten[t2],
9] ) // Flatten], {i, 1, 9}];
newrules = ( Fold[(#1 /. ToString["#[[0]]!={"] <>
ToString[#2] <>
ToString["}"] -> X) &,
rulesperline, Range[9]] ) /. X :> Sequence[]
(* I have changed the Unequal[] to UnsameQ[]
because otherwise Select[]
will not get the desired True or False *)
newfunc = (((ToExpression[#, InputForm, Hold] & /@
newrules) //. {Hold[h1_],
Hold[h2_], a___} :> {Hold[And[h1,
h2]], a} ) /. {Hold[any_]} :>
Function[any]) /. Unequal ->
UnsameQ
Select[{{1, 2, 2, 3, 4, 5, 5, 7, 8, 9}, {2, 21,
22, 23, 24, 25, 26, 27, 28,
29}}, newfunc[[1]]]
Regards
Jens
"Guy Israeli" <guyi1 at netvision.net.il> schrieb im
Newsbeitrag news:d8jlkt$sum$1 at smc.vnet.net...
> Hi,
>
> I have a big list made out of smaller lists. I
> want to filter out specific
> smaller lists, for instance those who have 1 in
> the first place and 3 in the
> 7th place.
>
> I know what item cannot be in what place for the
> condition described above
> but the only thing i could do is to do those
> rules using string like this:
>
>
> t2 = {{0, 0, 0, {3}, 0, {4}, 0, 0, 0}, {0, {7},
> {3}, 0, 0, 0, {1}, {4}, 0},
> {{4},
> 0, 0, 0, {7}, 0, 0, 0, {6}}, {0, {9}, {5}, {4},
> 0, {6}, 0, 0, 0}, {{8}, 0,
> 0, 0, {9}, 0, 0, 0, {3}}, {0, {4}, {6}, {8}, 0,
> {1}, 0, 0, 0}, {{6}, 0,
> 0, 0, 0, 0, 0, 0, {5}}, {0, {2}, {7}, 0, 0, 0,
> {3}, {8}, 0}, {0, 0,
> 0, {5}, 0, {7}, 0, 0, 0}};
> rulesperline = Table[MapIndexed[ToString["#[["]
> <> ToString[#1] <>
> ToString["]]!="] <> ToString[#2] &, (Part[#, i]
> & /@ Partition[Flatten[t2],
> 9] ) // Flatten], {i, 1, 9}];
>
> newrules = Fold[(#1 /. ToString["#[[0]]!={"] <>
> ToString[#2] <>
> ToString["}"] -> X) &,
> rulesperline, Range[9]]
>
> which will result in
>
> {{X, X, #[[4]]!={3}, X, #[[8]]!={5}, X,
> #[[6]]!={7}, X, X}, {X, #[[7]]!={2},
> X, #[[9]]!={4}, X, #[[4]]!={6}, X, #[[2]]!={8},
> X}, {X, #[[3]]!={2},
> X, #[[5]]!={4}, X, #[[6]]!={6}, X, #[[7]]!={8},
> X}, {#[[3]]!={1}, X,
> X, #[[4]]!={4}, X, #[[8]]!={6}, X, X,
> #[[5]]!={9}}, {X, X, #[[7]]!={3},
> X, #[[9]]!={5}, X, X, X, X}, {#[[4]]!={1}, X, X,
> #[[6]]!={4},
> X, #[[1]]!={6}, X, X, #[[7]]!={9}}, {X,
> #[[1]]!={2}, X, X, X, X,
> X, #[[3]]!={8}, X}, {X, #[[4]]!={2}, X, X, X, X,
> X, #[[8]]!={8}, X}, {X,
> X, #[[6]]!={3}, X, #[[3]]!={5}, X, #[[5]]!={7},
> X, X}}
>
> and then to cancel the underlines
>
> newrulesfull = Select[#, # != "X" &] & /@
> newrules
>
> {{#[[4]]!={3}, #[[8]]!={5}, #[[6]]!={7}},
> {#[[7]]!={2}, #[[9]]!={4}, \
> #[[4]]!={6}, #[[2]]!={8}}, {#[[3]]!={2},
> #[[5]]!={4}, #[[6]]!={6}, \
> #[[7]]!={8}}, {#[[3]]!={1}, #[[4]]!={4},
> #[[8]]!={6}, #[[5]]!={9}}, \
> {#[[7]]!={3}, #[[9]]!={5}}, {#[[4]]!={1},
> #[[6]]!={4}, #[[1]]!={6}, \
> #[[7]]!={9}}, {#[[1]]!={2}, #[[3]]!={8}},
> {#[[4]]!={2}, #[[8]]!={8}}, \
> {#[[6]]!={3}, #[[3]]!={5}, #[[5]]!={7}}}
>
> The X here is just to mark that it is
> unimportnat.
>
> however, each element is a string here. and now
> starts my problem
>
> I would want to do Select[somelist,
> And[newrulesfull [[1]]]&] meaning it
> will give the elements in somelist that match
> the all of the conditions in
> rulesperline[[1]]. But since it is a string it
> doesn't do much, and
> everytime I do ToExpression it gives me a lot of
> errors because it doesn't
> know what #[[4]] or some other number is.
>
> How can I make a list of rules like that so that
> I can use Select on those
> conditions?
>
>
>
> I'm sorry if my explanation was extremely
> confusing, I will try to clearify
> it if parts were messy.
>
> Thank you very very very very very very much
>
>
>
> Guy.
>
>