एक नंबर से दूसरे नंबर पर आने के लिए न्यूनतम संचालन


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 '>>>>!>!'

यहाँ कुछ और उत्पन्न करने के लिए एक कार्यक्रम है।

जवाबों:


4

जावास्क्रिप्ट (ईएस 6), 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लेकिन स्निपेट्स आपके लिए इसे डिकोड करते हैं। संपादित करें: @RickHitchcock के लिए 10 बिलकुल बेकार बाइट्स सहेजे गए।


@wastl धन्यवाद, मुझे लगता है कि तीसरा प्रतीक क्या था।
नील

शानदार, और मुझे लगता है कि आप 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आउटपुट का उपयोग करने के लिए उपयोग कर सकते हैं ।
डेनिस

@ मुझे लगता है कि यह फ़ंक्शन द्वारा कवर किया जा सकता है उसी तरह से पूरे कार्यक्रमों के रूप में आउटपुट किया जा सकता है, लेकिन बाहर निकलना टीटीटी आउटपुट का हिस्सा नहीं है, मुझे लगता है। क्या इसका मतलब यह है कि फ़ंक्शन एक्ज़िट कोड के माध्यम से आउटपुट नहीं कर सकता है
२०

मुझे ऐसा लगता है। पूर्ण कार्यक्रमों के रूप में आउटपुट के लिए कार्य करने की अनुमति फ़ंक्शन सबमिशन के नियमों को ओवरराइड (imo) नहीं कर सकती है।
डेनिस

1

जावास्क्रिप्ट (ईएस 6), 105 बाइट्स

सिंटैक्स में 2 बाइट्स लेता है (a)(b)

इसके साथ एक स्ट्रिंग लौटाता है:

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

या एक खाली सरणी अगर a , b के बराबर है ।

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 बाइट्स

  • छत के लिए धन्यवाद दो बाइट्स सहेजे गए ; गोल्फ a/2+a*128के लिए (a+2*a*128)/2करने के लिए a*257/2
  • एक बाइट को बचाया; गोल्फ a*2+a/128के लिए (a*2*128+a)/128करने के लिए (257*a)/128करने के लिए 257*a>>7
  • सहेजे गए दो करने के लिए पांच बाइट्स धन्यवाद ceilingcat , वापसी प्रकार गोल्फ।

सी (जीसीसी) , 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);}}

इसे ऑनलाइन आज़माएं!


@ceilingcat धन्यवाद।
जोनाथन फ्रीच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.