5, 2, 16, 3580, এর পরে কী আসে?


51

দশমিক পাঁচটি ধনাত্মক পূর্ণসংখ্যার শক্তি বিবেচনা করুন। এখানে প্রথম 25 টি ডান সারিবদ্ধ:

 X                5^X
 1                  5
 2                 25
 3                125
 4                625
 5               3125
 6              15625
 7              78125
 8             390625
 9            1953125
10            9765625
11           48828125
12          244140625
13         1220703125
14         6103515625
15        30517578125
16       152587890625
17       762939453125
18      3814697265625
19     19073486328125
20     95367431640625
21    476837158203125
22   2384185791015625
23  11920928955078125
24  59604644775390625
25 298023223876953125

লক্ষ্য করুন যে শক্তির ডানদিকের কলামটি সমস্ত 5। ডানদিক থেকে দ্বিতীয় কলামটি সমস্ত 2। ঠিক আছে, উপর থেকে নীচে, বিকল্পসমূহ পড়া থেকে তৃতীয় কলামে 1, 6, 1, 6, ইত্যাদি পরবর্তী কলাম শুরু 3, 5, 8, 0এবং তারপর চক্র।

প্রকৃতপক্ষে, প্রতিটি কলামে (আমরা যদি যথেষ্ট পরিমাণে নিচে নেমে যাই) তবে প্রাথমিক 5এবং 2এর চক্র ব্যতীত, দৈর্ঘ্যের আগের চক্রের দ্বিগুণ, সংখ্যাগুলির সাইক্লিং ক্রম থাকে ।

ডানদিকে এন = 1 দিয়ে শুরু করে এনকে কলাম নম্বর বলছে, প্রথম কয়েকটি চক্র হ'ল:

N cycle at column N
1 5
2 2
3 16
4 3580
5 17956240
6 3978175584236200
7 19840377976181556439582242163600
8 4420183983595778219796176036355599756384380402237642416215818000

চ্যালেঞ্জ

একটি ধনাত্মক পূর্ণসংখ্যা এন দেওয়া হয়েছে, উপরে বর্ণিত হিসাবে কলাম এন-এ চক্রের দশমিক অঙ্কগুলি আউটপুট করুন। উদাহরণস্বরূপ, এন = 4 এর আউটপুট হবে 3580

অঙ্কগুলি কোনও তালিকা হিসাবে আউটপুট হতে পারে [3, 5, 8, 0]বা অন্য কোনও যুক্তিসঙ্গত ফর্ম্যাটে এত দীর্ঘ হতে পারে :

  • অঙ্কগুলি পাওয়ার কলামগুলিতে উপরে থেকে নীচে পর্যন্ত পড়ার মতো হয়। যেমন 0853অবৈধ।
  • চক্রটি তার পাওয়ার কলামের শীর্ষ নম্বর দিয়ে শুরু হয়। যেমন 5803যেমন 4 র্থ কলামে দিয়ে শুরু হয় অবৈধ 3না 5
  • ঠিক একটি চক্র আউটপুট হয়। যেমন 358বা 35803বা 35803580সমস্ত অবৈধ হবে।

আপনার কোড অবশ্যই কমপক্ষে N = 1 থেকে 30 এর মধ্যে কাজ করবে।

ইচ্ছা করলে আপনি ধরে নিতে পারেন কলামগুলি 1-ইনডেক্সের পরিবর্তে 0-সূচিযুক্ত। সুতরাং এন = 0 দেয় 5, এন = 1 দেয় 2, এন = 2 দেয় 16, এন = 3 দেয় 3580, ইত্যাদি

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী

ধন্যবাদ Downgoat এবং ডিজে চ্যালেঞ্জ সমর্থনের জন্য।


অর্ডার এটি বেশ জটিল করে তোলে।
ডেনিস

9
চক্রের দৈর্ঘ্য সর্বদা 2^(N-2)ব্যতীতN = 1
JungHwan Min

1
আনুমানিক ব্যবহার করা যেতে পারে? আউটপুটটি এন = 72 অবধি বৈধ , যা তাত্ত্বিকভাবে 2.36E + 21 অঙ্ক মুদ্রণ করবে।
জংহওয়ান মিন

এই ক্রমটি কি ওইআইএসে রয়েছে?
স্টার ওয়েভার

পছন্দ করুন
মেগো

