हेक्साडेसिमल और वर्णमाला


45

इस चुनौती में, आपको एक इनपुट प्राप्त होगा, इसे हेक्साडेसिमल में परिवर्तित कर सकते हैं, कुछ बदलाव कर सकते हैं और परिणाम को आउटपुट कर सकते हैं।

क्योंकि वे हेक्साडेसिमल में केवल 16 अक्षर हैं, आपके कोड को यथासंभव छोटा होना चाहिए।


उदाहरण

उदाहरण एक रिक्त रेखा द्वारा अलग किए जाते हैं। पहली पंक्ति इनपुट है, दूसरी पंक्ति चरण दिखाती है, तीसरी आउटपुट दिखाती है

234589
234589 -> 3945D -> 39454 -> 9A1E -> 9115 -> 239B -> 2392 -> 958
958

435234
435234 -> 6A422 -> 61422 -> EFEE -> 5655 -> 1617
1617

153
153 -> 99 -> 99 -> 63
1617

कदम

इनपुट हमेशा एक धनात्मक पूर्णांक होगा


आउटपुट उत्पन्न करने के लिए आप निम्नलिखित चरणों का पालन करेंगे:

  1. इनपुट को हेक्साडेसिमल में बदलें
  2. वर्णमाला में अपने अक्षरों के साथ किसी भी अक्षर को बदलें (जैसे a -> 1, b -> 2)
  3. परिणाम को हेक्साडेसिमल में बदलें
  4. यदि परिणाम में कोई अक्षर हैं, तो चरण 2 पर जाएं। यदि नहीं, तो परिणाम को आउटपुट करें

यह बाइट्स जीत में इतना छोटा कोड है!


27
औचित्य के लिए +1 "क्योंकि वे हेक्साडेसिमल में केवल 16 वर्ण हैं, आपके कोड को यथासंभव छोटा होना चाहिए।"
बिल्ली

1
एक टेस्ट केस जो एक शून्य अंक से गुजरता है (जो कि मेरे वर्तमान दृष्टिकोण के लिए एक महत्वपूर्ण बढ़त मामला है):749699 -> B7083 -> 27083 -> 69CB -> 6932 -> 1B14 -> 1214 -> 4BE -> 425 -> 1A9 -> 119 -> 77
मार्टिन एंडर

5
टेस्ट केस 153. चरण 1> 99, चरण 2 -> 99, चरण 3 -> 63, आउटपुट 63. सही है?
edc65 12

153 के लिए हां मैंने कोड फ्लो स्पष्टीकरण नहीं देखा था ...
RosLuP

इसके लायक क्या है ... शीर्ष 4 में से 3 उत्तर इनपुट 153 पर 99 और जेली के वर्तमान संस्करण पर डेनिस के सेग-दोष पर वापस आते हैं। मैं आगे निकलते समय परीक्षण छोड़ने जा रहा हूं :) क्या हमें यकीन है कि उदाहरण सही है?
दाना

जवाबों:


13

जेली , 18 बाइट्स

b⁴µ:⁵©+¹%⁵ḅ⁵ß¹®S¤?

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

स्रोत कोड के बाइनरी, 18 बाइट संस्करण में xxd डंप है

0000000: 62 b6 8c 3a b7 85 2b 8e 25 b7 a3 b7 95 8e 88 53 83 3f b..:..+.%......S.?

और जेली दुभाषिया के इस संस्करण के साथ काम करता है ।

यह काम किस प्रकार करता है

b⁴µ:⁵©+¹%⁵ḅ⁵ß¹®S¤?  Define the main link -- Left input: a (number)

b⁴                  Convert from integer to base 16.
  µ                 Start a new, monadic link.
   :⁵               Divide all base 16 digits by 10.
     ©              Save the result in a register.
      +¹            Add the quotients to the base 16 digits.
        %⁵          Take all resulting sums modulo 10.
          ḅ⁵        Convert from base 10 to integer.
              ®S¤   Take the sum of the quotients from the list in the register.
                 ?  If the result is non-zero:
            ß         Recursively call the main link.
             ¹        Else, apply the identity function.

(दशमलव-से-पूर्णांक) के लिए शॉर्टहैंड के रूप में काम करना चाहिए था ḅ⁵, लेकिन इस पोस्ट के समय में जेली के नवीनतम संस्करण में एक बग था जिसने मुझे इसका उपयोग करने से रोका।


