لماذا لا أحصل على الإجابة الصحيحة لـ Euler 56 في J؟

StackOverflow https://stackoverflow.com/questions/3043361

  •  27-09-2019
  •  | 
  •  

سؤال

لقد قمت بحل 84 من مشكلات مشروع Euler ، معظمها في Haskell. سأعود الآن وأحاول حلها في بعض هؤلاء سابقا تم حلها في هاسكل ، كتمرين في تعلم J.

حاليا ، أحاول حلها مشكلة 56. اسمحوا لي أن أؤكد ذلك أنا أعرف بالفعل ما هي الإجابة الصحيحة, ، منذ أن قمت بحلها بالفعل في هاسكل. إنها مشكلة سهلة للغاية وتافهة. لن أعطي الجواب هنا.

هذا هو الحل في 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

هذا ينتج رقم أقل من النتيجة المرجوة. وبعبارة أخرى ، من الخطأ بطريقة ما. أي j-ers هناك يعرف لماذا؟ أنا محير ، لأنها قوة واضحة ومباشرة تمامًا.

هل كانت مفيدة؟

المحلول

والسبب هو أنك تطبق الدقة الموسعة (x:) بعد فوات الأوان في اللعبة. التبديل إلى الدقة الممتدة أول شيء تفعله (على سبيل المثال i. x: 99) وينبغي أن تكون كلها.

ملاحظة أخرى ، بخصوص الخاص بك cartesian. قد ترغب في إلقاء نظرة على J المدمجة "الجدول" adverb (/):

   ^/~ >: 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top