বারবার 2 নম্বর যুক্ত করে যে কোনও সংখ্যা তৈরি করুন


14

আপনাকে দুটি 16 বিট রেজিস্টার সহ একটি মেশিন দেওয়া হয়েছে, xএবং y। নিবন্ধগুলি আরম্ভ করা হয় x=1এবং y=0। মেশিনটি কেবলমাত্র অপারেশন করতে পারে 65৫৫36 addition সংযোজন।

  • x+=y- xদ্বারা প্রতিস্থাপিত হয় (x + y) mod 65536; yঅপরিবর্তিত
  • y+=x - একইভাবে y
  • x+=x- xদ্বারা প্রতিস্থাপিত হয় 2x mod 65536; বৈধ শুধুমাত্র যদি xহয়
  • y+=y - একইভাবে y

লক্ষ্যটি হ'ল নিবন্ধগুলির মধ্যে একটিতে পূর্ব নির্ধারিত নম্বর ( xবা হয় y) get

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

আউটপুট প্রোগ্রামটি সর্বোত্তম থেকে 100% প্লাস 2 ধাপ পর্যন্ত হতে পারে। এটি হ'ল, যদি সংখ্যার সংক্ষিপ্ততম প্রোগ্রামটির জন্য nপদক্ষেপ থাকে তবে আপনার সমাধানটি আর বেশি হতে পারে না 2n+2। এই বিধিনিষেধটি "খুব সহজ" সমাধানগুলি এড়ানো (উদাহরণস্বরূপ 1, 2, 3, ... গণনা করা) তবে সম্পূর্ণ অপ্টিমাইজেশনের প্রয়োজন নেই; আমি আশা করি যে সংক্ষিপ্ততম প্রোগ্রামটি সন্ধান করা সবচেয়ে সহজ তবে এটি নিশ্চিত হতে পারে না ...

উদাহরণস্বরূপ: ইনপুট = 25. আউটপুট:

y+=x
x+=y
x+=y
x+=x
x+=x
x+=x
y+=x

অন্য উদাহরণ: যে কোনও ফাইবোনাকির সংখ্যার জন্য, আউটপুটটিতে এই বিকল্প বিন্যাস রয়েছে। ইনপুট = 21 এর জন্য আউটপুট

y+=x
x+=y
y+=x
x+=y
y+=x
x+=y
y+=x

সংক্ষিপ্ততম কোড (বাইটগুলিতে পরিমাপ করা) বিজয়।

(এই ধাঁধাটি আমাকে সম্প্রতি তৈরি করতে হবে এমন একটি 16-বিট প্রসেসরের জন্য কিছু কোড দ্বারা অনুপ্রাণিত হয়েছিল)

পিএস আমি ভাবছি - কোন সংখ্যাটির জন্য অনুকূল প্রোগ্রামটি দীর্ঘতম?


9
কৌতূহলের বাইরে x+=xকেবল বৈধ হলেই কেন বৈধ x? সংক্ষিপ্ততম প্রোগ্রামের জন্যও আমি মনে করি বিএফএস এর মতো কিছু কাজ করতে পারে।
Sp3000

লক্ষ্যে পৌঁছানোর পরে, কেউ পরবর্তী টার্গেট নম্বরটিতে যেতে চাইবে; যেকোন লক্ষ্যে পৌঁছানোর সম্ভাবনা থাকতে হলে এর একটিও সংখ্যাকে বিজোড় করতে হয়। আমি অবিচ্ছিন্ন জটিলতা এড়াতে লক্ষ্যগুলি অবিরাম প্রবাহ করতে চাইনি, তবে আত্মা হ'ল এই প্রবাহকে অনুমতি দেওয়া ...
anatolyg

আমি পদক্ষেপের সংখ্যার উপর বিধিনিষেধ পরিবর্তন করেছি, সুতরাং লক্ষ্য সংখ্যা 0 বা 1 এর জন্য আউটপুট প্রোগ্রামটি খালি থাকার দরকার নেই।
অ্যানাটলিগ

3
যদি x+=xকেবলমাত্র সমানদের জন্যই কাজ করে তবে x25 ডাবল 3 এর ইনপুটটির উদাহরণ কীভাবে আসবে?
বিসিএসবি 1001

উত্তর:


2

সিজেম, 31