উত্তর:


26

পাইথন 2, 62 61 58 বাইট

জিরো-ভিত্তিক। আমি ধরে নিয়েছি এল প্রত্যয়গুলি গ্রহণযোগ্য।

lambda n:[5**(n*3/7-~i)/2**n%10for i in range(2**n/2or 1)]

আউটপুট:

0 [5]
1 [2]
2 [1, 6]
3 [3, 5, 8, 0]
4 [1, 7, 9, 5, 6, 2, 4, 0]
5 [3, 9, 7, 8, 1, 7, 5, 5, 8, 4, 2, 3, 6, 2, 0, 0]
6 [1, 9, 8, 4, 0, 3, 7, 7, 9, 7, 6, 1, 8, 1, 5, 5, 6, 4, 3, 9, 5, 8, 2, 2, 4, 2L, 1L, 6L, 3
L, 6L, 0L, 0L]
7 [4, 4, 2, 0, 1, 8, 3, 9, 8, 3, 5, 9, 5, 7, 7, 8, 2, 1, 9, 7, 9, 6, 1, 7, 6L, 0L, 3L, 6L,
3L, 5L, 5L, 5L, 9L, 9L, 7L, 5L, 6L, 3L, 8L, 4L, 3L, 8L, 0L, 4L, 0L, 2L, 2L, 3L, 7L, 6L, 4L,
 2L, 4L, 1L, 6L, 2L, 1L, 5L, 8L, 1L, 8L, 0L, 0L, 0L]

পূর্ববর্তী সমাধান:

lambda n:[5**int(n/.7-~i)/10**n%10for i in range(2**n/2or 1)]
lambda n:[str(5**int(n/.7-~i))[~n]for i in range(2**n/2)]or 5

ব্যাখ্যা:

def f(n):
    r = max(2**n / 2, 1)
    m = int(n/0.7 + 1)
    for i in range(r):
        yield (5**(m+i) / 10**n) % 10

range(2**n/2)পর্যবেক্ষণ যে ব্যবহার প্রতিটি চক্র দৈর্ঘ্য R = 2 আছে এন -1 যখন এন = 0 ব্যতীত, তাই আমরা 5 n- তম সংখ্যা গণনা মি থেকে 5 মিটার + R - 1

5 মি চক্রের শুরুটি 10 এন এর চেয়ে বড় সংখ্যা । 5 মি ≥ 10 এন দ্রবণটি এম ≥ n / লগ 10 দেয় Here. এখানে আমরা আনুমানিক লগ 10 5 ≈ 0.7 যা এন = 72 এ ভেঙে যাবে We যথার্থতা বাড়ানোর জন্য আমরা আরও সংখ্যার যোগ করতে পারতাম:

| approximation             | valid until        | penalty   |
|---------------------------|--------------------|-----------|
| .7                        | n = 72             | +0 bytes  |
| .699                      | n = 137            | +2 bytes  |
| .69897                    | n = 9297           | +4 bytes  |
| .698970004                | n = 29384          | +8 bytes  |
| .6989700043               | n = 128326         | +9 bytes  |
| .6989700043360189         | too large to check | +15 bytes |
| import math;math.log10(5) | same as above      | +23 bytes |

/ 10**n % 10লুপ কেবল কাঙ্ক্ষিত অঙ্ক নিষ্কর্ষ। অন্য একটি বিকল্প সমাধান স্ট্রিং ম্যানিপুলেশন ব্যবহার করে। আমি এখানে 1 টি বাইট অপসারণ করতে কৌশলটি~n == -n-1 ব্যবহার করেছি ।

মন্তব্যে উল্লিখিত একটি, অভিব্যক্তিটি 5**(m+i) / 10**nআরও এভাবে সরল করা যেতে পারে যা বর্তমান 58-বাইট উত্তর দেয়।

এখানে চিত্র বর্ণনা লিখুন

( x/2**nবিট বিটওয়াইস ডান-শিফট ব্যবহার করে করা যেতে পারে x>>nUnfortunately দুর্ভাগ্যক্রমে, পাইথনের অপারেটর প্রাধান্যের কারণে এটি কোনও বাইট সংরক্ষণ করে না)) 3/7 ভগ্নাংশটিও অনুরূপ মান্নারে উন্নত করা যেতে পারে:

