স্কোয়ার পাইয়ের একটি ত্রিভুজাকার স্লাইস


21

বেক দ্বারা অনুপ্রাণিত পাই এর একটি স্লাইস

চ্যালেঞ্জ

প্রদত্ত ইনপুট 3 <= n <= 100এবং 3 <= y <= n, উপরের বাম দিকে শুরু করে ( ) n x nএর দশমিক অংশের একটি ম্যাট্রিক্স তৈরি করুন । তারপরে, আকারের উপরের-ডান ত্রিভুজটি নিয়ে এটি একসাথে সংযুক্ত করুন। ফলাফল সংখ্যা আউটপুট।pi14159...y x y

উদাহরণস্বরূপ, ইনপুট জন্য n = 5, y = 3নিম্নলিখিত ম্যাট্রিক্স নির্মান করা হয়

14159
26535
89793
23846
26433

তারপরে, উপরের-ডান 3 x 3ত্রিভুজটি হবে

159
 35
  3

তাই 159353আউটপুট।

ইনপুট

দুটি পূর্ণসংখ্যা - nপাই এর অঙ্কগুলির বর্গ ম্যাট্রিক্সের আকার এবং yউপরি - ডান ত্রিভুজকে উপস্থাপন করে - যে কোনও সুবিধাজনক বিন্যাসে

আউটপুট

  • ফলস্বরূপ কাটা এবং সংক্ষিপ্ত নম্বর, মুদ্রিত / স্ক্রিনে প্রদর্শিত, একটি স্ট্রিং হিসাবে ফিরে আসে, ইত্যাদি।
  • শেষে / নেতৃস্থানীয় হোয়াইটস্পেস ঐচ্ছিক, এতক্ষণ কোন হোয়াইটস্পেস আছে হিসাবে মধ্যে (অর্থাত, আউটপুট 159 35 3অথবা অবৈধ হবে মতো)।
  • নোট করুন যেহেতু আমরা স্পষ্টভাবে সংখ্যার অঙ্ক piবা গাণিতিক গণনা নয়, এর অঙ্কগুলি সন্ধান করছি , উত্তরগুলির ম্যাট্রিক্সের চূড়ান্ত অঙ্কটি গোল হওয়া উচিত নয়।

বিধি

  • এটি তাই গল্ফিংয়ের জন্য সমস্ত নিয়মাবলী প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জেতে।
  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন গ্রহণযোগ্য।
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

উদাহরণ

 n  y  output
-------------
 3  3  141923
 5  3  159353
 6  4  1592589383
 6  6  141592535893238643794
20 12  358979323846950288419715820974944628620899211706792306647223172745025559196615

ধন্যবাদ। এছাড়াও, শেষ সংখ্যাটি বৃত্তাকার করা যেতে পারে? কিছু উত্তর সেগুলি বলে মনে হচ্ছে এবং এটি এড়ানো সত্যিই কঠিন হতে পারে
লুইস মেন্ডো

1
@ লুইস মেন্ডো এটি একটি ভাল বিষয়। না, শেষ সংখ্যার বৃত্তাকার হওয়া উচিত নয়, যেহেতু আমরা পাই এর আসল অঙ্কগুলি খুঁজছি, কোনও আনুমানিক বা গণনা নয়। আমি এটি স্পষ্ট করব এবং উত্তরদাতাদের সাথে যাচাই করব।
অ্যাডমবর্কবার্ক

উত্তর:


7

05 এ বি 1 , 19 বাইট

ব্যবহার সিপি-1252 এনকোডিং।

nžs¦¦¹ôI£íRvyN>£J}R

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

ব্যাখ্যা

n=5, y=3 উদাহরণস্বরূপ ব্যবহৃত

nžs                  # push pi to n^2 digits
                     # STACK: 3.1415926535897932384626433
   ¦¦                # remove the first 2 chars
                     # STACK: 1415926535897932384626433
     ¹ô              # split into n*n matrix
                     # STACK: ['14159', '26535', '89793', '23846', '26433']
       I£            # keep the first y rows
                     # STACK: ['14159', '26535', '89793']
         íR          # reverse the list of rows and each individual row
                     # STACK: ['39798', '53562', '95141']
           v     }   # for each y,N (row, index) in the list
            yN>£J    # keep the first index+1 digits of the row and join to string
                     # STACK: 353951
                  R  # reverse the string
                     # STACK: 159353
                     # implicit print

1
10 কে অভিনন্দন!
এরিক দ্য আউটগল্ফার