@ টোবিয়ার জবাবের মতো , আমার অ্যালগরিদমটিও নির্লজ্জভাবে @ সিএম চকের উত্তর দ্বারা অনুপ্রাণিত হয়ে চুরি হয়ে গেছে । তবে, কালো জাদুটি সিজেএমে চালিত করে আমি অ্যালগরিদমের আরও ছোট বাস্তবায়ন করতে পেরেছি।

এখানে চেষ্টা করুন।

Golfed:

qi{_4%!:X)/X!-'xX+"
y+="@}h;]W%`

Ungolfed:

qi          "Read input and convert to integer.";
{           "Do...";
  _4%!:X    "Assign (value mod 4 == 0) to X.";
  )/X!-     "If X, divide value by 2. If not X, decrement value.";
  'xX+      "If X, put 'y' on the stack. If not X, put 'x' on the stack.";
  "
y+="        "Put '\ny+=' on the stack.";
  @         "Rotate top 3 elements of stack left so the value is on top.";
}h          "... while value is not zero.";
;           "Discard zero value on stack.";
]W%         "Collect stack into array and reverse.";

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


65৫৫36 mod মোড অপসারণের একটি আকর্ষণীয় বিষয় I আমি মনে করি আপনি একটি ভাল ক্ষেত্রে তৈরি করেছেন যে "পূর্বনির্ধারিত নম্বর" অবশ্যই 0-65535 এর মধ্যে হওয়া উচিত।
সিসাক

8

পার্ল 107 97

প্রথম পোস্ট, তাই এখানে যায়।

sub h{($i)=@_;return if(($i%=65536)==0);($i%4==0)?do{h($i/2);say"y+=y";}:do{h($i-1);say"y+=x";}}

যা রেজিস্টার সংযোজনের সমস্ত মানদণ্ডের সাথে মানানসই, তবে আমার উত্তরটি সর্বদা পদক্ষেপের সর্বোত্তম সংখ্যার 2n + 2 এর মধ্যে ছিল কিনা তা দেখার জন্য আমি একটি বিস্তৃত চেক পরিচালনা করিনি। যদিও এটি প্রতিটি ফিবোনাচি সংখ্যার সীমাবদ্ধতার মধ্যে রয়েছে।

এখানে আরও বিস্তারিত ভাঙ্গন

sub h{                           # Declare the subroutine, it should be called referencing an integer value
   ($i)=@_;                      # Assign the i variable to the integer used in the call
   return if(($i%=65536)==0);    # Check for base condition of called by 0, and enforce modulo from the start.
   ($i%4==0) ?                   # If the value passed is even, and will result in an even number if we halve it
   do{h($i/2);say"y+=y";}        # Then do so and recurse 
   :do{h($i-1);say"y+=x";}       # Otherwise "subtract one" and recurse
}                                # Note that the print statements get called in reverse order as we exit.

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

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

sub h{($i)=@_;return if(($i%=65536)==0);($i%2==0)?do{h($i/2);say"y+=y";}:do{h($i-1);say"y+=x";}}

সংযোজন শুরু করুন:

সত্যিই এই সমস্যাটি পছন্দ হয়েছে এবং আমি গত কয়েক সপ্তাহ ধরে এটিকে বন্ধ করে দিচ্ছি। ভেবেছিলাম আমি আমার ফলাফল পোস্ট করব।

কিছু সংখ্যা:

একটি অনুকূল সমাধান সন্ধানের জন্য একটি বিএফএস অ্যালগরিদম ব্যবহার করে, প্রথম 2 ^ 16 সংখ্যায় কেবল 18 সংখ্যা রয়েছে যার জন্য 23 পদক্ষেপ প্রয়োজন require তারা হ'ল 58558, 59894, 60110, 61182, 61278, 62295, 62430, 62910, 63422, 63462, 63979, 64230, 64314, 4486, 64510, 64698, 64854, 65295।

উপরে বর্ণিত পুনরাবৃত্তির অ্যালগরিদম ব্যবহার করে, 45 টি ক্রিয়াকলাপে পৌঁছনোর জন্য "সবচেয়ে কঠিন" সংখ্যাটি 65535 35 (65534 লাগে 44, এবং সেখানে 14 টি সংখ্যা রয়েছে যা 43 টি পদক্ষেপ নেয়) 65535 এছাড়াও সর্বোত্তম থেকে সবচেয়ে বড় প্রস্থান, 45 বনাম 22 23 23 পদক্ষেপের পার্থক্য 2n + 1। (মাত্র তিনটি সংখ্যা 2n: 65534, 32767, 32751 এ আঘাত করেছে।) তুচ্ছ (শূন্য-পদক্ষেপ) কেসগুলি বাদ দিয়ে, নির্ধারিত পরিসীমা ছাড়াই, পুনরাবৃত্তির পদ্ধতিটি সর্বোত্তম সমাধানের গড় প্রায় 1.4 গুন গড় করে।