3
वो क्या है....?
J Atkin

1
यह कौन सा एन्कोडिंग उपयोग करता है? यह UTF-8, या ISO-8859
डाउगोएट

2
@Downgoat यह नहीं है। जेली अपने स्वयं के, कस्टम एन्कोडिंग का उपयोग करता है। स्रोत कोड या तो UTF-8 में या एक बाइनरी फ़ाइल के रूप में प्रदान किया जा सकता है।
डेनिस

2
@ टिमवी मेला काफी मैंने दोनों पोस्ट में जोड़ा है।
डेनिस

2
डेनिस के बचाव में: चूँकि जेली 256 से कम वर्णों का उपयोग करती है, इसलिए कोई तुच्छ रूप से जेली के एक कांटे को परिभाषित कर सकता है जो सिर्फ ANSI वर्णों का उपयोग करता है। एकमात्र अंतर पठनीयता और याद रखने में आसानी होगी जो प्रत्येक फ़ंक्शन करता है।
12

8

जावास्क्रिप्ट ईएस 6, 98 92 67 64 बाइट्स

सहेजे गए 3 बाइट्स @Downgoat के लिए, 3 अधिक धन्यवाद @ user81655 के लिए

बहुत अधिक, बहुत छोटा संस्करण मिला, पुनरावृत्ति के लिए लूप को खोदकर:

h=x=>(y=x.toString(16))>(r=y.replace(/\D/g,z=>'0x'+z-9))?h(+r):r

संभवतः इस कार्यक्रम का सबसे दिलचस्प हिस्सा replaceसमारोह है:

z=>     // Implicit: z = one of "a", "b", "c", "d", "e", "f"
'0x'+z  // Add '0x' to the beginning of z.
        // If z == "a", this results in "0xa".
-9      // Subtract 9. JavaScript automatically coerces the string to a number,
        // and because the prefix "0x" means "convert from hexadecimal",
        // the "a" is converted to 10, which then becomes 1 because of the subtraction.

टेस्ट स्निपेट

( यहां से लिया गया )