5

পাইথন 2 (সিম্পি সহ), 100 বাইট

from sympy import*
lambda n,y:''.join(c for i,c in enumerate(`pi.round(n*n+1)`[2:])if i%n-i/n>n-y-1)

কোনও সিম্পি নেই, 260 246 244 233 231 218 বাইট

p=lambda n,y,a=-30,b=10,c=3,d=2,e=0,f=5,s='',i=0:i<n*n and p(n,y,*[((2*b+a)*f,b*d,c*f,d+1,(b*(7*d)+2+(a*f))/(c*f),f+2,s,i),(10*(a-e*c),10*b,c,d,((10*(3*b+a))/c)-10*e,f,s+(str(e)[:i%n-i/n>n-y-1]),i+1)][4*b+a-c<e*c])or s

এটি স্ট্যানলি রবিনোভিটস এবং স্ট্যান ওয়াগনের "স্পিগট অ্যালগরিদম ফর পাই" নিয়োগ করেছে ।

মান আর্গুমেন্ট হবে a,b,c,d,e,f=0,1,1,1,3,3, পাই এর প্রথম সংখ্যা উত্পাদ 3, যে যেহেতু প্রয়োজন হয় না অ্যালগরিদম বিন্দু আগে থেকে ইনিশিয়ালাইজ করা হয় 1পাওয়া হয়, যা দুই বাইট যদিও সংরক্ষণ aএবং bআর এর ফলে slicing প্রয়োজন হয় না এবংi এ শুরু করতে পারেন 0বরং -1

সর্বশেষ পরীক্ষার ক্ষেত্রে ডিফল্ট পুনরাবৃত্তি সীমা হিট করে বিভাগগুলির প্রথমটির জন্য
ব্যবহার //করে যাতে str(v)প্রতিস্থাপন করা যেতে পারে `v`(অন্যথায় এটি Lদীর্ঘ সময়ের জন্য শেষ হয়ে যাবে )।
repl.it


২৩২ বাইটের জন্য একটি অপরিবর্তিত সংস্করণ যা শেষ পরীক্ষার কেসটিও মূল্যায়ন করে:

def p(n,y):
 a,b,c,d,e,f,i,s=-30,10,3,2,0,5,0,''
 while i<n*n:
    if 4*b+a-c<e*c:s+=`e`[:i%n-i/n>n-y-1];g=10*(a-e*c);e=((10*(3*b+a))//c)-10*e;b*=10;i+=1
    else:g=(2*b+a)*f;h=(b*(7*d)+2+(a*f))/(c*f);b*=d;c*=f;f+=2;d+=1;e=h
    a=g
 print s

repl.it (প্রথম ইনডেন্ট একটি স্থান, দ্বিতীয় ইনডেন্ট একটি ট্যাব)


সেই "কোনও সিম্পি" সংস্করণটি চিত্তাকর্ষক নয় :)
এমিগানা

1
আমি একটি লিঙ্ক যুক্ত করেছি, এটি আমার অ্যালগরিদম নয়!
জোনাথন অ্যালান

... তবে আপনি যদি পাইটিকে এক মিলিয়ন অঙ্কে "মুখস্থ" করতে চান তবে এটি সম্ভবত সহজ
জোনাথন অ্যালান

4

গণিত, 82 বাইট

Print@@Join@@Partition[RealDigits[Pi-3,10,#^2][[1]],#][[i,i-#2-1;;]]~Table~{i,#2}&

আপনি #&@@পরিবর্তে ব্যবহার করতে পারেন [[1]]
মার্টিন ইন্ডার

পছন্দ করুন এটি কেটে যায়। (n = 10, y = 10 দেয় 1415926535979323846433832798841971937510749448164899259; শেষটি 9পাই এর 100 তম সংখ্যা, এবং 101 তম 8
সংখ্যাটি

3

MATL, 23 22 27 বাইট

1 লুইস @ লুইসকে ধন্যবাদ রক্ষা করেছে

UtEYPwY$IbH+&:)GetGi-&R!g)!

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

ব্যাখ্যা

        % Implicitly grab input (n)
Ut      % Square n and duplicate
E       % Multiply n^2 by 2
YP      % Pi literal
w       % Flip the stack
Y$      % Compute the first 2 * (n^2) digits of pi (accounts for rounding)
IbH+&:) % Grab the first n^2 digits after the decimal
Ge      % Reshape it into an n x n matrix in row-major ordering
t       % Duplicate this matrix
Gi-     % Grab the second input (y) and compute the difference between n and y
&R!     % Get the upper diagonal part and transpose to convert to lower diagonal
g)      % Convert it to a logical array and use it to select the digits of interest
!       % Transpose the result and implicitly display

