لماذا لا أحصل على الإجابة الصحيحة لـ Euler 56 في J؟
-
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
لا تنتمي إلى StackOverflow