h=x=>(y=x.toString(16))>(r=y.replace(/\D/g,z=>'0x'+z-9))?h(+r):r
<!--                               Try the test suite below!                              --><strong id="bytecount" style="display:inline; font-size:32px; font-family:Helvetica"></strong><strong id="bytediff" style="display:inline; margin-left:10px; font-size:32px; font-family:Helvetica; color:lightgray"></strong><br><br><pre style="margin:0">Code:</pre><textarea id="textbox" style="margin-top:5px; margin-bottom:5px"></textarea><br><pre style="margin:0">Input:</pre><textarea id="inputbox" style="margin-top:5px; margin-bottom:5px"></textarea><br><button id="testbtn">Test!</button><button id="resetbtn">Reset</button><br><p><strong id="origheader" style="font-family:Helvetica; display:none">Original Code Output:</strong><p><div id="origoutput" style="margin-left:15px"></div><p><strong id="newheader" style="font-family:Helvetica; display:none">New Code Output:</strong><p><div id="newoutput" style="margin-left:15px"></div><script type="text/javascript" id="golfsnippet">var bytecount=document.getElementById("bytecount");var bytediff=document.getElementById("bytediff");var textbox=document.getElementById("textbox");var inputbox=document.getElementById("inputbox");var testbtn=document.getElementById("testbtn");var resetbtn=document.getElementById("resetbtn");var origheader=document.getElementById("origheader");var newheader=document.getElementById("newheader");var origoutput=document.getElementById("origoutput");var newoutput=document.getElementById("newoutput");inputbox.value="234589";textbox.style.width=inputbox.style.width=window.innerWidth-50+"px";var _originalCode=null;function getOriginalCode(){if(_originalCode!=null)return _originalCode;var allScripts=document.getElementsByTagName("script");for(var i=0;i<allScripts.length;i++){var script=allScripts[i];if(script.id!="golfsnippet"){originalCode=script.textContent.trim();return originalCode}}}function getNewCode(){return textbox.value.trim()}function getInput(){try{var inputText=inputbox.value.trim();var input=eval("["+inputText+"]");return input}catch(e){return null}}function setTextbox(s){textbox.value=s;onTextboxChange()}function setOutput(output,s){output.innerHTML=s}function addOutput(output,data){output.innerHTML+='<pre style="background-color:'+(data.type=="err"?"lightcoral":"lightgray")+'">'+escape(data.content)+"</pre>"}function getByteCount(s){return(new Blob([s],{encoding:"UTF-8",type:"text/plain;charset=UTF-8"})).size}function onTextboxChange(){var newLength=getByteCount(getNewCode());var oldLength=getByteCount(getOriginalCode());bytecount.innerHTML=newLength+" bytes";var diff=newLength-oldLength;if(diff>0){bytediff.innerHTML="(+"+diff+")";bytediff.style.color="lightcoral"}else if(diff<0){bytediff.innerHTML="("+diff+")";bytediff.style.color="lightgreen"}else{bytediff.innerHTML="("+diff+")";bytediff.style.color="lightgray"}}function onTestBtn(evt){origheader.style.display="inline";newheader.style.display="inline";setOutput(newoutput,"");setOutput(origoutput,"");var input=getInput();if(input===null){addOutput(origoutput,{type:"err",content:"Input is malformed. Using no input."});addOutput(newoutput,{type:"err",content:"Input is malformed. Using no input."});input=[]}doInterpret(getNewCode(),input,function(data){addOutput(newoutput,data)});doInterpret(getOriginalCode(),input,function(data){addOutput(origoutput,data)});evt.stopPropagation();return false}function onResetBtn(evt){setTextbox(getOriginalCode());origheader.style.display="none";newheader.style.display="none";setOutput(origoutput,"");setOutput(newoutput,"")}function escape(s){return s.toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}window.alert=function(){};window.prompt=function(){};function doInterpret(code,input,cb){var workerCode=interpret.toString()+";function stdout(s){ self.postMessage( {'type': 'out', 'content': s} ); }"+" function stderr(s){ self.postMessage( {'type': 'err', 'content': s} ); }"+" function kill(){ self.close(); }"+" self.addEventListener('message', function(msg){ interpret(msg.data.code, msg.data.input); });";var interpreter=new Worker(URL.createObjectURL(new Blob([workerCode])));interpreter.addEventListener("message",function(msg){cb(msg.data)});interpreter.postMessage({"code":code,"input":input});setTimeout(function(){interpreter.terminate()},1E4)}setTimeout(function(){getOriginalCode();textbox.addEventListener("input",onTextboxChange);testbtn.addEventListener("click",onTestBtn);resetbtn.addEventListener("click",onResetBtn);setTextbox(getOriginalCode())},100);function interpret(code,input){window={};alert=function(s){stdout(s)};window.alert=alert;console.log=alert;prompt=function(s){if(input.length<1)stderr("not enough input");else{var nextInput=input[0];input=input.slice(1);return nextInput.toString()}};window.prompt=prompt;(function(){try{var evalResult=eval(code);if(typeof evalResult=="function"){var callResult=evalResult.apply(this,input);if(typeof callResult!="undefined")stdout(callResult)}}catch(e){stderr(e.message)}})()};</script>


इसके लिए एक समारोह का उपयोग करने के कुछ बाइट्स बचा सकते हैं .toString(16): x=>eval("for(x=(j=n=>n.toString(16))(x);/\\D/.test(x);)x=j(+x.replace(/\\D/g,z=>+('0x'+z)-9))")। यह कुछ बाइट्स को पुनरावर्तन का उपयोग करके भी बचा सकता है
20

@Downgoat धन्यवाद! मैंने .replaceइसका मूल्यांकन करने से पहले स्ट्रिंग पर कोशिश की थी , लेकिन यह अधिक लंबा निकला।
ETHproductions

यह भी याद रखें कि आप इसे एक गुमनाम समारोह बना सकते हैं, छूटनाh=
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ सुझाव के लिए धन्यवाद, लेकिन यह काम नहीं करेगा, क्योंकि इसे स्वयं कॉल करने की आवश्यकता है।
ETHproductions

गाह! पुनरावृत्ति नहीं देखी। मैं और बेवकूफ हूँ> _ <
Conor O'Brien

6

CJam, 21 19 बाइट्स

r{siGb_{(9%)}%_@#}g

इसका परीक्षण यहां करें।

व्याख्या

नकारात्मक मोडुलो परिणामों का एक बहुत ही दुर्लभ मामला मददगार साबित होता है। :)

