প্রতিটি সম্ভাব্য চক্র দৈর্ঘ্য


21

কোনও ফাংশন (বা প্রোগ্রাম) যা ইনপুট নেয় এবং আউটপুট সরবরাহ করে তাকে চক্র বলে বলা যেতে পারে যদি বার বার তার নিজের আউটপুটে ফাংশনটি কল করে অবশেষে আসল সংখ্যায় পৌঁছায়। উদাহরণস্বরূপ, নিম্নলিখিত ফাংশনটি গ্রহণ করুন:

Input:  n    1 2 3 4 5 6
Output: f(n) 5 7 1 3 4 9

আমরা শুরু করেন n=1, f(n)=5, f(f(n))=f(5)=4, f(f(f(n)))=f(4)=3, f(f(f(f(n))))=f(3)=1

এই লেখা আছে (1 5 4 3)। যেহেতু এই লুপটিতে 4 টি স্বতন্ত্র সংখ্যা রয়েছে তাই এটি দৈর্ঘ্যের একটি চক্র।


আপনার চ্যালেঞ্জটি হ'ল এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যাতে প্রতিটি সম্ভাব্য দৈর্ঘ্যের চক্র থাকে। অর্থাৎ, দৈর্ঘ্য 1, দৈর্ঘ্য 2 এবং এর মতো আরও একটি চক্র থাকতে হবে।

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


বিশদ: STDIN, STDOUT, ফাংশন আর্গুমেন্ট, রিটার্ন ইত্যাদি সহ যে কোনও স্ট্যান্ডার্ড ইনপুট / আউটপুট সিস্টেমের অনুমতি রয়েছে স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

আপনার ডেটা ধরণের সীমাবদ্ধতা সম্পর্কে আপনাকে চিন্তা করার দরকার নেই - উদাহরণস্বরূপ, উপরের বৈশিষ্ট্যগুলির কেবলমাত্র একটি intবা floatকোনও মান রাখতে পারে এমন অনুমানের অধীনে থাকা দরকার ।

ইতিবাচক পূর্ণসংখ্যার নয় এমন ইনপুটগুলিতে ফাংশনটির আচরণে কোনও বিধিনিষেধ নেই এবং সেই ইনপুট / আউটপুটগুলি উপেক্ষা করা হবে।


স্কোরিং হ'ল কোড গল্ফ বাইটস, সংক্ষিপ্ততম কোড জয়।


"অবশ্যই দৈর্ঘ্য 1, দৈর্ঘ্য 2 এবং একটি আরও একটি চক্র থাকতে হবে" এটিকে কি "হিসাবে ব্যাখ্যা করা উচিত" সেখানে কমপক্ষে 1 দৈর্ঘ্যের একটি চক্র থাকতে হবে , কমপক্ষে 2 দৈর্ঘ্যের একটি চক্র থাকতে হবে এবং "তাই" বা "অবশ্যই হবে" হতে ঠিক দৈর্ঘ্য 1 একটি চক্র, দৈর্ঘ্য 2 এক, ইত্যাদি "।
বকুরিউ

@ বাকুরিউ প্রতিটি ধনাত্মক দৈর্ঘ্যের কমপক্ষে একটি চক্র।
isaacg

উত্তর:


11

পাইথ, 11 8 বাইট

.<W-0zz1

আমার আগের উত্তরের চেয়ে অনেক বেশি বিরক্তিকর।

প্রতিটি সংখ্যায় নিজের কাছে 0 ডিজিটের মানচিত্র রয়েছে। এই সংখ্যার সাথে অন্য যে কোনও সংখ্যার মানচিত্র 1 দিয়ে ঘোরানো হয়েছে So সুতরাং উদাহরণস্বরূপ:

1 -> 1
10 -> 10
15 -> 51 -> 15
104 -> 104
123 -> 231 -> 312 -> 123

8

পাইথন 2, 56 55 54 বাইট

n=input()
a=b=1
while a+b<=n:a+=b;b+=1
print(n+~a)%b+a

এখানে প্রথম 21 আউটপুট রয়েছে:

[1, 3, 2, 6, 4, 5, 10, 7, 8, 9, 15, 11, 12, 13, 14, 21, 16, 17, 18, 19, 20]

প্যাটার্নটি সুস্পষ্ট যদি আমরা তালিকাটিকে এভাবে কিছু অংশে ভেঙে দেই:

 1    2  3    4  5  6    7  8  9  10    11  12  13  14  15    16  17  18  19  20  21
[1]  [3, 2]  [6, 4, 5]  [10, 7, 8, 9]  [15, 11, 12, 13, 14]  [21, 16, 17, 18, 19, 20]

জঘন্য, আমি যে প্যাটার্নটির জন্য যাচ্ছিলাম এটি কিন্তু বন্ধ ফর্মের সাথে।
orlp

