|
EVE/DID=0.talktalk... Man kann auch mit der rechten Seite beginnen: Der Wert der Bruches ist talk/9999. Von allen Möglichkeiten filtert man dann die aus, die aus einem dreistelligen Zähler und Nenner bestehen, wobei die Ziffern EVDITALK alle verschieden sind, was zwar nicht in der Aufgabenstellung steht, aber in solchen Problemen meist angenommen wird. Damit findet man nur die gekürzten Lösungen, wo also EVE und DID keinen gemeinsamen Teiler haben. Die erste Lösung von Rolf Mertig ist nicht gekürzt. Werden nur gekürzte Lösungen zugelassen, ist die Lösung eindeutig. Hilfsfunktion, die führende Nullen hinzufügt, so daß die Ziffernliste mindestens die Länge drei hat: In[1]:= fill3[n_Integer] := With[{z=IntegerDigits[n]}, Join[Table[0,{Max[0,3-Length[z]]}], z]] Bestimme Ziffern von Zähler, Nenner, und der rechten Seite: In[2]:= digs[b:{t_,a_,l_,k_}] := With[{r=(1000t + 100a + 10l + k)/9999}, {fill3[Numerator[r]], fill3[Denominator[r]], b}] Alle Folgen von vier Ziffern: In[3]:= Flatten[Array[{##}&, {10,10,10,10},0], 3] // Short Out[3]//Short= {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, <<9996>>, > {9, 9, 9, 9}} Die dazugehörigen Listen {E,V,E}, {D,I,D},{T,A,L,K}: In[4]:= digs /@ % // Short Out[4]//Short= {{{0, 0, 0}, {0, 0, 1}, {0, 0, 0, 0}}, <<9999>>} Alle "guten", läßt sich elegant mit Pattern Matching lösen: In[5]:= Cases[%, {{e_,v_,e_},{d_,i_,d_},{t_,a_,l_,k_}}/; e!=v!=d!=i!=t!=a!=l!=k] Out[5]= {{{2, 4, 2}, {3, 0, 3}, {7, 9, 8, 6}}} (*also 242/303 = 0.7986... *) In[6]:= $Version Out[6]= Solaris 3.0 (September 27, 1996) Roman Mäder |