ডিজিটাল বৈচিত্র্য


16

একটি ধনাত্মক পূর্ণসংখ্যা পূর্ণসংখ্যার বেসে উপস্থাপিত হতে পারে 1 <= b < inf

যখন সেই বেসে রূপান্তরিত হয় তখন এর কয়েকটি স্বতন্ত্র সংখ্যা থাকে।

বেসে কোনও ধনাত্মক পূর্ণসংখ্যার পৃথক অঙ্ক থাকে 1has1

বেস সর্বাধিক ধনাত্মক পূর্ণসংখ্যা 2আছে 2স্বতন্ত্র সংখ্যা, ব্যতিক্রম ফর্ম যারা হচ্ছে 2^n - 1, যা শুধুমাত্র আছে 1

সুতরাং প্রথম ধনাত্মক পূর্ণসংখ্যা যা 1অনন্য অঙ্কের সাথে একটি পূর্ণসংখ্য বেসে উপস্থাপিত হতে পারে 1এবং প্রথমটি 2পৃথক অঙ্কের সাথে উপস্থাপিত হতে পারে 2

আমরা বলতে পারি 1ডিজিটাল বৈচিত্র্য প্রথম পূর্ণসংখ্যা 1এবং 2ডিজিটাল বৈচিত্র্য প্রথম পূর্ণসংখ্যা 2

চ্যালেঞ্জ:

একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া nপ্রথম ধনাত্মক পূর্ণসংখ্যা (বেস দশ * মধ্যে) একটি ডিজিটাল বৈচিত্র্য আছে আসতে n

* যদি আপনার ভাষা কেবল একটি নির্দিষ্ট বেসকে সমর্থন করে (যেমন ইউনিারি বা বাইনারি) তবে আপনি সেই বেসটিতে আউটপুট পেতে পারেন।

আপনার অ্যালগরিদম অবশ্যই কোনও ধনাত্মক পূর্ণসংখ্যার ইনপুটটির জন্য তত্ত্বের সাথে কাজ করতে হবে: এটি ব্যর্থ হতে পারে কারণ আপনার ভাষার পূর্ণসংখ্যার নির্ভুলতা আউটপুটটির জন্য খুব ছোট; তবে ব্যর্থ হতে পারে না কারণ বেস রূপান্তরটি কেবল কিছু সীমা পর্যন্ত সংজ্ঞায়িত।

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

input  output
   1     1
   2     2
   3     11
   4     75
   5     694
   6     8345
   7     123717
  17     49030176097150555672
  20     5271200265927977839335179
  35     31553934355853606735562426636407089783813301667210139
  63     3625251781415299613726919161860178255907794200133329465833974783321623703779312895623049180230543882191649073441
 257     87678437238928144977867204156371666030574491195943247606217411725999221158137320290311206746021269051905957869964398955543865645836750532964676103309118517901711628268617642190891105089936701834562621017362909185346834491214407969530898724148629372941508591337423558645926764610261822387781382563338079572769909101879401794746607730261119588219922573912353523976018472514396317057486257150092160745928604277707892487794747938484196105308022626085969393774316283689089561353458798878282422725100360693093282006215082783023264045094700028196975508236300153490495688610733745982183150355962887110565055971546946484175232

এটি , বাইট জেতে সংক্ষিপ্ততম সমাধান।

OEIS: A049363 - বেস এন মধ্যে সবচেয়ে ছোট পন্ডিত সংখ্যা igit

উত্তর:


11

জেলি , 4 বাইট

ṖaWḅ

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

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

ṖaWḅ  Main link. Argument: n

Ṗ     Pop; yield [1, 2, 3, ..., n-1].
  W   Wrap; yield [n].
 a    Logical AND; yield [n, 2, 3, ..., n-1].
   ḅ  Convert the result from base n to integer.

আমি ভুলে গেছি স্থানের মূল্যগুলি উপচে পড়তে পারে, আমার লসিকে 7: 9
জোনাথন অ্যালান

আমি ইচ্ছা করি কোডগল্ফের ব্যবহারকারীর জন্য ব্যবহার করা চার্ট বাইট বাইট ছিল। বর্তমান বনাম বনাম ব্যবহৃত মোট বাইটের প্লট হতে পারে।
ফিলিপ হাগলুন্ড

আমাকে কেন কাজ করে তা নির্ধারণ করার জন্য কিছুটা সময় নিলেন ...
গ্রেগ মার্টিন

9

পাইথন, 40 বাইট

f=lambda n,k=1:n*(n<k+2)or-~f(n,k+1)*n-k

আইডিয়নে এটি পরীক্ষা করুন ।

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