1
আকর্ষণীয় .. একটি মানগুলি A000124 অনুক্রম অনুসরণ করে । তবে আমি অনুমান করি আপনি এটি ইতিমধ্যে জানতেন: পি
কেড

মনে রাখবেন এই ক্রমটি oeis.org/A066182
orlp

8

পাইথ, 25 বাইট

+hK/*J/h@h*8tQ2 2tJ2%-QKJ

এটি @ Sp3000 এর মতো একই ক্রম তবে বন্ধ ফর্মের সাথে। বন্ধ ফর্মটি হ'ল:

এম (এন) = তল ((1 + বর্গক্ষেত্র (1 + 8 * (এন - 1))) / 2) বি (এন) = এম (এন) * (এম (এন) - 1) / 2 f (n) = B (n) + ((n - B (n) + 1) মোড এম (এন))


5

পাইথন 3, 40 বাইট

n=input();print([n[1:]+n[0],n]['0'in n])

প্রতিটি সংখ্যায় নিজের কাছে 0 ডিজিটের মানচিত্র রয়েছে। এই সংখ্যার সাথে অন্য যে কোনও সংখ্যার মানচিত্র 1 দিয়ে ঘোরানো হয়েছে So সুতরাং উদাহরণস্বরূপ:

1 -> 1
10 -> 10
15 -> 51 -> 15
104 -> 104
123 -> 231 -> 312 -> 123

1
Déjà VU! এটিকে দুটি ভাষায় দেখতে শীতল!
ডেনহাম কোট

3

রুবি, 22 + 1 = 23

কমান্ড-লাইন পতাকা সহ -p, চালান

~/(.)(.?)/
$_=$1+$'+$2

যখন ইনপুট হিসাবে কোনও সংখ্যার একটি স্ট্রিং উপস্থাপনা দেওয়া হয় (কোনও পেছনে নতুন লাইন থাকে না), এটি প্রথম অঙ্কটিকে ধ্রুবক করে রাখে, তারপরে অবশিষ্ট বামদিকে ঘোরে, তাই 1234হয়ে যায় 1342

এটি দিয়ে 21 টি অক্ষরে হ্রাস করা যেতে পারে $_=$1+$'+$2if/(.)(.)/তবে একটি সতর্কতা প্রিন্ট করে।


3

রুবি, 16 + 1 = 17

কমান্ড-লাইন পতাকা সহ -p, চালান

$_=$_[/.0*$/]+$`

এটি আমার অন্যান্য উত্তরের চেয়ে আরও জটিল কাজ, তবে এটি আরও গল্ফযোগ্য হতে পারে (এবং নতুন লাইনের পিছনে সহনীয়)। এটি ইনপুটটির সর্বশেষ ননজারো অঙ্কটি যোগ করে যেকোনো পিছনে শূন্যগুলি নিয়ে যায় এবং এটি সংখ্যার শুরুতে নিয়ে যায়। তাই 9010300হয়ে যায় 3009010। এন নঞ্জেরো অঙ্ক সহ যে কোনও সংখ্যা এন-দৈর্ঘ্যের চক্রের অংশ হবে।

ইনপুটটি STDIN এর মাধ্যমে যে কোনও বেসের একটি স্ট্রিং, আউটপুট সেই বেসের একটি স্ট্রিং।


2

পাইথন, 43

Sp3000 এর ফাংশনের বিপরীত , যাও recursively বাস্তবায়িত।

f=lambda n,k=1:n>k and k+f(n-k,k+1)or n%k+1

ফাংশনটি একটি একচক্র এবং তারপরে একটি দ্বিচক্রের পরে একটি তিন-চক্র হয় ...

(1)(2 3)(4 5 6)(7 8 9 10)(11 12 13 14 15)...

অপারেশন সংখ্যার উপর n%k+1এক- kসাইকেল হিসাবে কাজ করে 1..k। উপযুক্ত জন্য kব্যবহার করার জন্য, দ্বারা শিফট সবকিছু নিচে k=1, তারপর k=2যতক্ষণ না, ইত্যাদি, n<=k


2

পাইথ, 15 বাইট

এখন পর্যন্ত সংক্ষিপ্ত উত্তর যা স্ট্রিং অপারেশনের পরিবর্তে সংখ্যাসূচক অপারেশন ব্যবহার করে।

.|.&Q_=.&_=x/Q2

    Q                input
            /Q2      input div 2
           x   Q     that XOR input
          =          assign that to Q
         _           negate that
       .&       Q    that AND Q
      =              assign that to Q
     _               negate that
  .&                 input AND that
.|               Q   that OR Q

বাইনারি প্রতিনিধিত্বের উপর এই ক্রিয়াকলাপটির প্রভাবটি 1 এর ডানদিকের ব্লকটি পরবর্তী 0 এর মধ্যে প্রসারিত করা; বা যদি 0 না থাকে তবে এটিকে একক 1 এ পুনরায় সেট করতে:

10010110100000 ↦  
10010110110000 ↦  
10010110111000 ↦  
10010110111100 ↦  
10010110111110 ↦  
10010110111111 ↦
10010110100000  

পাইথ, 26 বাইট, মজার রূপ

.|.&Q_h.&/Q2+Qy=.&/Q2_h.|y

    Q                           input
         /Q2                    input div 2
             Q                  input
                  /Q2           input div 2
                         yQ     twice input
                       .|  Q    that OR input
                     _h         NOT that
                .&              (input div 2) AND that
               =                assign that to Q
              y                 twice that
            +                   input plus that
       .&                       (input div 2) AND that
     _h                         NOT that
  .&                            input AND that
.|                          Q   that OR Q

1 সেকেন্ডের সমস্ত ব্লকে এক সাথে উপরের ক্রিয়াকলাপটি সম্পাদন করে , কেবলমাত্র ডানদিকে নয়। এখনও কেবল বিটওয়াইজ এবং গাণিতিক ক্রিয়াকলাপগুলি ব্যবহার করে।

1000010001001 ↦
1100011001101 ↦
1110011101001 ↦
1111010001101 ↦
1000011001001 ↦
1100011101101 ↦
1110010001001 ↦
1111011001101 ↦
1000011101001 ↦
1100010001101 ↦
1110011001001 ↦
1111011101101 ↦
1000010001001


1

ব্র্যাচল্যাগ , 5 বাইট

∋0&|↺

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

@ Orlp এর পাইথ উত্তরটির বন্দর। সহজ এবং ঝরঝরে বেরিয়ে আসে:

∋0    % If input contains a 0 (since input is a single number, "contains" ∋ treats it as an array 
      %   of its digits, so this means "if any of input's digits are 0")
&     % Then output is the input
|     % Otherwise
↺     % Circularly shift the input once, and unify that with the output

আমি মূলত @ Sp3000 এর পাইথন সমাধানটি পোর্ট করতে চেয়েছিলাম, তবে এটি পুরো 23 বাইট নিয়ে গেছে :

⟧∋B-₁⟦++₁A≤?;A--₁;B%;A+

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


0

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

f=(n,i=1,j=1)=>n>j?f(n,++i,j+i):n++<j?n:n-i

0

মতলব (189)

  function u=f(n),if(~n|n==1)u=n;else,u=n;y=factor(n);z=y(y~=2);if ~isempty(z),t=y(y~=max(y));if isempty(t),u=y(end)*2^(nnz(y)-1);else,g=max(t);e=primes(g*2);u=n/g*e(find(e==g)+1);end,end,end

  • কাজ:

    তার প্রধান গুণাবলী অনুসারে যেকোন পূর্ণসংখ্যার মানচিত্র, যদি সংখ্যাটি শূন্য হয় বা 2 বা 1 তে নির্ধারণ করা হয় তবে সংখ্যাটি নিজের সাথে ম্যাপ করা হয়, অন্যথায় আমরা এই সংখ্যার সবচেয়ে বড় মৌলিক উপাদানটি বেছে নিই, তবে আমরা অবশিষ্ট বিভিন্ন মৌলিক উপাদানগুলি নিকটতম দ্বারা বৃদ্ধি করি বৃহত্তর মৌলিক ফ্যাক্টর যতক্ষণ না আমরা এই সংখ্যায় পৌঁছাচ্ছি biggest_prime^nযেখানে nসমস্ত কারণের সমস্ত ক্ষতিকারকের যোগফল রয়েছে, একবার যখন আমরা এই পরিমাণে পৌঁছে যাই, আমরা ফিরে max_prime*2^(n-1)যাই এবং আমরা আবার একই চক্রটি পুনরুত্পাদন করি।


0

মতলব (137)

  function u=h(n),if(~n|n==1)u=n;else,u=n;y=factor(n);z=y(y~=2);if~isempty(z),e=nnz(y);f=nnz(z);if(~mod(e,f)&e-f)u=n/2^(e-f);else,u=u*2;end

  • কিছুটা অনুরূপ দৃষ্টিভঙ্গি, ধীরে ধীরে যে কোনও সংখ্যাকে {0,1,2 ^ n to এর সমান নয়, 2যতক্ষণ না আমরা এমন কোনও ঘাতকের উপর ঝাঁপিয়ে পড়ি যতক্ষণ না 2অন্যান্য মৌলিক উপাদানগুলির সংখ্যার যোগফল দ্বারা বিভাজ্য। তারপরে আমরা ভাগ করে চক্রের শুরুতে চলে যাই 2^(sum of exponents of other primes)। অন্যান্য numbes তাদের নিজেরাই ম্যাপ করা হয়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.