ফেরামাতের বহুভুজ সংখ্যা উপপাদ্য


24

ফেরামাতের বহুভুজ সংখ্যা উপপাদ্যটিতে বলা হয়েছে যে প্রতিটি ধনাত্মক পূর্ণসংখ্যাকে সর্বাধিক আঞ্চলিক সংখ্যার যোগ হিসাবে প্রকাশ করা যায় । এর অর্থ হ'ল প্রতিটি ধনাত্মক পূর্ণসংখ্যাটি তিনটি ত্রিভুজ সংখ্যা, চার বর্গ সংখ্যা, পাঁচটি পঞ্চভূমিক সংখ্যা ইত্যাদির সমষ্টি হিসাবে প্রকাশ করা যেতে পারে is আপনার কাজটি একটি ধনাত্মক পূর্ণসংখ্যার এবং একটি পূর্ণসংখ্যার এবং আউটপুট আউট করা -gonal পূর্ণসংখ্যার যা সমষ্টি ।n nxs3sx

-th -gonal পূর্ণসংখ্যা, যেখানে এবং , উপায় কয়েক সংজ্ঞায়িত করা যেতে পারে। অ গণিত- y উপায় যে ম -gonal নম্বর দিয়ে একটি নিয়মিত আকারের বহুভুজ যেমন নির্মাণ করা যেতে পারে দৈর্ঘ্য প্রতিটি পক্ষই । উদাহরণস্বরূপ, (ত্রিভুজাকার সংখ্যা) এর জন্য:nsn1s3nssns=3

ত্রিভুজ

একটি বৃহত্তর সঙ্গে উদাহরণের জন্য এখানে দেখুন ।s

গণিত- y সংজ্ঞাটি জন্য সূত্র ব্যবহার করে , যা তম জোনাল নম্বর দেয়:P(n,s)nগুলি

পি(এন,গুলি)=এন2(গুলি-2)-এন(গুলি-4)2

যা এখানে উইকিপিডিয়া পৃষ্ঠায় দেওয়া আছে

ইনপুট

দুই ধনাত্মক পূর্ণসংখ্যা, এবং , শর্ত । আপনি এই সংখ্যাগুলিকে আপনার ভাষার সর্বাধিক প্রাকৃতিক উপস্থাপনায় ইনপুট করতে পারেন (দশমিক, অবিচ্ছিন্ন, চার্চ সংখ্যা, পূর্ণসংখ্যা-মূল্যবান ভাসমান পয়েন্ট সংখ্যা ইত্যাদি)।গুলিএক্সগুলি3

আউটপুট

পূর্ণসংখ্যার, একটি তালিকা , সর্বাধিক দৈর্ঘ্য সঙ্গে , যেখানে এর সমষ্টি সমান এবং সমস্ত পূর্ণসংখ্যার হয় -gonal পূর্ণসংখ্যার। আবার, কোনও পৃথক, সামঞ্জস্যপূর্ণ বিভাজক (সুতরাং দশমিক আউটপুট জন্য দশমিক নয় অক্ষর, একরূপ আউটপুট জন্য ব্যবহৃত একটি অক্ষর ইত্যাদি) এর সাথে আপনার ভাষার প্রাকৃতিক উপস্থাপনায় পূর্ণসংখ্যাগুলি আউটপুট করা যেতে পারে)এলগুলিএলএক্সএলগুলি

বিধি

  • ইনপুট বা আউটপুটগুলি কখনই আপনার ভাষার পূর্ণসংখ্যা সীমা অতিক্রম করবে না
  • এল অর্ডার করতে হবে না
  • একাধিক সম্ভাব্য আউটপুটগুলির ক্ষেত্রে, যে কোনও বা সমস্ত গ্রহণযোগ্য
  • এটি তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী

