নতুন আদেশ # 2: আমার পথে ঘুরুন


15

ভূমিকা (উপেক্ষা করা হতে পারে)

সব ধনাত্মক সংখ্যাটিকে নিয়মিত ক্রম (1, 2, 3, ...) স্থাপন করা কিছুটা বিরক্তিকর, তাই না? সুতরাং এখানে সমস্ত ধনাত্মক সংখ্যার ক্রমবিন্যাস (রদবদল) চারপাশে চ্যালেঞ্জগুলির একটি সিরিজ রয়েছে। এটি এই সিরিজের দ্বিতীয় চ্যালেঞ্জ। প্রথম চ্যালেঞ্জটি এখানে পাওয়া যাবে

এই চ্যালেঞ্জের মধ্যে, আমরা প্রাকৃতিক সংখ্যাগুলি পুনরায় সাজানোর জন্য গ্রে কোডগুলি ব্যবহার করি। একটি গ্রে কোড বা "প্রতিবিম্বিত বাইনারি কোড" একটি বাইনারি এনকোডিং এমনভাবে হয় যাতে দুটি ধারাবাহিক মান কেবল একটি বিটের মধ্যে পৃথক হয়। এই এনকোডিং একটি ব্যবহারিক প্রয়োগ এটি ব্যবহার করতে হয় ঘূর্ণমান এনকোডার , অত আমার রেফারেন্স "চালু করুন আমার পথ"

3-বিট বাইনারিতে চিহ্নিত কোণ-পরিমাপকারী ডিভাইসের জন্য রোটারি এনকোডার।

নোট করুন যে এই এনকোডিং কিছুটা স্বাধীনতা ফেলেছে। উদাহরণস্বরূপ, বাইনারি ১১০০ অনুসরণ করে নিম্নলিখিত নিম্নলিখিত চারটি কোড রয়েছে: ১১০১, ১১১০, ১০০০ এবং ০১০. এই কারণেই আমি সর্বনিম্ন, পূর্বনির্ধারিত মান হিসাবে সংজ্ঞায়িত করব যা বাইনারি এনকোডিংয়ে কেবলমাত্র একটি অক্ষর পৃথক করে। এই ক্রমটি A163252 এর সাথে মিলে যায়a(n)

যেহেতু এই একটি "বিশুদ্ধ ক্রম" চ্যালেঞ্জ, কাজের আউটপুট হয় জন্য একটি প্রদত্ত ইনপুট, যেখানে যেমন হয় A163252a(n)na(n)

কার্য

একটি পূর্ণসংখ্যা ইনপুট দেওয়া , আউটপুট পূর্ণসংখ্যা বিন্যাসে ( না বাইনারি বিন্যাসে)।na(n)

a(n) হিসাবে আগে না ঘটায় এমন ন্যূনতম ধনাত্মক পূর্ণসংখ্যা হিসাবে সংজ্ঞায়িত করা হয় যে বাইনারিতে যখন লেখা হয় তখন এবং কেবল একটি বিটের মধ্যে পৃথক হয়।a(n1)a(n)

দ্রষ্টব্য: 1-ভিত্তিক সূচীকরণ এখানে ধরে নেওয়া হয়; আপনি 0-ভিত্তিক সূচক ব্যবহার করতে পারেন, সুতরাং ইত্যাদি ইত্যাদি যদি আপনি এটি ব্যবহার করতে চান তবে আপনার উত্তরে এটি উল্লেখ করুন।a(0)=1;a(1)=3

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

Input | Output
--------------
1     | 1
5     | 4
20    | 18
50    | 48
123   | 121
1234  | 1333
3000  | 3030
9999  | 9997