নীচের লাইন: 1-2 ^ 16 সংখ্যার জন্য, পুনরাবৃত্তির অ্যালগোরিদম কখনই 2n + 2 এর সংজ্ঞায়িত প্রান্তিকিকে অতিক্রম করে না, সুতরাং উত্তরটি বৈধ। আমি সন্দেহ করি যে এটি বৃহত্তর রেজিস্টার / আরও বিটগুলির জন্য সর্বোত্তম সমাধান থেকে খুব দূরে চলে যেতে শুরু করবে।

আমি বিএফএস তৈরি করতে যে কোডটি ব্যবহার করেছি তা হ'ল ম্লান, মেমরি নিবিড়, মন্তব্য করা হয়নি, এবং বেশ ইচ্ছাকৃতভাবে অন্তর্ভুক্ত করা হয়নি। সুতরাং ... আপনি আমার ফলাফল বিশ্বাস করতে হবে না, কিন্তু আমি তাদের উপর বেশ আত্মবিশ্বাসী।


একটি বি-বিএসএস সমাধান, দুর্দান্ত!
অ্যানাটোলিগ

আমি মনে করি এমনকি সবচেয়ে প্যাথলজিকাল ক্ষেত্রেও আপনি 4 এর একটি ফ্যাক্টরের মধ্যেই থাকবেন, সম্ভবত আরও ভাল (যেহেতু আমি কেবলমাত্র অনুকূল সমাধানের জন্য একটি নিম্ন সীমাবদ্ধ সম্পর্কে জানি)। যা এখনও বেশ ভাল।
যৌক্তিক

7

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

def S(n):
 q=[(1,0,"")];k=65536
 while q:
  x,y,z=q.pop(0)
  if n in{x,y}:print(z);return
  q+=[((x+y)%k,y,z+"x+=y\n"),(x,(x+y)%k,z+"y+=x\n")]+[(2*x%k,y,z+"x+=x\n")]*(~x&1)+[(x,2*y%k,z+"y+=y\n")]*(~y&1)

(কয়েকটি বাইটের জন্য @ রেয়ালালিসকে ধন্যবাদ)

এখানে একটি চূড়ান্ত প্রাথমিক সমাধান। আমি আশা করি আমি শেষ লাইনটি আরও ভালভাবে গল্ফ করতে পারতাম তবে আমি বর্তমানে ধারণার বাইরে রয়েছি। সাথে কলS(25)

প্রোগ্রামটি কেবল কোনও ক্যাশেবিহীন একটি সাধারণ বিএফএস করে, তাই খুব ধীর। S(97)কিছু নমুনা আউটপুট জন্য এখানে :

y+=x
x+=y
x+=x
x+=x
x+=x
x+=x
y+=x
y+=x
x+=y

5

ডায়ালগ এপিএল, ৪৯ টি চর / বাইট *

{0=N←⍵|⍨2*16:⍬⋄0=4|N:⎕←'y+=y'⊣∇N÷2⋄⎕←'y+=x'⊣∇N-1}

অ্যালগরিদম নির্লজ্জভাবে @ চ্যাকের উত্তর দ্বারা অনুপ্রাণিত ।

উদাহরণ:

    {0=N←⍵|⍨2*16:⍬⋄0=4|N:⎕←'y+=y'⊣∇N÷2⋄⎕←'y+=x'⊣∇N-1} 25
y+=x
y+=x
y+=y
y+=x
y+=x
y+=y
y+=y
y+=x

Ungolfed:

{
    N←(2*16)|⍵                 # assign the argument modulo 65536 to N
    0=N: ⍬                     # if N = 0, return an empty value (that's a Zilde, not a 0)
    0=4|N: ⎕←'y+=y' ⊣ ∇N÷2     # if N mod 4 = 0, recurse with N÷2 and *then* print 'y+=y'
    ⎕←'y+=x' ⊣ ∇N-1            # otherwise, recurse with N-1 and *then* print 'y+=x'
}