N স্বতন্ত্র সংখ্যাযুক্ত একটি সংখ্যা অবশ্যই base বেসে স্পষ্টভাবে প্রকাশ করতে হবে । যেহেতু আমাদের লক্ষ্যটি সংখ্যা হ্রাস করা, এছাড়াও যথাসম্ভব ছোট হওয়া উচিত, তাই খ = এন লজিক্যাল পছন্দ।

এটি আমাদেরকে 0,…, n-1 অঙ্কগুলি যতটা সম্ভব ছোট হিসাবে তৈরি করার ব্যবস্থা করে দেয় , যার অর্থ সর্বাধিক উল্লেখযোগ্য সংখ্যাগুলি যথাসম্ভব ছোট রাখতে হবে। যেহেতু প্রথম সংখ্যাটি প্রৌ a ় উপস্থাপনায় 0 হতে পারে না , তাই সর্বনিম্ন সংখ্যাটি
(1) (0) (2) ... (এন-2) (এন-1) n = n এন-1 + 2 এন এন -3 +… + (এন -২) এন + (এন -১) , যা পুনরাবৃত্তভাবে গণনা করে।


6

পাইথন 2, 54 46 বাইট

এটি খুব খুব খুব ! দ্রুত, পুনরাবৃত্তি সমাধান।

n=r=input();k=2
while k<n:r=r*n+k;k+=1
print r

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

কোনও পুনরাবৃত্তি নেই, তাই এটি বড় ইনপুটটির জন্য কাজ করে। এখানে ফলাফল n = 17000(1-2 সেকেন্ড সময় লাগে):

http://pastebin.com/UZjgvUSW


ইনপুট 17000 কত সময় নিয়েছে? আমার মেশিনে এটি 26 সেকেন্ড সময় নেয়, যা জেলি এর 0.9 সেকেন্ডের তুলনায় ধীর বলে মনে হচ্ছে ...
ডেনিস

একইভাবে কিন্তু অন্য উপায়ে তিনটি বাইট কম দামের জন্য:lambda n:n**~-n+sum(i*n**(n+~i)for i in range(2,n))
জোনাথন অ্যালান

2
46 বাইট এবং অনেক দ্রুত:n=r=input();k=2\nwhile k<n:r=r*n+k;k+=1\nprint r
ডেনিস

হ্যাঁ, ল্যাপগুলি পাইথনের বোঝার চেয়ে লুপগুলি কত গতিময় তা আশ্চর্যজনক।
জোনাথন অ্যালান

@ জোনাথান অ্যালান এই কারণটি নয় শক্তিগুলি গণনা করা খুব ধীর গতির, যখন লুপটি কেবল গুণ এবং সংযোজন ব্যবহার করে।
ডেনিস


5

জে, 9 বাইট

#.],2}.i.

@ ডেনিস 'এর উপর ভিত্তি করে পদ্ধতির

ব্যবহার

   f =: #.],2}.i.
   (,.f"0) >: i. 7
1      1
2      2
3     11
4     75
5    694
6   8345
7 123717
   f 17x
49030176097150555672

ব্যাখ্যা

#.],2}.i.  Input: n
       i.  Get range, [0, 1, ..., n-1]
    2}.    Drop the first 2 values, [2, 3, ...., n-1]
  ]        Get n
   ,       Prepend it, [n, 2, 3, ..., n-1]
#.         Convert that to decimal from a list of base-n digits and return

পারমিটেশন ইনডেক্স ব্যবহারের উপর ভিত্তি করে একটি বিকল্প সমাধান রয়েছে। ইনপুট এন দেওয়া হয়েছে , অঙ্কের তালিকা তৈরি করুন [0, 1, ..., n]এবং এন এর সূচক ব্যবহার করে ক্রমটিশনটি সন্ধান করুন, এবং এটিকে বেস- এন সংখ্যাগুলির তালিকা হিসাবে রূপান্তর করুন । জেতে 12 বাইটের সাথে সম্পর্কিত সমাধান