বিধি

  • ইনপুট এবং আউটপুটটি পূর্ণসংখ্যা হয় (আপনার প্রোগ্রামটি কমপক্ষে 1 অবধি 32767 এ ইনপুট এবং আউটপুট সমর্থন করে)
  • অবৈধ ইনপুট (0, ভাসমান, স্ট্রিং, নেতিবাচক মান ইত্যাদি) অনির্দেশিত আউটপুট, ত্রুটি বা (আন) সংজ্ঞায়িত আচরণের দিকে পরিচালিত করতে পারে। ইন A163252 , এই চ্যালেঞ্জ জন্য 0. হিসাবে সংজ্ঞায়িত করা হয়, আমরা এই উপেক্ষা করা হবে।a(0)
  • ডিফল্ট আই / ও বিধি প্রযোজ্য।
  • ডিফল্ট লুফোলগুলি নিষিদ্ধ।
  • এটি , তাই বাইটে সংক্ষিপ্ত উত্তরগুলি জিতে

চূড়ান্ত নোট

নিম্নলিখিত সম্পর্কিত (তবে সমান নয়) পিপিএন্ডসিজি প্রশ্নগুলি দেখুন:

উত্তর:


1

স্ট্যাক্স , 19 17 বাইট

êÑ{╚α8è╙mc┼σ▀»É▲ü

এটি চালান এবং এটি ডিবাগ করুন

হার্ডকডযুক্ত বিট সূচক পুনরাবৃত্তির কারণে নির্দিষ্ট ডোমেনের পরে এটি কোনও সময়ে কাজ বন্ধ করে দেয়। (32767)

আনপ্যাকড, নিরবচ্ছিন্ন এবং মন্তব্য করা হয়েছে, এটি দেখতে এটির মতো দেখাচ্ছে।

z0,         push an empty array, literal zero, and the input, in that order
             - the zero represents the last calculated value in the sequence
             - the array contains all the previous ones
D           repeat the rest of the program n times (from input)
  +         append the last calculated value to the array
  17r       [0 .. 16] (these are the bit indices necessary to cover the input range)
  {|2nH|^m  calculate candidate values; previous value with each of these bits toggled 
  n-        remove all values previously calculated
  |m        keep the minimum candidate remaining

এটি চালান


আপনি সংক্ষিপ্ততম 05AB1E উত্তরের পিছনে 1 বাইট আপনি এই আরও অনুকূলিতকরণ পরিকল্পনা? তা না হলে আমি কেভিন এর উত্তর গ্রহণ করব ...
agtoever

1
আমার যদি সুযোগ থাকে তবে আমি আজ এটির জন্য কাজ করব, পরের 14 ঘন্টার মধ্যে।
পুনরাবৃত্তি

ঠিক আছে. আমি এটি অন্য একদিন খোলা রাখব। শুভকামনা!
আগস্ট

@ আগটোয়ার: ধন্যবাদ আমি এখন সম্পন্ন।
পুনরাবৃত্তির

সাবাশ! তুমি জিতেছ! অভিনন্দন!
agtoever

4

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

1-ইন্ডেক্স।

n=>{for(o=p=[k=1];o[k]|~-(i=p^k)&i?k++:k=o[p=k]=!!n--;);return p}

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

মন্তব্য

n => {                  // n = index of requested term
  for(                  // for loop:
    o =                 //   o = storage object for the terms of the sequence
    p =                 //   p = last term found in the sequence
      [k = 1];          //   k = current term
    o[k] |              //   if k was already encountered
    ~-(i = p ^ k) & i ? //   or (p XOR k) has more than 1 bit set:
      k++               //     increment k
    :                   //   else:
      k = o[p = k]      //     set o[k], set p to k
        = !!n--;        //     stop if n is equal to 0 or set k to 1; decrement n
  );                    // end of for()
  return p              // return p
}                       // end

টিআইওতে, আমি এন> 24 1024 এর জন্য একটি স্ট্যাক ওভারফ্লো পেয়েছি। আবু অন্যান্য পরিবেশে টোট কীভাবে মোকাবেলা করে সে সম্পর্কে কোনও পরামর্শ? বিধি: " আপনার প্রোগ্রামটি কমপক্ষে ৩২7 167 এর তাত্ত্বিক পরিসরে ইনপুট এবং আউটপুটকে কমপক্ষে সমর্থন করা উচিত "
20

1
@ আগত আমি এটিকে পুনরাবৃত্ত সংস্করণে আপডেট করেছি।
আর্নাউল্ড

4

জেলি , 26 20 বাইট

ṀBLŻ2*^1ị$ḟ⁸Ṃ;
0Ç⁸¡Ḣ

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

একটি সম্পূর্ণ প্রোগ্রাম যা একক যুক্তি হিসাবে n নেয়। সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে। এছাড়াও মনে রাখবেন যে প্রয়োজন না হলেও এটি n = 0 পরিচালনা করে।

ব্যাখ্যা

সহায়ক লিঙ্ক: পরের শব্দটি অনুসন্ধান করুন এবং প্রেরিত করুন

Ṁ              | maximum of list so far
 B             | convert to binary
  L            | number of binary digits
   Ż           | 0..above number
    2*         | 2 to the power of each of the above
      ^        | exclusive or with...
       1ị$     | ... the most recent term in the list so far
          ḟ⁸   | filter out anything used already
            Ṃ  | find the minimum
             ; | prepend to existing list

প্রধান লিঙ্ক

0              | start with zero
 Ç             | call the above link
  ⁸¡           | and repeat n times
    Ḣ          | take the last term added

3

জাভা (জেডিকে) , 142 138 124 123 132 130 98 বাইট

n->{int s[]=new int[9*n],j,k=0;for(;n-->0;s[k=j]++)for(j=0;s[++j]>0|n.bitCount(j^k)>1;);return k;}

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


1
আমি আশঙ্কা করছি আমদানিগুলি বাইট-কাউন্টে অন্তর্ভুক্ত করতে হবে। তবে আপনি import java.util.*;+ Set s=new HashSet();টু গল্ফ করতে পারেন var s=new java.util.HashSet();। উপরন্তু, বাকী golfed করা যেতে পারে: Integer i=0,j,k=0;for(;i++<n;s.add(k=j))for(j=0;s.contains(++j)|i.bitCount(j^k)>1;);return k;। তবুও সুন্দর উত্তর, সুতরাং আমার কাছ থেকে +1 করুন। :)
কেভিন ক্রুইজসেন 20'19

1
এর Stackচেয়ে আরও 2 টি বাইট ব্যবহার করে সংরক্ষণ করা হয়েছে HashSet। অনেক ধীর কিন্তু কাজ!
ড্যানিয়েল উইডিস

1
হে(এন)হে(এনএন)

2
আমার প্রথম মন্তব্যে প্রস্তাবিত দ্বিতীয় গল্ফটি দিয়ে আপনি এখনও এটি 126 বাইটে গল্ফ করতে পারেন। :)
কেভিন ক্রুইজসেন 20'19


