Re: Problem with Which
- To: mathgroup at smc.vnet.net
- Subject: [mg74102] Re: Problem with Which
- From: "Dana DeLouis" <dana.del at gmail.com>
- Date: Sat, 10 Mar 2007 06:50:40 -0500 (EST)
Hi. Just an idea. If you had 1 or 2 more variables, your function would be very long. If your variables represented binary digits, you may be able to shorten the code. I was thinking of some sort of Rank function from Combinatorica, but I don't think there is one for this type of conversion. Here are some ideas... Reverse[Select[Range[63], Count[IntegerDigits[#1, 2], 1] == 2 & ]] {48, 40, 36, 34, 33, 24, 20, 18, 17, 12, 10, 9, 6, 5, 3} Unfortunately, there is no easy formula... http://www.research.att.com/~njas/sequences/A018900 Fx[Ts_, Th_, Tr_, f_, w_, i_] := Module[{t}, t = Boole[Map[NumericQ, {Ts, Th, Tr, f, w, i}]]; If[Count[t, 1] ≠ 2, "Error", Mod[1414254666747063480272674439478, 6*FromDigits[t, 2] + 29]] ] Fx2[Ts_, Th_, Tr_, f_, w_, i_] := Module[{t, p = Permutations[{1, 1, 0, 0, 0, 0}]}, t = Boole[Map[NumericQ, {Ts, Th, Tr, f, w, i}]]; If[Count[t, 1] ≠ 2, "Error", Position[p, t][[1, 1]]] ] Or, not even use Boole.... Fx3[Ts_, Th_, Tr_, f_, w_, i_] := Module[{t, p = Permutations[{True, True, False, False, False, False}]}, t = NumericQ /@ {Ts, Th, Tr, f, w, i}; If[Count[t, True] != 2, "Error", Position[p, t][[1, 1]]]] Fx[a, b, c, d, 1, 2] 15 Fx2[1, 2, a, b, c, d] 1 = = = = = HTH Dana DeLouis XP and Mathematica 5.2 > AH[Ts_,Th_,Tr_,f_,w_,i_]:=( > Which[NumericQ[Ts]&&NumericQ[Th],tipo=1, > NumericQ[Ts]&&NumericQ[Tr],tipo=2, > NumericQ[Ts]&&NumericQ[f],tipo=3, > NumericQ[Ts]&&NumericQ[w],tipo=4, > NumericQ[Ts]&&NumericQ[i],tipo=5, > NumericQ[Th]&&NumericQ[Tr],tipo=6, > NumericQ[Th]&&NumericQ[f],tipo=7, > NumericQ[Th]&&NumericQ[w],tipo=8, > NumericQ[Th]&&NumericQ[i],tipo=9, > NumericQ[Tr]&&NumericQ[f],tipo=10, > NumericQ[Tr]&&NumericQ[w],tipo=11, > NumericQ[Tr]&&NumericQ[i],tipo=12, > NumericQ[f]&&NumericQ[w],tipo=13, > NumericQ[f]&&NumericQ[i],tipo=14, > NumericQ[w]&&NumericQ[i],tipo=15]; > tipo)