* ডায়ালগ এপিএল একটি লিগ্যাসি চরসেট সমর্থন করে যা এপিএল প্রতীকগুলি উপরের 128 বাইট মানগুলিতে ম্যাপ করেছে। সুতরাং একটি এপিএল প্রোগ্রাম যা কেবলমাত্র ASCII অক্ষর এবং এপিএল প্রতীক ব্যবহার করে তা বাইটস == অক্ষর হিসাবে বিবেচিত হতে পারে।


3

পাইথন, 183

def S(n):
 b,c,e=16,'x+=x\n','x+=y\n';s=d='y+=x\n';a=i=0
 if n<2:return
 while~n&1:n>>=1;a+=1
 while n:n>>=1;s+=[e,c][i]+d*(n&1);i=1;b-=1
 while a:s+=[c,c*b+e*2][i];i=0;a-=1
 print(s)

আমি এমনকি সংখ্যার জন্য সর্বোত্তম প্রোগ্রাম 2x এর মধ্যে থাকার গ্যারান্টি দিতে পারি না, তবে এটি দক্ষ। সমস্ত বৈধ ইনপুটগুলির জন্য 0 <= n < 65536, এটি মূলত তাত্ক্ষণিক এবং প্রায় 33 টি নির্দেশের একটি প্রোগ্রাম উত্পন্ন করে। একটি স্বেচ্ছাসেবী নিবন্ধের আকারের জন্য n(সেই ধ্রুবকটিকে ঠিক করার পরে) এটি লাগবেO(n) বেশিরভাগ 2n+1নির্দেশের সাথে সময়

কিছু বাইনারি লজিক

যে কোনও বিজোড় সংখ্যা n31 টি ধাপের মধ্যে পৌঁছানো যায়: করুন y+=x, পেয়ে যাচ্ছেনx,y = 1,1 যাচ্ছেন এবং তারপরে দ্বিগুণ xহন x+=x(প্রথম দ্বিগুণ করার জন্য x+=y, যেহেতু xএটি শুরু করার সাথে বিজোড় হয়)। x2 এর প্রতিটি পাওয়ার এই পথে পৌঁছে যাবে (এটি কেবলমাত্র একটি বাম শিফট), এবং তাই আপনি 2 yএর সামর্থ্য যোগ করে 1 হতে কোনও বিট সেট করতে পারেন যেহেতু আমরা 16 বিট রেজিস্টার ব্যবহার করছি, এবং প্রতিটি বিট বাদে প্রথমটির জন্য একটি পৌঁছাতে দ্বিগুণ এবং একটি y+=xসেট করতে লাগে , আমরা সর্বাধিক 31 ops পাই।

যে কোনও এমনকি সংখ্যার n2 এর সামান্য শক্তি, এটি কল করুন a, বিজোড় সংখ্যার বার হবে, কল করুন m; যেমন n = 2^a * m, বা সমতুল্য n = m << a,। পেতে উপরের প্রক্রিয়াটি ব্যবহার করুনm , তারপরে xএটি বাম-সরিয়ে দিয়ে পুনরায় সেট করুন 0 অবধি এটি x+=yসেট করতে একটি করুন x = m, এবং তারপরে ডাবল করতে থাকুন x, প্রথমবার ব্যবহার করে x+=yএবং পরে ব্যবহার করুন x+=x

যাই হোক না কেন aএটা লাগে, হয় 16-aএর বদল আনতে xপেতে y=mএবং অতিরিক্ত aবদল আনতে পুনরায় সেট করতে x=0। এর আরেকটি aশিফট xপরে আসবে x=m। সুতরাং মোট16+a শিফ্ট ব্যবহার করা হয়। এখানে 16-aবিটগুলি রয়েছে যাগুলি পেতে সেট করা দরকার mএবং সেগুলির প্রতিটি একটি নিতে হবে y+=x। অবশেষে যখন x=0এটি মিটারে সেট করা যায় তখন আমাদের একটি অতিরিক্ত পদক্ষেপের দরকার হয়,x+=y । সুতরাং যে কোনও সংখ্যা পেতে এটি বেশিরভাগ 33 টি পদক্ষেপ নেয়।

আপনি অবশ্যই এটি কোনও আকারের রেজিস্ট্রারে সাধারণীকরণ করতে পারেন, সেক্ষেত্রে এটি সর্বদা সর্বাধিক লাগে 2n-1এবং 2n+1বিজোড় এবং এমনকিn -বিট পূর্ণসংখ্যার যথাক্রমে।