2

পাইথন 2 , 81 বাইট

1-ভিত্তিক সূচক

l=[0];p=0
exec"n=0\nwhile(p^n)&(p^n)-1or n in l:n+=1\np=n;l+=p,;"*input()
print p

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


পাইথন 2 , 79 বাইট

এটি অনেক সময় নেয় (9999 স্থানীয়ভাবে 7 মিনিটের জন্য চালানোর পরে শেষ হয়নি)

l={0};p=0;n=input()
exec'p=min({p^2**k for k in range(n)}-l);l|={p};'*n
print p

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


1
সর্বাধিক ইনপুট 32767 সমর্থিত নয় (ডিফল্ট পুনরাবৃত্তি গভীরতা সিস্টেম-নির্ভর নয়)।
এরিক আউটগল্ফার

এমনকি প্রদত্ত পরীক্ষার কেস 9999 সমর্থিত নয়। :)
ড্যানিয়েল উইডিস

@ এরিকথ আউটগল্ফার এটি একটি পুনরাবৃত্ত পদ্ধতির কাছে পরিবর্তন করেছে, সম্ভবত এখনও টিআইও-তে সময় শেষ করে না, তবে স্থানীয়ভাবে ঠিকঠাক runs
ovs

@ ওহস, একাকী সময়সত্তার কোনও বিষয় নেই।
এরিক দি আউটগল্ফার

