16 진법과 알파벳


45

이 과제에서는 입력을 받고 16 진수로 변환하고 몇 가지 사항을 변경 한 후 결과를 출력합니다.

16 진수는 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. 입력을 16 진수로 변환
  2. 알파벳에서 자신의 인덱스가 어떤 문자를 교체합니다 (예를 들어 a -> 1, b -> 2)
  3. 결과를 16 진수로 다시 변환
  4. 결과에 문자가 포함되어 있으면 2 단계로 이동하십시오. 그렇지 않으면 결과를 출력하십시오.

이것은 이므로 바이트 단위의 가장 짧은 코드가 승리합니다!


27
정당화를위한 +1 "16 진수는 16 자이므로 코드는 가능한 짧아야합니다."
cat

1
0 자리를 통과하는 테스트 사례 (현재 접근 방식의 중요한 경우) :749699 -> B7083 -> 27083 -> 69CB -> 6932 -> 1B14 -> 1214 -> 4BE -> 425 -> 1A9 -> 119 -> 77
Martin Ender

5
테스트 사례 153. 1 단계> 99, 2 단계-> 99, 3 단계-> 63, 출력 63. 올바른가?
edc65

예 153 코드 흐름 설명을 보지 못했습니다 ...
RosLuP

가치있는 것에 대해 ... 상위 4 개의 답변 중 3 개는 입력 153에서 99를 반환하고 현재 버전의 Jelly에서는 Dennis의 세그 폴트를 반환합니다. 계속 진행하면서 테스트를 중단하겠습니다. :) 예제가 맞습니까?
dana

답변:


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.?

이 버전의 Jelly 인터프리터에서 작동합니다 .

작동 원리

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.

(정수에서 정수로)은에 대한 속기 역할 ḅ⁵을했지만이 게시물을 작성할 당시 최신 버전의 Jelly는 버그를 사용하여 사용하지 못했습니다.


3
뭐 ....... 그 ..?
J Atkin

1
어떤 인코딩을 사용합니까? UTF-8 또는 ISO-8859처럼 보이지 않음
Downgoat

2
@ Downgoat 그렇지 않습니다. 젤리는 자체 사용자 지정 인코딩을 사용합니다. 소스 코드는 UTF-8 또는 이진 파일로 제공 될 수 있습니다.
Dennis

2
@Timwi Fair 충분히. 게시물에 둘 다 추가했습니다.
Dennis

2
Dennis의 방어 : Jelly는 256 자 미만을 사용하므로 ANSI 문자 만 사용하는 Jelly 포크를 간단하게 정의 할 수 있습니다. 유일한 차이점은 가독성과 각 기능의 기능 기억의 용이성입니다.
Adám

8

자바 스크립트 ES6, 98 92 67 64 바이트

@Downgoat 덕분에 3 바이트 절약, @ user81655 덕분에 3 바이트 더 절약

재귀를 위해 루프를 버리고 훨씬 짧은 버전을 찾았습니다.

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))"). 재귀를 사용하여 몇 바이트를 절약 할 수도 있습니다
Downgoat

@ Downgoat 감사합니다! 나는 그것을 .replace평가하기 전에 문자열을 시도했지만 더 길어졌습니다.
ETHproductions

또한 익명의 기능으로 생략 할 수 있음을 기억하십시오h=
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ 제안에 감사드립니다. 그러나 그것은 스스로 호출해야하기 때문에 작동하지 않습니다.
ETHproductions

가! 재귀를 보지 못했습니다. I 'm and 멍청이> _ <
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'16 진수 변환을 tr!수행하고 숫자 대체를 수행하고 변경할 것이 없으면 잘못된 값을 반환합니다. redo는 새로운로 시작합니다 $_.


4

줄리아, 78 74 바이트

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

정수를 허용하고 문자열을 반환하는 재귀 함수입니다.

언 골프 드 :

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 문제는 이전 버전에서 컴파일러에 버그가 있다는 것입니다. 새 버전에서 수정했습니다. 여기에는 몇 가지 (관련되지 않은) 새로운 기능이 포함되어 있습니다.
Luis Mendo

3

Dyalog APL, 37 36 33 바이트

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

제안에 대한 Adámngn 에게 감사합니다 . 16⊥⍣¯1⊢⍵대신 유지하고 있습니다 ⍵⊤⍨⍴⍨16-여분의 바이트이지만 64 비트가 아닌 임의의 크기의 숫자에서 작동 할 수 있습니다.


-2 권리 불평등 기능을 선택하여 :{∧/9≥X←16⊥⍣¯1⊢⍵:10⊥X⋄∇10⊥10|X+9<X}
아담

1
또는 더 짧음 : 10⊥10|X+10≤X-> 10(⊣⊥|+≤)X(기술적으로 동일하지 않지만 16 진수 숫자로 작동)
ngn

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

2

파이썬, 118105 바이트

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 또는 84 바이트 (포함 -r)

아니 완전히 확인이 등이 주위의 규칙이 처음 codegolf 시도하지만 코드가 실행 될 수있는 방법에 대한 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";