| approximation                   | valid until         | penalty   |
|---------------------------------|---------------------|-----------|
| n*3/7                           | n = 72              | +0 bytes  |
| n*31/72                         | n = 137             | +2 bytes  |
| n*59/137                        | n = 476             | +3 bytes  |
| n*351/815                       | n = 1154            | +4 bytes  |
| n*643/1493                      | n = 10790           | +5 bytes  |
| n*8651/20087                    | n = 49471           | +7 bytes  |
| int(n*.43067655807339306)       | too large to check  | +20 bytes |
| import math;int(n/math.log2(5)) | same as above       | +26 bytes |

1
(5**(n*3/7-~i)>>n)%10। যেহেতু আপনি 10 এর একটি (ক্ষুদ্র) শক্তি দ্বারা বিভক্ত 5 এর শক্তি গ্রহণ করছেন, আপনি 5 এর শক্তি হ্রাস করতে পারেন এবং পরিবর্তে ডানদিক বদল করতে পারেন। n/.7 - nn*10/7 - nn*3/7। প্রিপিসালে, এটি 2ⁿ এর চেয়ে বড় ক্ষুদ্রতম শক্তি থেকে অঙ্কগুলি বের করছে ( 1 / লগ (5%) এর আনুমানিক 3/7 সহ )। এছাড়াও, পরিবর্তে ব্যবহার করা আপনাকে ধারাবাহিক আউটপুট দেবে। range(2**n/2or 1)
primo

1
@ প্রিমো ধন্যবাদ, আপডেট হয়েছে। (x>>n)%10কোনও x/2**n%10আপাতত উন্নতি দেয় না তাই আমি আপাতত বিট শিফট ব্যবহার করি না, কারণ সম্ভবত সাধারণটি খুঁজে বের করার উপায় রয়েছে 2**n
কেনেটিএম

আকর্ষণীয় ধারণা আউট ফ্যাক্টরিং 2**n, যদিও সামান্য আর মনে হয়: int(5**(-~i-n*log(2,5)%1))%10(আমি সরলীকৃত করেছি int(n*log(2,5))-n*log(2,5)যেমন -(n*log(2,5)%1))।
primo

@ প্রিমো আকর্ষণীয় তবে আমার অর্থ 2**nএখানে এবং ব্যাপ্তি যুক্তি।
কেনেটিএম

10

ডিসি , 72 বাইট

[3Q]sq2?dsa^1+2/dsusk[Ola^/O%plk1-dsk1>q]sp1[d5r^dOla^<psz1+d4/lu>t]dstx

0 ভিত্তিক সূচক।

এটি নির্ভুল পূর্ণসংখ্যার গাণিতিক ব্যবহার করে - কোনও লোগারিদম আনুমানিক নয়। এটি কম্পিউটারের মেমরির ক্ষমতা পর্যন্ত কাজ করবে।

অনলাইন ডিসি প্রোগ্রাম চেষ্টা করুন!


ডিসি কোডটি বাশ সমাধানে রূপান্তরিত হতে পারে:

বাশ + জিএনইউ ইউটিলিটিস, 96 77 75 বাইট

u=$[(2**$1+1)/2]
dc -e "[O$1^/O%p]sp1[d5r^dO$1^<psz1+d4/$u>t]dstx"|head -$u

বাশ সংস্করণটি অনলাইনে ব্যবহার করে দেখুন!


9

গণিত, 66 60 52 বাইট

