এক নম্বর থেকে অন্য নম্বর পেতে সর্বনিম্ন ক্রিয়াকলাপ


16

আসুন একটি সাধারণ ভাষা সংজ্ঞায়িত করি যা একক 8-বিট মানকে চালিত করে। এটি তিনটি বিটওয়াইজ অপারেশনগুলি সংজ্ঞায়িত করে (কোড ব্যাখ্যাটি 8-বিট valueভেরিয়েবল ধরে নেয় ):

  • !সর্বনিম্ন তাৎপর্যপূর্ণ বিটকে নেগেট করুন ( value ^= 1)
  • <বাম-শিফ্ট মোড়ানো ( value = value << 1 | value >> 7)
  • >রাইট শিফ্ট মোড়ানো ( value = value >> 1 | value << 7)

ইনপুট:

দুটি 8-বিট সংখ্যা, এবং । তারা 8-বিট হওয়ায় বিকল্প হিসাবে আপনি এগুলি অক্ষর হিসাবে নিতে পারেন।

আউটপুট:

উপরে সংজ্ঞায়িত তিনটি ক্রিয়াকলাপ সহ একটি থেকে বিতে যাওয়ার সংক্ষিপ্ততম উপায়। আপনি কোনও স্ট্রিং বা অক্ষরের একটি অ্যারে ফিরে আসতে পারেন, বা প্রতিটি ক্রিয়াকলাপের জন্য একটি ধ্রুবক, স্বতন্ত্র মানগুলি সংজ্ঞায়িত করতে পারেন এবং সেগুলির একটি অ্যারে (হ্যাঁ, আপনি <অর্থ >এবং >উপায় বলতেও পারতেন <) ফিরিয়ে দিতে পারেন , তবে দয়া করে আপনার উত্তরে আপনার আউটপুট ফর্ম্যাটটি ব্যাখ্যা করুন।

যদি একাধিক, সমানভাবে দীর্ঘ উপায় থাকে তবে আপনি যে কোনও বা সমস্ত আউটপুট নিতে পারেন।

নিয়মাবলী:

  • আপনি কোনও প্রোগ্রাম বা ফাংশন জমা দিতে পারেন
  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য
  • প্রতিটি ভাষায় স্বল্পতম বাইট সহ জমাটি জিতবে (কোনও উত্তর গৃহীত হবে না)

নিষ্ঠুর-বাধ্য না করে সমাধান (বা কমপক্ষে কেবল নিষ্ঠুর-জোর করেই নয়) আমার উত্সাহ পেতে পারে।

পরীক্ষার কেস:

12, 13 => '!'
1, 2 => '<'
254, 253 => '<'
5, 5 => ''
98, 226 -> '<!>'
64, 154 -> '!>!>>>!>'
177, 164 -> '!>>!>>>!'
109, 11 -> '>>!>!>>'
126, 92 -> '!>!>!>!<' or '!>!>>!<!'
26, 85 -> '<!<<!<!<' or '<!<<!<!>' or '<!<<<!>!'
123, 241 -> '!>!<<!' or '>!<!<!'
236, 50 -> '<<!<!>' or '<<<!>!'
59, 246 -> '<<!>'
132, 95 -> '!<<!<!<!'
74, 53 -> '!>>>!>!'
171, 127 -> '<<!<<!<'
109, 141 -> '!>>>'
185, 92 -> '!>'
166, 201 -> '!<!>>>' or '<!>!>>'
77, 155 -> '<!'
124, 181 -> '!<<<<!>>' or '!>>>>!>>'
108, 85 -> '!<<<!<!<!<' or '!<<<!<!<!>' or '!<<<!<<!>!' or '!>>>!>!>!<' or '!>>>!>!>!>' or '!>>>!>>!<!'
185, 144 -> '<!<<!<!'
70, 179 -> '<<<!<!>' or '<<<<!>!' or '>>>>!>!'

আরও কয়েকটি উত্পন্ন করার জন্য এখানে একটি প্রোগ্রাম is

উত্তর:


4

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

f=(a,b,[c,d,...e]=[a,''])=>c-b?f(a,b,[...e,c^1,d+1,c/2|c%2<<7,d+2,c%128*2|c>>7,d+0]):d
<div oninput=o.textContent=f(a.value,b.value).replace(/./g,c=&gt;`&lt;!&gt;`[c])>a: <input type=number min=0 max=255 value=0 id=a> b: <input type=number min=0 max=255 value=0 id=b><pre id=o>

ডাবল-চেকিং ছাড়াই কিছুটা ধীরে ধীরে প্রস্থের প্রথম অনুসন্ধান। কিছুটা বেশি দক্ষ 114-বাইট সংস্করণ:

f=(a,b,c=[],[d,e,...g]=[a,''])=>c[d]?f(a,b,c,g):d-b?f(a,b,c,[...g,d^1,c[d]=e+1,d/2|d%2<<7,e+2,d%128*2|d>>7,e+0]):e
<div oninput=o.textContent=f(a.value,b.value).replace(/./g,c=&gt;`&lt;!&gt;`[c])>a: <input type=number min=0 max=255 value=0 id=a> b: <input type=number min=0 max=255 value=0 id=b><pre id=o>

উভয় সংস্করণ <!>হিসাবে এনকোড হয় 012তবে স্নিপেটগুলি আপনার জন্য এটি ডিকোড করে। সম্পাদনা করুন: @ রিকহিচকককে 10 টি সম্পূর্ণ নিরর্থক বাইট সংরক্ষণ করা হয়েছে।


@ ওয়াস্টল ধন্যবাদ, আমি তৃতীয় প্রতীকটি কী তা ভুল লিখেছি mis
নিল

জমকালো, এবং আমি মনে করি আপনি 10 বাইট সংরক্ষণ করতে পারবেন: f=(a,b,[c,d,...e]=[a,''])=>c-b?f(a,b,[...e,c^1,d+1,c/2|c%2<<7,d+2,c%128*2|c>>7,d+0]):d
রিক হিচকক

@ রিক হিচকক ওয়াও, এগুলি অবশ্যই একক উত্তরে আমার সবচেয়ে বেশি অকেজো 10 বাইট হতে হবে ...
নীল


1

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

l=[input()+('',)]
for(a,b,i)in l:a==b>exit(i);l+=[(x,b,i+y)for x,y in zip((a*2%256|a>>7,a/2|a%2<<7,a^1),'<>!')]

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


যেহেতু ফাংশনগুলি পুনরায় ব্যবহারযোগ্য হতে হয়, তাই আপনি exitআউটপুট উত্পাদন করতে ব্যবহার করতে পারবেন বলে আমি মনে করি না ।
ডেনিস

@ ডেনিস আমি ভেবেছিলাম এটি ফাংশন দ্বারা আচ্ছাদিত হবে পুরো প্রোগ্রামগুলির মতো একইভাবে আউটপুট করতে পারে, তবে উপস্থিতি আউটপুটটির অংশ নয়, আমার ধারণা। এর অর্থ কী ফাংশনগুলি প্রস্থান কোডের মাধ্যমে আউটপুট দিতে পারে না?
ovs

আমি তাই মনে করি. সম্পূর্ণ প্রোগ্রাম হিসাবে আউটপুট এ ফাংশনকে অনুমতি দেওয়া ফাংশন জমা দেওয়ার নিয়মগুলিকে ওভাররাইড করতে পারে না (imo)।
ডেনিস

1

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

বাক্য গঠন সিনট্যাক্সে 2 বাইট নেয় (a)(b)

এর সাথে একটি স্ট্রিং প্রদান করে:

  • 0 = !
  • 1 = >
  • 2 = <

অথবা একটি খালি অ্যারে যদি একটি সমান

a=>g=(b,m=1)=>(h=(n,s=[])=>n^b?s[m]?0:h(n^1,s+0)+h(n/2|n%2<<7,s+1)+h(n%128*2|n>>7,s+2):r=s)(a)?r:g(b,m+1)

এটি অনলাইন চেষ্টা করুন! (কোডগুলিতে ফিরে অনুবাদ করেছেন !<>)


1

সি (জিসিসি) , 201 199 198 196 193 বাইট

  • সিলিংক্যাটকে ধন্যবাদ দুটি বাইট সংরক্ষণ করা ; golfing a/2+a*128করার (a+2*a*128)/2জন্য a*257/2
  • একটি বাইট সংরক্ষণ করা; golfing a*2+a/128করতে (a*2*128+a)/128করতে (257*a)/128করতে 257*a>>7
  • সংরক্ষিত দুই থেকে পাঁচ বাইট ধন্যবাদ ceilingcat , রিটার্ন টাইপ golfing।

সি (জিসিসি) , 193 বাইট

*P,D,Q,j;f(a,b,d){if(a&=255,Q&&a==b)for(Q=j=0;++j<D;printf("%d",j[P]));Q&&++d<D&&f(a^1,b,d,P[d]=1)&f(257*a>>7,b,d,P[d]=2)&f(a*257/2,b,d,P[d]=3);}F(a,b){for(D=Q=1;Q;D++){int p[D];f(a,b,0,P=p);}}

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


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