r       e# Read input.
{       e# While the condition on top of the stack is truthy...
  s     e#   Convert to string. This is a no-op in the first iteration, but necessary
        e#   on subsequent iterations.
  i     e#   Convert to integer.
  Gb    e#   Get base-16 digits.
  _{    e#   Copy and map over the copy...
    (   e#   Decrement.
    9%  e#   Modulo 9. If the digit was originally in the range 0 to 9, it will remain
        e#   unchanged because -1 % 9 == -1. If the digit was in 10 to 15, it will become
        e#   0 to 5, respectively.
    )   e#   Increment. Undoes the decrement for unchanged digits and fixes the letter
        e#   digits because A corresponds to 1, not 0.
  }%
  _     e#   Duplicate result.
  @#    e#   Pull up original digits and try to find them in the array. This will be zero,
        e#   i.e. falsy, if they are equal and -1, i.e. truthy, if they are not.
}g

ऐसा लगता है कि एक और 153 के लिए असफल हो सकता है? यह अजीब लगता है कि शीर्ष 4 उत्तरों में से 3 में एक ही मुद्दा होगा? cjam.aditsu.net/…
dana

4

रूबी, 35 + 1 = 36

कमांड-लाइन ध्वज के साथ p, चलाएँ

$_='%x'%$_
redo if$_.tr!'a-f','1-6'

स्पष्टीकरण:

-P ध्वज एक लूप बनाता है, जो चर में इनपुट और अंतिम आउटपुट को संग्रहीत करता है $_'%x'हेक्स रूपांतरण tr!करता है , और यदि कोई भी परिवर्तन करने के लिए कुछ भी नहीं था, तो अंकों का प्रतिस्थापन होता है और एक गलत मूल्य देता है। नए के साथ फिर से शुरू होता है $_


4

जूलिया, 78 74 बाइट्स

f(x)=(h=hex(x);isdigit(h)?h:f(parse(replace(h,r"[a-z]",c->Int(c[1])-96))))

यह एक पुनरावर्ती कार्य है जो पूर्णांक को स्वीकार करता है और एक स्ट्रिंग लौटाता है।

Ungolfed:

function f(x::Integer)
    # Get the hexadecimal representation of x as a string
    h = hex(x)

    # Check whether all characters are digits
    if isdigit(h)
        # Return the hexadecimal representation of the input
        h
    else
        # Replace each letter with its position in the alphabet,
        # parse as an integer, and call f on the result
        f(parse(replace(h, r"[a-z]", c -> Int(c[1]) - 96)))
    end
end

4

MATL , 23 25 बाइट्स

अस्वीकरण

इस उत्तर को लिखते समय मैंने MATL के dec2baseफ़ंक्शन में एक बग देखा , इसे ठीक किया, और सुधार के साथ एक नया संस्करण जारी किया (साथ ही साथ कुछ अन्य संचित, असंबंधित परिवर्तन)

चूंकि मैं एक संस्करण का उपयोग कर रहा हूं जो बाद में इस चुनौती से है, मेटा पर सहमति के अनुसार यह उत्तर जीतने के लिए योग्य नहीं है

कोड

i`0:15YAt9X\t10ZQbb=~a]

उदाहरण

>> matl i`0:15YAt9X\t10ZQbb=~a]
> 234589
958

व्याख्या