পরীক্ষার মামলা

   x,  s => L
   1,  s => 1
   2,  s => 1, 1
   5,  6 => 1, 1, 1, 1, 1
  17,  3 => 1, 6, 10
  17,  4 => 1, 16
  17,  5 => 5, 12
  36,  3 => 36
  43,  6 => 15, 28
 879, 17 => 17, 48, 155, 231, 428
4856, 23 => 130, 448, 955, 1398, 1925


আউটপুটটিতে কিছু শূন্য প্যাডিং থাকতে পারে? উদাহরণস্বরূপ যদি আমরা বিবেচনা x=17, s=5করি আমরা ন্যায়বিচারের 5,12,0,0,0পরিবর্তে আউটপুট করতে পারি 5,12?
flawr

@flawr তাই দীর্ঘ অ্যারের অতিক্রম না দৈর্ঘ্যের হিসাবে এমনকি প্যাডিং সহ, যে জরিমানাs
caird coinheringaahing

পুনরাবৃত্তিগুলি কি অনুমোদিত বা আমার জমাতে একটি যুক্ত করা উচিত Q?
জোনাথন অ্যালান

উত্তর:



6

জাভাস্ক্রিপ্ট (ES6),  83  80 বাইট

একটি দ্রুত পুনরাবৃত্ত অনুসন্ধান যা আউটপুটটির ক্ষুদ্রতম শব্দটিকে সর্বাধিক করে তোলে।

হিসাবে ইনপুট লাগে (s)(x)

s=>g=(x,n=0,a=[],y=~n*(~-n-n*s/2))=>x<y?x|a[s]?0:a:g(x,n+1,a)||g(x-y,n,[...a,y])

এটি অনলাইন চেষ্টা করুন!

সূত্র

এটি জেএসে গুলি আঞ্চলিক সংখ্যাগুলি গণনা করার জন্য 0-ভিত্তিক সূত্রটি ব্যবহার করে সংক্ষিপ্ত হতে দেখা যায় , অর্থাত্ এন=0 দিয়ে শুরু করতে এবং পি(এন+ +1,গুলি) গণনা করতে :

পি(এন+ +1,গুলি)=((এন+ +1)2(গুলি-2)-(এন+ +1)(গুলি-4))/2=(এন2(গুলি-2)+ +এনগুলি+ +2)/2=-(এন+ +1)((এন-1)-এনগুলি/2)

যা 14 বাইটে লেখা যেতে পারে:

~n*(~-n-n*s/2)

মন্তব্য

s =>                         // main function taking s
  g = (                      // recursive function g
    x,                       // taking x
    n = 0,                   // start with n = 0
    a = [],                  // a[] = list of s-gonal numbers
    y =                      // y = P(n + 1, s)
      ~n * (~-n - n * s / 2) //   = -(n + 1) * ((n - 1) - n * s / 2)
  ) =>                       //
    x < y ?                  // if x is less than P(n + 1, s):
      x | a[s] ?             //   if x is not equal to 0 or a[] is too long:
        0                    //     failed: return 0
      :                      //   else:
        a                    //     success: return a[]
    :                        // else:
                             //   process recursive calls:
      g(x, n + 1, a) ||      //   preferred: try to increment n
      g(x - y, n, [...a, y]) //   fallback : try to use the current s-gonal number

@ আজটেককো আমি পরে এটি ঠিক করার চেষ্টা করতে পারি। আপাতত সরানো হয়েছে।
Arnauld

ধন্যবাদ। অপেক্ষা করছি!
আজটেকো



3

জেলি , 17 বাইট

x’2;’ÄÄx⁸ŒPS⁼¥Ƈ⁹Ḣ

একটি (খুব অদক্ষ) ডায়াডিক লিংকটি sবাম এবং xডানদিকে স্বীকার করছে যা পূর্ণসংখ্যার (ক্রমবর্ধমান আরোহণের) তালিকা হিসাবে সংক্ষিপ্ততম উত্তর দেয়।