শান্ত! আমি এটি মাত্র n = 9999 এর জন্য চেষ্টা করেছি এবং এটি প্রায় এক ঘন্টা পরে সাফল্যের সাথে শেষ হয়েছে। +1 টি। হ্যাঁ! ;-)
মার্চ'১৯ '



1

কাঠকয়লা , 65 বাইট

≔⁰θFN«⊞υθ≔¹ηW¬‹θ⊗η≦⊗ηW∧›η¹∨¬&θη№υ⁻θη≧÷²ηW№υ⁻|θη&θη≦⊗η≔⁻|θη&θηθ»Iθ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

≔⁰θ

ফলাফলটি 0 তে শুরু করুন।

FN«

লুপ nবার।

⊞υθ

পূর্ববর্তী ফলাফলটি সংরক্ষণ করুন যাতে আমরা এটি আবার ব্যবহার না করি।

≔¹ηW¬‹θ⊗η≦⊗η

পূর্বের ফলাফলের সর্বোচ্চ বিটটি সন্ধান করুন।

W∧›η¹∨¬&θη№υ⁻θη≧÷²η

সেই বিটটি 1 এর চেয়ে বেশি, বিটটি পূর্বের ফলাফলটিতে সেট করা থাকলে, ফলাফলটি অদেখা ফলাফল কিনা তা দেখতে সেই বিটটি বিয়োগ করে চেষ্টা করুন। এটি সুনিশ্চিত করে যে সম্ভাব্য ফলাফলগুলি ক্রম বর্ধনের ক্রমে চেষ্টা করা হয়েছে।

W№υ⁻|θη&θη≦⊗η

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

≔⁻|θη&θηθ

এটির সাথে বিটটি XORing করে ফলাফল আপডেট করুন।

»Iθ

লুপ শেষে চূড়ান্ত ফলাফল আউটপুট।


1

05 এ বি 1 ই , 21 20 18 বাইট

ÎFˆ∞.Δ¯θy^bSO¯yå_*

খুব অদক্ষ, সুতরাং ইনপুট যত বড় হবে ফলাফল পেতে আরও বেশি সময় লাগে। 0যদিও ইনপুট জন্য কাজ করে ।

এটি অনলাইনে চেষ্টা করুন বা প্রথম যাচাই করুনএনপদ

ব্যাখ্যা:

Î                # Push 0 and the input
 F               # Loop the input amount of times:
  ˆ              #  Pop the current number and add it to the global_array
  ∞.Δ            #  Inner loop starting at 1 to find the first number which is truthy for:
     ¯θy^        #   XOR the last number of the global_array with the loop-number `y`
         b       #   Convert it to binary
          SO     #   Sum it's binary digits
     ¯yå_        #   Check if the loop-number `y` is NOT in the global_array yet
            *    #   Multiply both (only if this is 1 (truthy), the inner loop will stop)
                 # (after the loops, output the top of the stack implicitly)

1

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

import Data.Bits
(u!n)0=n
(u!n)m|q<-minimum[x|r<-[0..62],x<-[xor(2^r)n],notElem x u]=(n:u)!q$m-1
[]!0

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

কেবলমাত্র এর জন্য আমদানি করা লজ্জাজনক বলে মনে হচ্ছে xorতবে আমি এখনও খুব ভাল কাজ খুঁজে পাইনি। আমি আরও ভাবছি লুপটি প্রকাশ করার আরও ভাল কোনও উপায় আছে কিনা।


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