#.]{.!A.i.,]  Input: n
        i.    Make range [0, 1, ..., n-1]
           ]  Get n
          ,   Join, makes [0, 1, ..., n-1, n]
     !        Factorial of n
      A.      Permutation index using n! into [0, 1, ..., n]
  ]           Get n
   {.         Take the first n values of that permutation
              (This is to handle the case when n = 1)
#.            Convert that to decimal from a list of base-n digits and return

এটি নির্মাণ করা আরও ছোট হতে পারে [1,0,2,3,...,n-1]?
জোনাথন অ্যালান

1
@ জোনাথান অ্যালান আমি কোনও উপায় খুঁজে পাচ্ছি না, কিন্তু আমি লক্ষ্য করেছি যে সেগুলির অনুক্রমের সূচকগুলি ( এন -১) হবে!
মাইল

4

রুবি, 37 35 34 বাইট

->n{s=n;(2...n).map{|d|s=s*n+d};s}

প্রদত্ত জবাবটি বেসে nফর্মটি নিয়ে যায় । ব্যবহার10234...(n-1)nn=10উদাহরণ হিসাবে করা:

দিয়ে শুরু n:10

দ্বারা গুণ nএবং 2 যোগ করুন:102

একত্রে nএবং 3 যোগ করুন:1023

ইত্যাদি।

সম্পাদনা: মানচিত্রটি ব্যবহারের চেয়ে কম, মনে হচ্ছে।

সম্পাদনা 2: টিপটির জন্য ধন্যবাদ, এম-ক্রজ্জন!


(2...n)একটি বাইট সংক্ষিপ্ত হবে।
এম-ক্রিজান


3

সিজেএম (9 বাইট)

qi_,X2$tb

অনলাইন ডেমো

ব্যবচ্ছেদ

একথাও ঠিক যে ডিজিটাল বৈচিত্র্য সঙ্গে সবচেয়ে ছোট সংখ্যা nবেস-রূপান্তর দ্বারা পাওয়া যায় [1 0 2 3 ... n-1]বেস n। যাইহোক, দ্রষ্টব্য যে অন্তর্নির্মিত বেস রূপান্তরটির জন্য অঙ্কগুলি সীমাতে থাকা আবশ্যক নয় 0 .. n-1

qi    e# Read integer from stdin
_,    e# Duplicate and built array [0 1 ... n-1]
X2$t  e# Set value at index 1 to n
b     e# Base conversion

নোট করুন যে বিশেষ ক্ষেত্রে n = 1আমরা যা 1 [0] 1 1 tbদিচ্ছি 1 [0 1] bতা পেতে 1


3

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

f n=foldl((+).(*n))n[2..n-1]

ভাঁজের মাধ্যমে হর্নারের পদ্ধতি ব্যবহার করে তালিকায় [n,2,3,...,n-1]বেসে রূপান্তর করে n। এর কম গল্ফযুক্ত সংস্করণ OEIS পৃষ্ঠায় দেওয়া হয়েছে

নিমিকে 3 বাইটের জন্য ধন্যবাদ!


আমি হাস্কেলকে খুব ভাল জানি না, ভাঁজের জন্য fকোনও বৈধ গল্ফ সমাধান হিসাবে ফাংশনটির নামকরণ ( ?) করা দরকার? (এটি ঠিক fকোড পরে রেফারেন্স করা হয় না)
জোনাথন অ্যালান

@ জোনাথান অ্যালান হাস্কেলের ল্যাম্বদা ফাংশনটি \n->fold1...এটি নামকরণের সাথে সাথে দীর্ঘ। আপনি পয়েন্ট-ফ্রি ফাংশন লিখতে পারেন যেখানে সাব-ফাংশনগুলিকে একত্রিত করে ইনপুট ভেরিয়েবলের নাম দেওয়া হয়নি, তবে এখানে তিনটি রেফারেন্স সহ ভয়ঙ্কর হবে n
এক্সএনওর

দুর্দান্ত, ব্যাখ্যার জন্য ধন্যবাদ। হাস্কেল সিনট্যাক্স আমাকে কিছুটা বিভ্রান্ত করে।
জোনাথন অ্যালান

আপনি ব্যবহার করতে foldlএবং এর সাথে শুরু করতে পারেন n:f n=foldl((+).(*n))n[2..n-1]
নিমি

3

05 এ বি 1 ই , 9 বাইট

DL¦¨v¹*y+

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

ব্যাখ্যা

n = 4 উদাহরণস্বরূপ ব্যবহৃত।

D           # duplicate input
            # STACK: 4, 4
 L          # range(1, a)
            # STACK: 4, [1,2,3,4]
  ¦¨        # remove first and last element of list
            # STACK: 4, [2,3]
    v       # for each y in list
     ¹*     # multiply current stack with input
       y+   # and add y
            # STACK, first pass: 4*4+2 = 18
            # STACK, second pass: 18*4+3 = 75

2

সি ++ - 181 55

ব্যবহার করে সেই প্রকৃত শীতল সমাধান পোস্ট করতে চলেছিল <numeric>:

#import <vector>
#import <numeric>
using namespace std;int f(int n){vector<int> v(n+1);iota(v.begin(),v.end(),0);swap(v[0],v[1]);return accumulate(v.begin(),v.end()-1,0,[n](int r,int a){return r*n+a;});}

এবং তারপরে আমি বুঝতে পারলাম এটি সহজ উপায় :

int g(int n){int r=n,j=2;for(;j<n;)r=r*n+j++;return r;}

2

পার্ল 6 ,  34 31  30 বাইট

ওইআইএস পৃষ্ঠায় হাস্কেল উদাহরণ থেকে অনুবাদ করেছেন ।

{(1,0,|(2..^$^n)).reduce: $n×*+*}        # 34
{(1,0,|(2..^$^n)).reduce: $n* *+*}       # 34

{reduce $^n×*+*,1,0,|(2..^$n)}           # 31
{[[&($^n×*+*)]] 1,0,|(2..^$n)}           # 31

{reduce $_×*+*,1,0,|(2..^$_)}            # 30
  • [&(…)] পালা একটি ইন-জায়গা পোতা অপারেটর মধ্যে
  • […]পালাক্রমে উপরে (অথবা ডান থেকে বাম অপারেটর associativity উপর নির্ভর করে) একটি ভাঁজ মধ্যে একটি পোতা অপ দেখানো

সম্প্রসারিত:

{
  reduce

    # declare the blocks only parameter 「$n」 ( the 「^」 twigil )
    # declare a WhateverCode lambda that takes two args 「*」
    $^n × * + *

    # a list that always contains at least (1,0)
    1, 0,
    # with a range slipped in
    |(
      2 ..^ $n # range from 2 up-to and excluding 「$n」
               # it is empty if $n <= 2
    )
}

ব্যবহার:

my &code = {reduce $_×*+*,1,0,|(2..^$_)}

say code 1; # 1
say code 2; # 2
say code 3; # 11
say code 4; # 75
say code 7; # 123717

# let's see how long it takes to calculate a largish value:

my $start-time = now;
$_ = code 17000;
my $calc-time = now;
$_ = ~$_; # 25189207981120412047...86380901260421982999
my $display-time = now;

say "It takes only { $calc-time - $start-time } seconds to calculate 17000";
say "but { $display-time - $calc-time } seconds to stringify"

# It takes only 1.06527824 seconds to calculate 17000
# but 5.3929017 seconds to stringify

2

ব্রেন-ফ্লাক , 84 76 বাইট

8 বাইট গল্ফ করার জন্য গম উইজার্ডকে ধন্যবাদ

(({})<>){(({}[()]))}{}(<{}{}>)((())){{}({<({}[()])><>({})<>}{}{})([][()])}{}

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

ব্যাখ্যা

প্রোগ্রাম থেকে মান পাহাড় জমে 0করার n-1জন্য স্ট্যাক শীর্ষ প্রতিস্থাপন 0এবং 1সঙ্গে 1এবং 0। তারপরে এটি স্ট্যাকের শীর্ষটি দ্বারা গুণ করেn একক করে এবং স্ট্যাকের কেবল একটি মান বাকি না হওয়া পর্যন্ত এটির নীচে মান যুক্ত করে।

মূলত এটি বেসে ক্ষুদ্রতম সংখ্যার জন্য ডিজিটগুলি সন্ধান করে nযা nবিভিন্ন সংখ্যা ( n1 এর জন্য এটি সর্বদা ফর্মের 1023...(n-1)) থাকে contains এটির পরে অঙ্কগুলি এবং বেসটি দেওয়া সংখ্যা গণনা করে।

টীকাবিহীন কোড

(({})<>)       # Pushes a copy of n to the right stack and switches to right stack
{(({}[()]))}{} # While the top of the stack != 0 copy the top of the stack-1
               #   and push it
(<{}{}>)       # Discard the top two values (0 and 1 for n > 1) and push 0
((()))         # Push 1 twice (second time so that the loop is works properly)
{{}            # Loop while stack height > 1
  (            #   Push...
    {<({}[()])><>({})<>}{} # The top value of the stack * n
    {}         #     Plus the value below the top of the stack
  )            #   End push
([][()])}{}    # End loop

আপনি চারটি বাইট সংরক্ষণের {}{}(()(<()>))([][()])সাথে প্রতিস্থাপন করতে পারেন(<{}{}>)([(())][])
পোস্ট রক গার্ফ হান্টার

তারপরে আপনি (<{}{}>)((()))আরও চারটি বাইট সংরক্ষণের সাথে এটি প্রতিস্থাপন করতে পারেন
পোস্ট রক গার্ফ হান্টার



1

পিএইচপি, 78 বাইট

for(;$i<$a=$argn;)$s=bcadd($s,bcmul($i<2?1-$i:$i,bcpow($a,$a-1-$i++)));echo$s;

অনলাইন সংস্করণ

60 বাইট পরীক্ষার ক্ষেত্রে যথাযথতার সাথে কেবল n = 16 অবধি কাজ করে

এন = 144 আইএনএফ এর জন্য

n = 145 এনএএন

for(;$j<$a=$argn;)$t+=($j<2?1-$j:$j)*$a**($a-1-$j++);echo$t;


0

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

ব্যবহার করে না =>

function f(b,n){throw f(b,n>2?--n:1)*b}

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