@ লুইস মেন্ডো আহ! আমি জানতাম যে আমাদের এটির জন্য একটি ফাংশন আছে তবে এটি খুঁজে পেল না। ধন্যবাদ!
সোয়েভার

@ টিমিডি লক্ষ্য করার জন্য ধন্যবাদ। আপডেট করা হয়েছে।
সুইভার

2

পার্ল, 67 বাইট

s/ /bpi++$_**2/e;$%=$';$%-=print/(.{$%})$/ for/\d{$`}/g

কমান্ড লাইন বিকল্পের প্রয়োজন -nMbignum=bpi, 12 হিসাবে গণনা করা ইনপুট স্টিডিন থেকে নেওয়া হয়।

নমুনা ব্যবহার

$ echo 3 3 | perl -nMbignum=bpi primo-square-pi.pl
141923

$ echo 5 3 | perl -nMbignum=bpi primo-square-pi.pl
159353

$ echo 6 4 | perl -nMbignum=bpi primo-square-pi.pl
1592589383

$ echo 6 6 | perl -nMbignum=bpi primo-square-pi.pl
141592535893238643794

$ echo 20 12 | perl -nMbignum=bpi primo-square-pi.pl
358979323846950288419715820974944628620899211706792306647223172745025559196615

0

সি #, 232 বাইট 268 বাইট

সম্পাদনা:

আমি প্রথমে পদ্ধতির বাইরে পাইয়ের জন্য একটি ধ্রুব স্ট্রিং ব্যবহার করেছি, তবে মনে হচ্ছে এটি প্রতারণামূলক। আমাকে সি # ম্যাথ.পিআই মানটি ব্যবহার করতে হয়েছে, যার কেবলমাত্র 14 দশমিক স্থান রয়েছে, তাই সর্বোচ্চm আমি মানটি ব্যবহার করতে পারি তা 3। অঙ্কন বোর্ডে ফিরে ...

Golfed:

IEnumerable<string>f(int m,int t){var a=new string[m, m];var b=Math.PI.ToString().Replace("3.","").Substring(0,m*m).ToArray();var c=0;for(int i=0;i<m;i++){for(int j=0;j<m;j++){a[i, j]=b[c]+"";c++;}}c=0;while(t>0){for(int i=t;i>0;i--){yield return a[c,m-i];}t--;c++;}}}

Ungolfed:

  class ATriangularSliceOfSquaredPi
  {
    //http://www.piday.org/million/
    //const string p = "1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831";

    public IEnumerable<string> f(int m, int t)
        {
          var a = new string[m, m];

          //var b = p.Substring(0, m * m).ToArray();
          var b = Math.PI.ToString().Replace("3.", "").Substring(0, m * m).ToArray();

          var c = 0;

          for (int i = 0; i < m; i++)
          {
            for (int j = 0; j < m; j++)
            {
              a[i, j] = b[c] + "";
              c++;
            }
          }

          c = 0;

          while (t > 0)
          {
            for (int i = t; i > 0; i--)
            {
              yield return a[c, m - i];
            }
            t--;
            c++;
          }
        }
      }

সংক্ষিপ্ত উত্তর নয়, তবে আমি খুশি হয়েছি আমি এটি সমাধান করেছি ...

পরীক্ষার আউটপুট:

m   t   output
3   3   141923

5 3 159353
6 4 1592589383
6 6 141592535893238643794
20 12 358979323846950288419715820974944628620899211706792306647223172745025559196615


1
চমৎকার উত্তর! দুঃখের বিষয়, আপনি যদি pভাষাটি ব্যবহার করেন এবং এটি কোনও অন্তর্নির্মিত না (যা আমি নিশ্চিত যে এটি না) তবে আপনার এটি আপনার বাইট স্কোরের মধ্যে অন্তর্ভুক্ত করতে হবে।
অ্যাডমবর্কবর্ক

@ টিমিডি ওহ না! ঠিক আছে, আমার সাথে ছেড়ে দিন !! যদি আমি কেবল আমার পাই নম্বরগুলি এতে আটকান তবে এতে আরও 400+ বেশি বাইটের প্রয়োজন হবে, তাই আমি মনে করি একটি ভিন্ন পদ্ধতির প্রয়োজন ... :)
পিট আর্দেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.