Floor@Mod[5^Floor[Range@Max[2^#/2,1]+#/.7]/10^#,10]&

বেনামে ফাংশন, 0-সূচকযুক্ত। লগ 5 (10) এর আনুমানিক ব্যবহার (0.7)

কিভাবে এটা কাজ করে?

Range@Max[2^#/2,1]

2 larger (ইনপুট) / 2 এবং 1 এর চেয়ে বেশি বড় নিন {1. জেনারেট করুন ..এই সংখ্যা}

...+#/.7

ইনপুট / .7 যুক্ত করুন

5^Floor[...]/10^#

ফলাফলের পাওয়ারে 5 বৃদ্ধি করুন (5 এর শক্তি তৈরি করা), 10 ^ ইনপুট দ্বারা বিভক্ত করুন (পছন্দসই কলামের ডানদিকে অঙ্কগুলি থেকে মুক্তি পেয়ে)

Mod[ ...,10]

কারও অঙ্ক (পছন্দসই কলাম) নিয়ে মডুলো 10 প্রয়োগ করুন।

সঠিক সংস্করণ, 58 বাইট

Floor@Mod[5^Floor[Range@Max[2^#/2,1]+#/5~Log~10]/10^#,10]&

5

জাভাস্ক্রিপ্ট (ES7), 78 76 বাইট

f=(N,z=5,s,X=2**N,q=z/10**N|0)=>s|q?X>0?q+f(N,z*5%10**-~N,1,X-2):"":f(N,z*5)

0-সূচকযুক্ত, যেমন f(0)দেয় 2

পরীক্ষার স্নিপেট

স্নিপেট ক্রস ব্রাউজারের সামঞ্জস্যের Math.powপরিবর্তে ব্যবহার করে **


4

সিজেম, 35

5ri(:N.7/i)#2N(#mo{_AN#/o5*AN)#%}*;

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

এটি স্থান-দক্ষ এবং অত্যধিক ধীর নয়, আমার কম্পিউটারে 30 টি ইনপুট নেওয়ার জন্য বেশ কয়েক মিনিট সময় নিয়েছে (জাভা ইন্টারপ্রেটার ব্যবহার করে)।


3

জেলি , 26 21 বাইট

-2 বাইটগুলি কেনেটিমের 0.7 আনুমানিক ধারণাটি ব্যবহার করে

2*HĊR+÷.7$Ḟ*@5:⁵*⁸¤%⁵

এটি অনলাইন চেষ্টা করুন! (সময় বেরিয়ে এন> 15 )

পূর্ণসংখ্যার তালিকা, সংখ্যাগুলি প্রদান করে।
জিরো ভিত্তিক তাত্ত্বিকভাবে n <= 72 ( ভাসমান পয়েন্টের নির্ভুলতা পেতে এর .7সাথে প্রতিস্থাপন করুন 5l⁵¤) এর জন্য কাজ করে।

কিভাবে?

2*HĊR+÷.7$Ḟ*@5:⁵*⁸¤%⁵ - Main link: n
2*                    - 2 raised to the power of n
  H                   - halved: 2 raised to the power of n-1
   Ċ                  - ceiling: adjust 2**-1 = 0.5 up to 1 for the n=0 edge case
    R                 - range: [1,2,...,ceiling(2**(n-1))] - has length of the period
         $            - last two links as a monad:
      ÷.7             -     divide by 0.7 (approximation of log(5, 10), valid up to n=72)
     +                - add (vectorises)
          Ḟ           - floor (vectorises)
             5        - 5
           *@         - exponentiate (vectorises) with reversed @arguments
                  ¤   - nilad followed by link(s) as a nilad
               ⁵      -     10
                 ⁸    -     left argument, n
                *     -     exponentiate: 10 raised to the power of n
              :       - integer division: strips off last n digits
                   %⁵ - mod 10: extracts the last digit

স্থানীয়ভাবে: n = 17 এর জন্য ওয়ার্কিং সেট মেমরিটি প্রায় 750MB এর উপরে উঠেছিল তখন প্রায় 1 জিবিতে ছড়িয়ে পড়ে ; জন্য এন = 18 এটা ধীরে ধীরে পৌঁছে 2.5GB তারপর প্রায় থেকে বৃদ্ধি পেয়েছিল 5GB


3

পার্ল 6 , 52 বাইট

->\n{(map {.comb[*-n]//|()},(5 X**1..*))[^(2**n/4)]}

পর্যাপ্ত মেমরির (যেমন কোনও লোগারিদম আনুমানিক নয়) প্রদত্ত ইচ্ছাকৃতভাবে উচ্চ ইনপুটগুলির জন্য কাজ করে ।
অঙ্কের একটি তালিকা ফেরত দেয়।

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

কিভাবে এটা কাজ করে

->\n{                                              }  # A lambda with argument n.
                            (5 X**1..*)               # The sequence 5, 25, 125, 625...
      map {               },                          # Transform each element as such:
           .comb[*-n]                                 #   Extract the n'th last digit,
                     //|()                            #   or skip it if that doesn't exist.
     (                                 )[^(2**n/4)]   # Return the first 2^(n-2) elements.

"এলিপেন্ট স্কিপিং" অংশটি এইভাবে কাজ করে:

  • অবৈধ সূচকে তালিকার তালিকা তৈরি করা একটি ব্যর্থতা প্রদান করে , যা একটি "অপরিজ্ঞাত" মান হিসাবে গণ্য হয়।
  • // হ'ল "সংজ্ঞায়িত বা" অপারেটর।
  • |()একটি খালি স্লিপ প্রদান করে , যা 0 উপাদান হিসাবে বাইরের তালিকায় দ্রবীভূত হয়, প্রয়োজনীয় উপাদানটি নিশ্চিত করে যে বর্তমান উপাদানটি এড়িয়ে গেছে।

প্রান্ত-কেসটি n=1সূক্ষ্মভাবে কাজ করে, কারণ 2**n/4হয়ে যায় 0.5এবং এর ^(0.5)অর্থ হ'ল 0 ..^ 0.50 (অন্তর্ভুক্ত) এবং 0.5 (অন্তর্ভুক্ত নয়) এর মধ্যে পূর্ণসংখ্যা ", অর্থাৎ একক উপাদান 0 এর সাথে একটি তালিকা।


2

জে, 50 বাইট

(2^0>.2-~]){.' '-.~-{"1[:([:":[:|:[:,:5^[:>:i.)2^]

দ্রষ্টব্য: অবশ্যই বর্ধিত সংখ্যাতে পাস করতে হবে

ব্যবহার:

   q =: (2^0>.2-~]){.' '-.~-{"1[:([:":[:|:[:,:5^[:>:i.)2^]
   q 1x
5
   q 2x
2
   q 4x
3580

2
ডাউনটা কেন?
ljeabmreosn

2

হাস্কেল , 73 বাইট

f 0="5"
f n=take(2^(n-1))[reverse x!!n|x<-show<$>iterate(*5)1,length x>n]

এটি অনলাইন চেষ্টা করুন! 0-ইনডেক্সিং ব্যবহার করে।

ব্যাখ্যা:

f 0="5"              -- if the input is 0, return "5"
f n=                 -- otherwise for input n
  take(2^(n-1))      -- return the first 2^(n-1) elements of the list
    [reverse x!!n    -- of the nth column of x
      |x<-show<$>    --    where x is the string representation
        iterate(*5)1 --    of the elements of the infinite list [5,25,125,...]
      ,length x>n    -- if x has at least n+1 columns
    ]                -- this yields a list of characters, which is equivalent to a string

1

ব্যাচ, 294 বাইট

@echo off
if %1==1 echo 5
set/a"l=1<<%1-2,x=0,s=1
set t=
for /l %%i in (2,1,%1)do call set t=%%t%%x
:l
if %l%==0 exit/b
set t=%s%%t%
set s=
set c=
:d
set/ac+=%t:~,1%*5,r=c%%10,c/=10
set s=%s%%r%
set t=%t:~1%
if "%t%"=="" echo %r%&set/al-=1&goto l
if %c%%t:~,1%==0x goto l
goto d

প্রতিটি ডিজিটকে তার নিজস্ব লাইনে আউটপুট দেয়। 5 লম্বা হাতের শক্তি গণনা করে কাজ করে, তবে N=3332 টি-বিট ইন্টিজার ব্যবহারের কারণে শুধুমাত্র কত অঙ্ক মুদ্রণ করতে হবে তা গণনা করে কাজ করে। 5 এর বর্তমান শক্তির s(বিপরীত) শেষ Nঅঙ্কগুলি tরয়েছে , যেখানে xপ্যাডিং হিসাবে ব্যবহৃত রয়েছে , যদিও x=0পরের শক্তি গণনা করা হলে এগুলি শূন্য হিসাবে মূল্যায়ন করে। উদাহরণস্বরূপ N=4:

s   t
1   xxx (initial values before the first power of 5 is calculated)
5   xxx
52  xx
521 x
526 x
5213    (print 3)
5265    (print 5)
5218    (print 8)
5260    (print 0)

1

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

1-ইন্ডেক্স। ES7 উত্তরের চেয়ে সামান্য খাটো , তবে 3 ধাপ আগে ব্যর্থ হয় (এন = 13 এ)।

n=>(g=x=>k>>n?'':(s=''+x*5%1e15)[n-1]?s.substr(-n,1)+g(s,k+=4):g(s))(k=1)

ডেমো


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.