Optimality

এই অ্যালগরিদম বিজোড় সংখ্যার জন্য এমন একটি প্রোগ্রাম তৈরি করে যা নিকটতম-অনুকূল (অর্থাত্ 2n+2যদি nসর্বনিম্ন সংখ্যার পদক্ষেপের মধ্যে থাকে)। একটি প্রদত্ত বিজোড় সংখ্যা জন্য n, যদি mম বিট আমরা একটি প্রযুক্তিগত 1, যেকোনো প্রোগ্রাম অন্তত লাগে mপদক্ষেপ পেতে x=nবা y=n, অপারেশন যা রেজিস্টার 'মান দ্রুততম বৃদ্ধি, যেহেতু x+=xবা y+=y(অর্থাত doublings) এবং এটা লাগে mপেতে doublings দ্যm 1. থেকে তম বিট এই অ্যালগরিদম যেহেতু সর্বাধিক লাগে 2mপদক্ষেপ (দ্বিগুন প্রতি সর্বাধিক দুটি, শিফট এবং অন্যটি y+=x), কোন বিজোড় সংখ্যা প্রতিনিধিত্ব করা হয় কাছাকাছি সন্তোষজনক ভাবে।

এমনকি সংখ্যাগুলিও তেমন ভাল নয়, যেহেতু এটি পুনরায় সেট করতে সর্বদা 16 টি অপ্স ব্যবহার করে x অন্য কোনও কিছুর আগে করতে। এবং উদাহরণস্বরূপ, 5 টি ধাপের মধ্যে পৌঁছানো যায়।

মজার বিষয় হল, উপরোক্ত অ্যালগরিদম কখনই ব্যবহার y+=yকরে না, যেহেতু yসর্বদা অদ্ভুত থাকে। কোন ক্ষেত্রে এটি কেবলমাত্র 3 টি অপারেশনের সীমাবদ্ধ সেটটির জন্য সংক্ষিপ্ততম প্রোগ্রামটি পেতে পারে।

পরীক্ষামূলক

# Do an exhaustive breadth-first search to find the shortest program for
# each valid input
def bfs():
    d = {(0,1):0}
    k = 0xFFFF
    s = set(range(k+1))
    current = [(0,1)]
    nexts = []
    def add(pt, dist, n):
        if pt in d: return
        d[pt] = dist
        s.difference_update(pt)
        n.append(pt)
    i = 0
    while len(s) > 0:
        i += 1
        for p in current:
            x,y = p
            add((x,x+y&k), i, nexts)
            add((y,x+y&k), i, nexts)
            if y%2 == 0: add(tuple(sorted((x,y+y&k))), i, nexts)
            if x%2 == 0: add(tuple(sorted((x+x&k,y))), i, nexts)
        current = nexts
        nexts = []
        print(len(d),len(s))

# Mine (@rationalis)
def S(n):
    b,c,e=16,'x+=x\n','x+=y\n';s=d='y+=x\n';a=i=0
    if n<2:return ''
    while~n&1:n>>=1;a+=1
    while n:n>>=1;s+=[e,c][i]+d*(n&1);i=1;b-=1
    while a:s+=[c,c*b+e*2][i];i=0;a-=1
    return s