এটি অনলাইন চেষ্টা করুন! - অনেক বেশি মূল্যবোধের জন্য এটি চেষ্টা করে না!

কিভাবে?

x’2;’ÄÄx⁸ŒPS⁼¥Ƈ⁹Ḣ - Link: s, x                    e.g.  5, 17
x                 - repeat (s) (x) times                [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
 ’                - decrement (vectorises)              [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
  2;              - prepend a two                       [2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
    ’             - decrement (vectorises)              [1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
     Ä            - cumulative sums                     [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52]
      Ä           - cumulative sums                     [1, 5, 12, 22, 35, 51, 70, 92, 117, 145, 176, 210, 247, 287, 330, 376, 425, 477]
       x⁸         - repeat (each of those) (s) times    [1, 1, 1, 5, ..., 425, 477, 477, 477]
         ŒP       - power-set                           [[], [1], [1], ..., [1, 1], ..., [5, 22, 70], ... etc]
                      (this has 2^(x(s+1)) entries ...this example would have 2^(17(5+1)) = 2^102 = 5070602400912917605986812821504 entries!)
                      (Note: the lengths increase left to right)
              Ƈ   - filter keep if:
             ¥    -   last two links as a dyad:
           S      -     sum
            ⁼  ⁹  -     equals (x)?                     [[5,12], ... , [5,12], [1, 1, 5, 5, 5], ... , [1, 1, 5, 5, 5], [1, 1, 1, 1, 1, 12], ...]
                Ḣ - head                                [5,12]

@ আজটেকো এটি পুরোপুরি ঠিক আছে, এটি টিআইওর সাথে seconds০ সেকেন্ডে শেষ হবে (আমি নিশ্চিত যে এর চেয়ে বেশি ছোট ইনপুট সংখ্যাও শেষ হবে)। আমি আমার উত্তরে যেমন উল্লেখ করেছি, এটি "খুব অদক্ষ" এবং এটি "অনেক উচ্চ মানের জন্য এটি চেষ্টা করার মতো খুব একটা পয়েন্ট নয়!"! মনে রাখবেন, কোড-গল্ফ সমাধানের জন্য প্রদত্ত কোডটির কেবল অসীম সংস্থান দেওয়া কাজ দরকার।
জোনাথন অ্যালান

ঠিক আছে আমি s = 3 এবং n = 5 দিয়ে পরীক্ষা করেছি এবং এটি 12 সেকেন্ড সময় নিয়েছে !! আমি এই অদক্ষ সমাধানটি পছন্দ করি এবং আমি আপনাকে বিশ্বাস করব, এটি পরীক্ষা করা প্রায় অসম্ভব হলেও :) আপনাকে ধন্যবাদ!
আজটেকো

1
এক্সগুলি

3

রুবি , 79 বাইট

এন গুলিগুলি

এন2(গুলি-2)-এন(গুলি-4)2এন(এনগুলি-2এন-গুলি+ +4)2

->n,s{a=(0..n).map{|i|i*(i*s-2*i-s+4)/2};a.product(*[a]*~-s).find{|a|a.sum==n}}

এটি অনলাইন চেষ্টা করুন!



2

রেটিনা , 111 বাইট

\d+
*
~(`$
$"
0%["^_+ "|""]'$L$`\G_(?<=(?=___(_*))_+)
((_(?($.(2*$>`))$1\$.(2*$>`)))$*)
1%|' L$`\G_
$$.$.($`$>`

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ক্রমে ইনপুট নেয় s n। ব্যাখ্যা:

\d+
*

অ্যানারিতে রূপান্তর করুন।

~(`

অবশিষ্ট পর্যায়ে প্রক্রিয়া করার পরে, তাদের রেটিনা প্রোগ্রাম হিসাবে গণ্য করুন এবং একই ইনপুটটিতে তাদের চালিত করুন।

$
$"

লাইনটি সদৃশ করুন।

0%["^_+ "|""]'$L$`\G_(?<=(?=___(_*))_+)
((_(?($.(2*$>`))$1\$.(2*$>`)))$*)

নিয়মিত প্রকাশের সাথে প্রথম অনুলিপিটি প্রতিস্থাপন করুন যা প্রথম সংখ্যাটি ছাড়িয়ে যায় এবং তারপরে s sএকক সংখ্যাগুলির সাথে মেলে । সংখ্যাগুলি নিজেরাই বিজোড় ক্যাপচার গ্রুপগুলিতে ক্যাপচার করা হয় এবং এমনকি সংখ্যার সমস্ত নম্বর sএকক হয় তা নিশ্চিত করতে এমনকি ক্যাপচার গ্রুপগুলি ব্যবহৃত হয় ।

1%|' L$`\G_
$$.$.($`$>`

বিজোড় ক্যাপচার গ্রুপগুলির স্পেস-বিভাজিত তালিকার সাথে দ্বিতীয় অনুলিপিটি প্রতিস্থাপন করুন।

উদাহরণ হিসাবে, এর ইনপুটগুলির জন্য উত্পন্ন কোডটি 5 17নিম্নরূপ:

^_+ ((_(?(2)__\2))*)((_(?(4)__\4))*)((_(?(6)__\6))*)((_(?(8)__\8))*)((_(?(10)__\10))*)$
$.1 $.3 $.5 $.7 $.9

1

এপিএল (এনএআরএস), 149 চর, 298 বাইট

r←f w;n;s;i;k
(n s)←w⋄r←⍬⋄→0×⍳s<3⋄i←1
→0×⍳n<k←2÷⍨(i×i×s-2)-i×s-4⋄r←r,k⋄i+←1⋄→2

h←{0=≢b←((v←↑⍵)=+/¨a)/a←{0=≢⍵:⊂⍬⋄m,(⊂1⌷⍵),¨m←∇1↓⍵}f⍵:v⍴1⋄k←↑⍋≢¨b⋄k⊃b}

(এনএস) ইনপুট, n বার 1 এর জন্য ফিরে চেয়ে "0 = ≢b" সমাধান না পাওয়া গেলে; অন্যথায় এটি কম সংখ্যক যুক্ত সংখ্যার যোগফল ফিরিয়ে দেয় ...

পরীক্ষা:

  h 1 3
1 
  h 2 8
1 1 
  h 5 6
1 1 1 1 1 
  h 17 3
1 6 10 
  h 17 4
1 16 
  h 17 5
5 12 
  h 36 3
36 
  h 43 6
15 28 
  h 879 17
17 48 155 231 428 
  h 4856 23
321 448 596 955 2536 
  +/h 4856 23
4856

এর সমস্যা: এটি কোনও সমাধানের যোগফলের কিছু সংখ্যার পুনরাবৃত্তি রয়েছে বলে মনে হয় না ...


0

সি ++ (ঝনঝন) , 198 বাইট

#import<vector>
using V=std::vector<int>;V f(int n,int s){V _{0};int z=1,a=0,b=1,i,t;for(;a<n;b+=s-2)_.push_back(a+=b),++z;V o;for(t=a=0;t-n;b=++a)for(o=V(s),t=i=0;b;b/=z)t+=o[i++]=_[b%z];return o;}

এটি অনলাইন চেষ্টা করুন!

V=vector<int> 
V _{0}; // initialized with one element =0 
int z=1, // vector size 
a=0,b=1,i,t;for(;a<n;b+=s-2)_.push_back(a+=b),++z;
// pushes polygons in V
V o; // vector to be returned 
for(t=a=0;t-n;b=++a) // ends when t=n
// loop to generate multi-dimension indexes
// for example a=1234 z=10
// a%z->4 , a/=z , a%z-> 3 , ... 2 , 1
for(o=V(s),t=i=0;b;b/=z)// loop to extract indexes
t+=o[i++]=_[b%z]; // put the sum in t and values in o
return o
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.