대체 코드 (stdin 대신 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()PHP는 숫자 문자열을 행복하게 처리하므로 14 문자를 저장 하라는 호출을 끊었습니다 .
편집 2 : \n테스트 후 제거를 잊어 버린 출력에서 ​​제거하고 최종 에코에서 따옴표를 제거하여 총 4자를 저장했습니다.
편집 3 : 제거 마지막 호출 intval()
편집 4 : 저장 한 정규식 줄에서 인용 부호를 제거하여 2 바이트
편집 5 : 변경 [a-f]하기 위해 \D3 자, 제거 된 저장 strval에서 전화 preg_replace8 이상을; 사용하는 추가 버전 argv[]대신 STDIN의가 11 개 이상의 문자를 저장 (죄송!)가 잠시 문으로 루프 터미네이터를 이동하고로 dechex 통화를 이동 subject의 일부preg_replace다른 3의 경우 총 25 개를 만듭니다. 또한 3 자 이하의 문자를 사용하는 대체 버전으로 비표준 버전을 추가했습니다. 도움을 주셔서 감사합니다, @Blackhole


Code Golf에 오신 것을 환영합니다! 태그를 열지 않은 파일은 유효한 PHP 파일이므로 항상 PHP에서 태그를 계산합니다 (또는 -r옵션으로 2 바이트를 계산합니다 ). 그러나 행간 ;은 항상 행간 보다 짧으므로 ?>잊지 마십시오. 그건 그렇고, 짧은 코드는 다음과 같습니다 for($a=$argv[1];$b!=$a;)$a=preg_replace('#\D#e','ord($0)-96',$b=dechex($a));echo$b;(-29 바이트).
블랙홀

입력 15363하지 말아야 99합니다. 그러나 -r무료입니다. ( codegolf.meta.stackexchange.com/a/2428/55735 참조 )
Titus

2

R , 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"

문자열 내에서 'abcdef'라는 문자를 찾지 못하는 조건에서 재귀를 사용하여 각 연속 반복에 함수를 다시 적용했습니다.이 조건이 False이면 결과를 문자열로 출력합니다. 가장 중요한 부분은 chartr함수를 발견 하여 문자열의 해당 요소로 요소를 바꿀 수 있습니다. 이 문자열은 16 진수를 문자열 형식으로 강제 변환하는 함수에서 제공됩니다.

편집 : 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: Duplicate; : is_int?)가 될 수도 있습니다 .


1
@MagicOctopusUrn [hÐþQ#Au₂L‡이 항상 불행하게 작동하는 것은 아닙니다. 도전 과제는 먼저 한 번 16 진수로 변환 한 다음 반복 할 때마다 나타납니다. 테스트 스위트에 코드를 붙여 넣으면 처음 세 테스트 사례는 정확하지만 마지막 두 테스트 사례는 실패합니다.
Kevin Cruijssen

2

C # (Visual C # 대화식 컴파일러) , 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;
}

질문 게시물의 끝에서 너 한테 다음, 153 (63)의 결과가 아니라 99 나에게 몇 시간 전에 반환 함수 보인다
RosLuP

1
@RosLuP-지금은 내 솔루션이 훨씬 길지만 153으로 작동하도록했습니다.) 작게 만드는 데 노력할 것이지만 지금은 적어도 그 경우를 올바르게 처리하고 있습니다.
다나

1

수학, 107 바이트

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

더 이상 골프를 치는 방법을 생각할 수 없다 ...


1

Mathematica, 80 바이트

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

이것은 alephalpha에서 배운 while 루프에 깔끔한 트릭을 사용합니다. 는 //."가능한 한 자주 대체 규칙을 적용"입니다. 그런 다음 l_/;Max@l>916 진수 숫자 목록에 여전히 9보다 큰 숫자가 포함 된 경우에만 일치 하는 패턴을 사용합니다 .


1

apt, 45 40 바이트

내 JS 답변을 기반으로 :

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

GNU Sed (평가판 포함), 44

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

나는 sed허용 하고 싶습니다 y/A-F/1-6/. 그러나 그렇지 않습니다.


1

파이썬 3, 101 89 바이트

전반적으로 이것은 Boomerang 솔루션 과 매우 유사 하지만 다양한 측면에 대해 몇 가지 다른 접근 방식이 필요합니다.

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.

@pacholik 덕분에 11 바이트가 흘 렸습니다 ( join숫자와 문자 모두에서 작동하는 단일 작업으로 내부를 대체합니다 ). 또 다른 바이트는 join전구 순간에 나를 때리는 문자열 슬라이스 트릭 으로 대체하여 다듬어졌습니다 (그러나 Python 2를 지정하는 제목 아래에도 불구하고 Python golfing tips에 이미 존재합니다 ).


join단축 할 수있다 str(ord(c)%12)for c in n.
pacholik 2016

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 ì

온라인으로 사용해보십시오!

기존 Japt 답변에 비해 크게 개선되었습니다. 153 -> 63의견에서 제안 된 사례를 처리하지는 않지만 다른 답변은 어느 것도 보이지 않으므로 OP가 명시하지 않는 한 남겨 두겠습니다.

10 진수 목록으로 출력, 1 바이트 의 10 진수 출력으로 변경 가능

설명:

ì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

APL (NARS) 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대신에 3 바이트를 절약 할 수 들여다의 팝.)



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해결하기 위해 따옴표.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.