# @CChak's approach
def U(i):
    if i<1:return ''
    return U(i//2)+'y+=y\n' if i%4==0 else U(i-1)+'y+=x\n'

# Use mine on odd numbers and @CChak's on even numbers
def V(i):
    return S(i) if i % 2 == 1 else U(i)

# Simulate a program in the hypothetical machine language
def T(s):
    x,y = 1,0
    for l in s.split():
        if l == 'x+=x':
            if x % 2 == 1: return 1,0
            x += x
        elif l == 'y+=y':
            if y % 2 == 1: return 1,0
            y += y
        elif l == 'x+=y': x += y
        elif l == 'y+=x': y += x
        x %= 1<<16
        y %= 1<<16
    return x,y

# Test a solution on all values 0 to 65535 inclusive
# Max op limit only for my own solution
def test(f):
    max_ops = 33 if f==S else 1000
    for i in range(1<<16):
        s = f(i); t = T(s)
        if i not in t or len(s)//5 > max_ops:
            print(s,i,t)
            break

# Compare two solutions
def test2(f,g):
    lf = [len(f(i)) for i in range(2,1<<16)]
    lg = [len(g(i)) for i in range(2,1<<16)]
    l = [lf[i]/lg[i] for i in range(len(lf))]
    print(sum(l)/len(l))
    print(sum(lf)/sum(lg))

# Test by default if script is executed
def main():
    test()

if __name__ == '__main__':
    main()

আমার সমাধানটি সত্যিকার অর্থে সঠিক ফলাফল দেয় তা যাচাই করার জন্য আমি একটি সহজ পরীক্ষা লিখেছিলাম এবং সমস্ত বৈধ ইনপুট ( 0 <= n < 65536) এর জন্য কখনও 33 টি ধাপের বেশি হয় না ।

এছাড়াও, আমি আমার আউটপুটটিকে সর্বোত্তম আউটপুটগুলির সাথে তুলনা করার জন্য একটি অভিজ্ঞতাগত বিশ্লেষণ করার চেষ্টা করেছি - তবে, এটি প্রমাণিত হয়েছে যে প্রতিটি বৈধ ইনপুটটির জন্য সর্বনিম্ন আউটপুট দৈর্ঘ্য অর্জন করতে প্রস্থের প্রথম অনুসন্ধানটি খুব অকার্যকর n। উদাহরণস্বরূপ, এর জন্য আউটপুট সন্ধানের জন্য বিএফএস ব্যবহার করা n = 65535যুক্তিসঙ্গত পরিমাণে শেষ হয় না। তবুও আমি রেখেছি bfs()এবং পরামর্শের জন্য উন্মুক্ত।

যাইহোক, আমি @ সিচাকের বিরুদ্ধে আমার নিজস্ব সমাধানটি পরীক্ষা করেছি (পাইথন হিসাবে এখানে প্রয়োগ করা হয়েছে U)। আমার প্রত্যাশা ছিল খনিটি আরও খারাপ করবে, যেহেতু এটি ছোট এমনকি সংখ্যার জন্য মারাত্মকভাবে অদক্ষ, তবে পুরো পরিসীমা জুড়ে গড়ে দুটি উপায়ে খনিটি দৈর্ঘ্যের আউটপুট উত্পাদন করে গড়ে গড় দশমিক দশমিক 12 থেকে 12.3% কম। আমি ভেবেছিলাম এটি বিজোড় সংখ্যাগুলির জন্য আমার নিজস্ব সমাধান থেকে ভাল দক্ষতার কারণে হয়েছে, সুতরাং Vবিজোড় সংখ্যার উপর খনি এবং @ সিকাক এর সমান সংখ্যায় ব্যবহার করে, তবে Vএর মধ্যে রয়েছে (প্রায় 10% এর চেয়ে কম U, 3% দীর্ঘ S)।


1
২০১২ বাইটে বেশ লজিক!
অ্যানাটলিগ

@ অ্যানাল্টলিগ আমি কী বলতে পারি, আমি গণিত এবং বিট ফিডিং পছন্দ করি। আমি অন্যান্য পদ্ধতির তদন্ত করতে পারি, যেহেতু সমান সংখ্যার সমাধানে উন্নতির জায়গা রয়েছে।
যৌক্তিক

ওহ, আমি এখনও বুঝতে পারি নি যে x,y='xy'এখনও সম্ভব ছিল। দুর্ভাগ্যক্রমে, আমি ফর্ম্যাটিংয়ের c*b+e*2সাথে সংক্ষিপ্তভাবে পুনরায় লেখার কোনও উপায় ভাবতে পারি না %
যৌক্তিক

আহ আমি বুঝতে পারি নি আপনি এটি অন্য কোথাও ব্যবহার করেছেন। এটি কি কেবল আমার বা S(2)আউটপুটটি আসলেই দীর্ঘ?
Sp3000

দুর্ভাগ্যক্রমে, আমার সমাধানের সাথে, প্রতিটি সংখ্যায় কমপক্ষে 19 টি পদক্ষেপ নেওয়া হয় ( S(2)19-এ সংক্ষিপ্ততম হওয়া) being আমি ট্র্যাক xএবং yস্পষ্টভাবে রাখি না , সুতরাং xদ্বিতীয় ধাপের পরে ২ এ পৌঁছানোর পরেও তা পুনরায় সেট xকরতে থাকে 0.. আমার মনে হয় এর চেয়ে ভাল সমাধান অবশ্যই হবে তবে আমি এখনও ভাবতে পারি না এক.
যৌক্তিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.