Pourquoi suis-je pas la bonne réponse pour Euler 56 J?
-
27-09-2019 - |
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.
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