i             % input number
`             % do...while
  0:15YA      % convert number to representation with base defined by symbols 0,...,15
  t9X\        % duplicate vector. Modulus 9 with 0 replaced by 9      
  t10ZQ       % duplicate vector and convert to number using base 10
  bb=~a       % are second- and third-top stack elements different? (If so, next iteration)
]             % end        

आप भाषा के पुराने संस्करण में एक उत्तर लिख सकते हैं!
lirtosiast

@ThomasKwa समस्या यह है कि पुराने संस्करण में कंपाइलर में बग है। मैंने इसे नए संस्करण में ठीक किया, जिसमें स्पर्शरेखा में कुछ (असंबंधित) नई विशेषताएं शामिल हैं
लुइस मेंडो

3

Dyalog एपीएल, 37 36 33 बाइट्स

{∧/9≥X←16⊥⍣¯1⊢⍵:10⊥X⋄∇10(⊣⊥|+≤)X}

Adám और सुझावों के लिए ngn के लिए धन्यवाद । मैं 16⊥⍣¯1⊢⍵इसके बजाय रख रहा हूं ⍵⊤⍨⍴⍨16- यह एक अतिरिक्त बाइट है, लेकिन हमें 64-बिट के बजाय मनमाने आकार की संख्याओं पर काम करने की अनुमति देता है।


-2 सही असमानता कार्यों को चुनकर:{∧/9≥X←16⊥⍣¯1⊢⍵:10⊥X⋄∇10⊥10|X+9<X}
Admm

1
या उससे भी कम: 10⊥10|X+10≤X-> 10(⊣⊥|+≤)X(तकनीकी रूप से समतुल्य नहीं, लेकिन हेक्स अंकों के लिए काम करता है)
nn

1
16⊥⍣¯1⊢⍵->⍵⊤⍨⍴⍨16
ngn

2

पायथन, 118 105 बाइट्स

def f(n):h=hex(n)[2:];return h if h.isdigit()else f(int(''.join(map(lambda x:chr((ord(x)-47)%48+47),h))))

2

PHP, 140 126 122 114 112 87 87 या 84 बाइट्स (सहित -r)

इस बारे में पूरी तरह से सुनिश्चित नहीं है कि यह कैसे नियम है क्योंकि यह मेरा पहला कोडगोल्फ प्रयास है, लेकिन कोड को php -rबिना जरूरत के साथ चलाया जा सकता है <?और?>

कोड

$b=readline();while($c!=$b)$b=preg_replace('/\D/e','ord($0)-96',$c=dechex($b));echo$c

प्रारूपित

$b=readline();
while($c!=$b){
  $b=preg_replace('/\D/e','ord($0)-96',$c=dechex($b));
}
echo "$b\n";

वैकल्पिक कोड (स्टड के बजाय argv का उपयोग करके)

for($b=$argv[1];$c!=$b;)$b=preg_replace('/\D/e','ord($0)-96',$c=dechex($b));echo$b

प्रारूपित

for($b=$argv[1];$c!=$b;) {
  $b=preg_replace('/\D/e','ord($0)-96',$c=dechex($b));
}
echo $b;

टिप्पणियाँ

संपादित 1: मैंने intval()14 वर्णों को बचाने के लिए कॉल को काट दिया क्योंकि PHP ख़ुशी से संख्या के रूप में संख्यात्मक तार का इलाज करेगा।
संपादन 2: मैंने \nउस आउटपुट से हटा दिया जिसे मैं परीक्षण के बाद निकालना भूल गया, और कुल 4 वर्णों को बचाने के लिए अंतिम प्रतिध्वनि से उद्धरण चिह्नों को हटा दिया।
संपादित 3: intval()
4 को संपादित करने के लिए अंतिम कॉल को हटा दिया: regex लाइन से उद्धरण चिह्नों को हटाकर 2 बाइट्स को
संपादित करें 5: 3 वर्णों को बचाने के लिए बदला [a-f]गया \D, 8 और के लिए strvalकॉल को हटा दिया गया preg_replace; जोड़ा गया संस्करण जो argv[]एसटीडीआईएन के बजाय उपयोग करता है , लूप टर्मिनेटर को 11 और वर्णों को सहेजने के समय (उफ़!) में ले जाता है, और डिकहेक्स कॉल को स्थानांतरित कर देता subjectहैpreg_replaceएक और 3 के लिए, कुल 25 बनाने; एक वैकल्पिक संस्करण के रूप में एक गैर-स्टैडेन संस्करण भी जोड़ा गया जो 3 कम वर्णों का उपयोग करता है। मदद के लिए धन्यवाद, @ ब्लेकहोल


कोड गोल्फ में आपका स्वागत है! चूंकि बिना टैग खोले फाइलें वैध PHP फाइलें हैं, हम हमेशा PHP में टैग गिनते हैं (या वैकल्पिक रूप से, हम विकल्प के लिए दो बाइट्स की गणना करते हैं -r)। लेकिन एक अग्रणी ;हमेशा एक अग्रणी से छोटा होता है ?>, इसलिए इसे मत भूलना। वैसे, यहां एक छोटा कोड है: for($a=$argv[1];$b!=$a;)$a=preg_replace('#\D#e','ord($0)-96',$b=dechex($a));echo$b;(-29 बाइट्स)।
ब्लैकहोल

इनपुट 153देना चाहिए 63, नहीं 99। लेकिन -rस्वतंत्र है। (देखें कोडगॉल्फ.मेटा.स्टैकएक्सचेंज.com/a/2428/55735 )
टाइटस

2

आर , 106 103 102 बाइट्स

के ifबजाय का उपयोग करके -3 बाइट्सwhile

के as.doubleबजाय का उपयोग कर Giuseppe के लिए -1 बाइट धन्यवादas.integer

a=function(y){x=as.hexmode(as.double(y))
if(grepl("[a-f]",x)){x=chartr("a-f","1-6",x);return(a(x))};x}

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

a(your_integer_here)परिणाम देखने के लिए बस TIO में जोड़ें ।

> a(234589)
[1] "958"
> a(435234)
[1] "1617"
> a(99999)
[1] "4908"

मैंने प्रत्येक पुनरावृत्ति पुनरावृत्ति के लिए फ़ंक्शन को फिर से लागू करने के लिए पुनरावृत्ति का उपयोग किया, इस शर्त पर कि यह स्ट्रिंग के भीतर कोई भी अक्षर 'एब्डेफ़' नहीं पाता है, जब यह स्थिति गलत होती है, तो यह परिणाम को स्ट्रिंग के रूप में आउटपुट करता है। सबसे अच्छा हिस्सा मेरी chartrफ़ंक्शन की खोज थी , जो मुझे स्ट्रिंग में संबंधित तत्वों के साथ तत्वों को स्वैप करने की अनुमति देता है। यह स्ट्रिंग हेक्साडेसिमल को एक स्ट्रिंग प्रारूप में ले जाने वाले फ़ंक्शन से आती है।

संपादित करें: मैंने sprint("%x",y)इसके बजाय उपयोग करने का प्रयास किया as.hexmode(as.double(y)), लेकिन मुझे अभी भी as.doubleकोड में कहीं और उपयोग करने की आवश्यकता है , जो 2 1 बाइट लंबा था।


as.doubleतुलना में कम हैas.integer
ग्यूसेप

कुछ और गोल्फ होने हैं, लेकिन मैं इस समय मोबाइल पर हूं। हमारे R गोल्फिंग चैट में शामिल होने के लिए स्वतंत्र महसूस करें और R में गोल्फिंग की युक्तियों की
ग्यूसेप

2

05AB1E , 12 बाइट्स

h[Au₂L‡hÐþQ#

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

h              # Convert the (implicit) integer-input to a hexadecimal string
               #  i.e. 234589 → "3945D"
 [             # Start an infinite loop:
  Au           #  Push the uppercase alphabet "ABC...XYZ"
    L         #  Push a list in the range [1,26]
              #  Transliterate: replace all letters with the integers at the same index
               #   i.e. "3945D" → "39454"
               #   i.e. "239B" → "2392"
       h       #  Convert the integer to a hexadecimal string again
               #   i.e. "39454" → "9A1E"
               #   i.e. "2392" → "958"
        Ð      #  Triplicate it
         þ     #  Leave only the digits of the last copy
               #   i.e. "9A1E" → "91"
               #   i.e. "958" → "958"
          Q    #  Check if these digits and the hexadecimal string are equal
               #   i.e. "9A1E" and "91" → 0 (falsey)
               #   i.e. "958" and "958" → 1 (truthy)
           #   #  And if they are: stop the infinite loop
               # (and output the remaining copy from the triplicate implicitly as result)

ÐþQएक ही बाइट-काउंट के लिए वैकल्पिक रूप से D.ï( D: डुप्लिकेट ; : is_int?) हो सकता है ।


1
@MagicOctopusUrn [hÐþQ#Au₂L‡हमेशा दुर्भाग्य से काम नहीं करता है। चुनौती पहले एक बार हेक्स में बदलने की है, और फिर हर पुनरावृत्ति में। यदि मैं अपने परीक्षण सूट में आपका कोड पेस्ट करता हूं, तो पहले तीन परीक्षण मामले सही हैं, लेकिन अंतिम दो असफल।
केविन क्रूज़सेन

2

सी # (विज़ुअल सी # इंटरएक्टिव कंपाइलर) , 92 बाइट्स

n=>{var s=$"{n:x}";for(;(s=$"{s.Aggregate(0,(a,c)=>10*a+c%48):x}").Any(c=>c>57););return s;}

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

कम गोल्फ वाला कोड:

// anonymous function with
// input integer n
// output is a string
n=>{
  // 1) Convert the input to hexadecimal
  var s=$"{n:x}";
  for(;
    (s=$"{
      // 2) replace letters with their index in the alphabet
      s.Aggregate(0,(a,c)=>10*a+c%48)
      // 3) Convert the result back to hexadecimal
      :x}"
    // 4) If the result contains any letters, go to step 2
    ).Any(c=>c>57););
  // If not, output the result
  return s;
}

प्रश्न पोस्ट के अंत में
अहंकार

1
@RosLuP - यह काम करने के लिए समझे w / कि 153, हालांकि अब मेरा समाधान बहुत लंबा है :) मैं इसे छोटा करने पर काम करूंगा, लेकिन अब कम से कम यह उस मामले को सही तरीके से संभाल रहा है।
दाना

1

गणितज्ञ, 107 बाइट्स

(b=FromDigits)@NestWhile[b[#/.Thread[10~Range~15->Range@6]]~a~16&,#~(a=IntegerDigits)~16,MemberQ[a_/;a>9]]&

यह गोल्फ के लिए किसी भी और तरीके के बारे में सोच नहीं सकते ...


1

मैथेमेटिका, 80 बाइट्स

i=IntegerDigits;f=FromDigits;f[#~i~16//.l_/;Max@l>9:>f[If[#>9,#-9,#]&/@l]~i~16]&

यह मेरे लिए alephalpha से सीखे गए समय-छोरों के लिए एक साफ चाल का उपयोग करता है। //."संभव के रूप में अक्सर इस प्रतिस्थापन नियम लागू है।" तब हम एक पैटर्न का उपयोग करते हैं, l_/;Max@l>9जो केवल तभी मेल खाता है यदि हेक्साडेसिमल अंक सूची में अभी भी 9 से अधिक अंक हों।


1

जाप, 45 40 बाइट्स

मेरे जेएस जवाब के आधार पर:

I=_nG -9}H=_=ZsG)f/\D/ ?H$($ÂZr"\\D"I):Z

एक गोल्फ भाषा के लिए बहुत दयनीय, ​​हुह? इस चुनौती के दौरान बहुत से लोगों को यह महसूस होता है कि उनके दुभाषियों में कीड़े हैं, और मैं अब उनमें शामिल हूं। यह 30 बाइट्स या उससे कम में किया जाना चाहिए , लेकिन एक बग इसे असंभव बना देता है।

यह एक फंक्शन बनाता Hहै जिसे इस तरह बुलाया जा सकता है:

I=_nG -9}H=_=ZsG)f/\D/ ?H$($ÂZr"\\D"I):Z}
$H(234589)$

वैकल्पिक रूप से, यहाँ एक पूरा कार्यक्रम है, STDIN से इनपुट लेकर:

I=_nG -9}H=_=ZsG)f/\D/ ?H$($ÂZr"\\D"I):Z}H$(U

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


1

जीएनयू सैड (निकासी विस्तार के साथ), 44

:
y/ABCDEF/123456/
s/^/printf %X /e
/[A-F]/b

काश sedइजाज़त देता y/A-F/1-6/। लेकिन यह नहीं है।


1

पायथन 3, 101 89 बाइट्स

कुल मिलाकर, यह बुमेरांग के समाधान के समान है , लेकिन यह विभिन्न पहलुओं के लिए कुछ अलग दृष्टिकोण लेता है।

def d(n):n=hex(int(n))[2:];return n.isdigit()and n or d(str([ord(c)%12for c in n])[1::3])

यह मेरे मूल कोड का विस्तारित संस्करण है:

def d(n):
    n = int(n)                        # Interpret input as a decimal integer.
    n = hex(n)[2:]                    # Convert it to hex, stripping the '0x'.
    if n.isdigit():                   # If every character is a digit...
        return n                      # ...we're done.
    else:                             # Otherwise...
        n = ''.join(c if c < ':' else # ...don't change digits (':' is after
                    chr(ord(c - 48))  # '9'), but do change letters ('1' is 48
                    for c in n)       # characters before 'a').
        return d(n)                   # Then follow the process again.

11 बाइट्स @pacholik की बदौलत बहाए गए थे ( joinएक ही ऑपरेशन के साथ पारी की जगह जो अंकों और अक्षरों दोनों के लिए काम करते थे)। एक और बाइट को joinएक स्ट्रिंग-स्लाइसिंग ट्रिक के साथ बदलकर ट्रिम किया गया था जिसने मुझे एक लाइटबल्ब पल में मारा (लेकिन जो पहले से ही पायथन गोल्फिंग टिप्स में मौजूद है , यद्यपि एक शीर्ष के तहत जो पायथन 2 को निर्दिष्ट करता है)।


joinको छोटा किया जा सकता str(ord(c)%12)for c in n
पचोलिक

1

जावा, 201 बाइट्स

String f(int a){String s=Long.toString(a,16);while(s.matches(".*[a-z].*")){char[]b=s.toCharArray();for(int i=0;i<b.length;i++)if(b[i]>96)b[i]-=48;s=Long.toString(new Long("".valueOf(b)),16);}return s;}

1

Japt , 21 बाइट्स

ìG
®+zA
eV ?U:ßVmuA ì

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

मौजूदा जाप उत्तर पर एक महत्वपूर्ण सुधार। यह 153 -> 63एक टिप्पणी में प्रस्तावित मामले को संभाल नहीं करता है , लेकिन अन्य उत्तरों में से कोई भी ऐसा प्रतीत नहीं होता है, इसलिए मैं इसे तब तक छोड़ दूंगा जब तक कि ओपी स्पष्ट नहीं करता।

दशमलव अंकों की सूची के रूप में आउटपुट, के लिए एक दशमलव संख्या को आउटपुट करने के लिए बदला जा सकता है 1 बाइट के

स्पष्टीकरण:

ìG               #Get a list of base-16 digits, each as a base-10 number
                    e.g. 234589 -> [3,9,4,5,13]

®+zA             #Increment the numbers greater than 10
                    e.g. [3,9,4,5,13] -> [3,9,4,5,14]

eV ?             #If the second step didn't change any digit:
    U            # Output the digits from step 1
     :           #Otherwise
      ß          # Repeat the program with new input:
       V         #  The result of step 2
        muA      #  With each digit modulo 10
            ì    #  Treated as a base-10 number

1

एपीएल (एनएआरएस) 104 चार्ट, 208 बाइट्स

f←{k←10⊥{⍵≤9:⍵⋄1+10∣⍵}¨q←{(16⍴⍨⌊1+16⍟⍵)⊤⍵}⍵⋄9≥⌈/q:k,0⋄k,1}
t←{⍵≤0:0⋄0=2⊃v←f⍵:↑f↑v⋄{k←f⍵⋄0=2⊃k:↑k⋄∇↑k}⍵}

परीक्षा:

  t 153
63
  t 0
0
  t 234589
958
  t 435234
1617
  t ¯123
0

मुझे नहीं पता कि क्या यह ठीक है ... संभव है कि यह मानक गुणवत्ता उत्तर के लिए पर्याप्त नहीं है ...


0

गंभीरता से, 42 बाइट्स

1╤╝4ª╗,$1WX╛@¿╜@¡;`╜@¿;)╛;(\(+%$`Mεj;)=YWX

हेक्स डंप:

31d1bc34a6bb2c24315758be40a8bd40ad3b60bd40
a83b29be3b285c282b2524604dee6a3b293d595758

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

इससे छोटा रास्ता होना चाहिए, लेकिन यह वही है जो मुझे मिला है ... (यह वह जगह है जहां मैं खुद को Wवास्तव में पॉपप करना चाहता हूं , क्योंकि यह ;पिछले एक से पहले एक सही डालने के लिए छोटा है जब आप इसे नहीं चाहते हैं। एक के Xबाद एक डालने के लिए W। यहाँ, Wबजाय झांकना तीन पॉप बचा होगा।)



0

PHP, 71 बाइट्स

while($n++<2|$b-$a=&$argn)$a=strtr($b=dechex($a),abcdef,123456);echo$a;

ऑनलाइन के साथ पाइप के रूप में चलाएं -nRया इसे आज़माएं

PHP 7.1 और बाद में कुछ इनपुट के लिए एक चेतावनी देता है; ठीक करने के -साथ बदलें !=
PHP 7.2 में एक और चेतावनी देता है; डाल abcdefउद्धरण ठीक करने के लिए।

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