(* ::Package:: *) qRandList[list0_]:=list0[[RandomInteger[{1, Length[list0]}]]]; not0[x_]:=If[x==0, 1, x]; nLetters[l_,n_]:=Module[{list,c={"",""}}, list=CharacterRange[l[[1]],l[[2]]]; While[Length[ DeleteDuplicates[c]]< Length[c],c=Table[qRandList[list],{i,1, n}]]; c ]; (* return values are in String to avoid local variable confusions in Module[] *) nIntegers[l_,n_]:=Module[{list,c={"",""}}, list=l; While[Length[ DeleteDuplicates[c]]< Length[c],c=Table[qRandList[list],{i,1, n}]]; ToString/@c ]; noRepeats[a_,list_,n_]:=Module[{m,l},m=0; While[m!=n,m=Length[l=DeleteDuplicates[Join[{a},RandomSample[list,n]]]]]; l]; noRepeats2[list_,n_]:=Module[{m,l},m=0; While[m!=n,m=Length[l=DeleteDuplicates[RandomSample[list,n]]]]; l]; cartProd[a_,b_]:=Flatten[Table[Table[{a[[i]],b[[j]]},{i,1,Length[a]}],{j,1,Length[b]}],1]; (* checks if the list repeats *) qRepeats[list_]:=!Tally[list][[All,2]]===ConstantArray[1,Length[list]]; makeTruthTable[header0_,vars_]:=Module[{data,header}, header=ToString[#,TraditionalForm]&/@header0; data=BooleanTable[header0,vars]/.{True->"T", False->"F"}; Text@Grid[Prepend[data,header],Background->{None,{Lighter[Yellow,.9],{White,Lighter[Blend[{Blue,Green}],.8]}}},Dividers->{{Darker[Gray,.6],{Lighter[Gray,.5]},Darker[Gray,.6]},{Darker[Gray,.6],Darker[Gray,.6],{False},Darker[Gray,.6]}},ItemSize->Automatic] ]; makeTruthTable2[header0_,vars_,ans_,locs_]:=Module[{header,data}, header=ToString[#,TraditionalForm]&/@header0; data=BooleanTable[header0,vars]/.{True->"T", False->"F"}; Table[data[[locs[[i]][[1]]]][[locs[[i]][[2]]]]=ans[[i]], {i,1,Length[ans]}]; Text@Grid[Prepend[data,header],Background->{None,{Lighter[Yellow,.9],{White,Lighter[Blend[{Blue,Green}],.8]}}},Dividers->{{Darker[Gray,.6],{Lighter[Gray,.5]},Darker[Gray,.6]},{Darker[Gray,.6],Darker[Gray,.6],{False},Darker[Gray,.6]}},ItemSize->Automatic] ]; makeTextTable[data0_]:=Module[{data}, (* FIXME data=Table[ToString[#,TraditionalForm]&/@(data0[[i]]),{i,1,Length[data0]}];*) Text@Grid[data0,Background->{None,{Lighter[Yellow,.9],{White,Lighter[Blend[{Blue,Green}],.8]}}},Dividers->{{Darker[Gray,.6],{Lighter[Gray,.5]},Darker[Gray,.6]},{Darker[Gray,.6],Darker[Gray,.6],{False},Darker[Gray,.6]}},ItemSize->Automatic] ]; makeTextTable2[data0_,ans_,locs0_]:=Module[{data=data0,locs=locs0}, (* FIXME data=Table[ToString[#,TraditionalForm]&/@(data0[[i]]),{i,1,Length[data0]}];*) Table[data[[locs[[i]][[1]]]][[locs[[i]][[2]]]]=ans[[i]], {i,1,Length[ans]}]; Text@Grid[data,Background->{None,{Lighter[Yellow,.9],{White,Lighter[Blend[{Blue,Green}],.8]}}},Dividers->{{Darker[Gray,.6],{Lighter[Gray,.5]},Darker[Gray,.6]},{Darker[Gray,.6],Darker[Gray,.6],{False},Darker[Gray,.6]}},ItemSize->Automatic] ]; qShuffle[list_]:=RandomSample[list, Length@list]; bigNumber=100000;