Question

J'ai résolu 84 des problèmes d'Euler projet, principalement dans Haskell. Je vais maintenant revenir et d'essayer de résoudre en J certains de ceux que je déjà dans Haskell résolu, comme un exercice d'apprentissage J.

À l'heure actuelle, je suis en train de résoudre problème 56. Permettez-moi de souligner que Je sais déjà ce que la bonne réponse est , puisque je l'ai déjà résolu dans Haskell. Il est un problème très facile, trivial. Je ne donnerai pas la réponse ici.

Voici ma solution dans J:

digits =: ("."0)@":"0
eachDigit =: adverb : 'u@:digits"0' NB. I use this so often I made it an adverb.
cartesian =: adverb : '((#~ #) u ($~ *:@#))'
>./ +/ eachDigit x: ^ cartesian >: i. 99

Cela produit un nombre inférieur au résultat souhaité. En d'autres termes, il est en quelque sorte de mal. Tous les J-ers là-bas savent pourquoi? Je suis déconcerté, car il est assez simple et la force brute totale.

Était-ce utile?

La solution

La raison en est que vous faites une demande de précision étendue (x:) trop tard dans le jeu. Passer à la précision étendue première chose que vous faites (par exemple i. x: 99) et votre devrait être tous ensemble.

Une autre note, au sujet de votre cartesian. Vous pouvez jeter un oeil à intégré J l'adverbe « table » (de /) :

   ^/~ >: i.5
1  1   1   1    1
2  4   8  16   32
3  9  27  81  243
4 16  64 256 1024
5 25 125 625 3125

   , ^/~ >: i.3
1 1 1 2 4 8 3 9 27
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top