16進数とアルファベット


45

このチャレンジでは、入力を受け取り、16進数に変換し、いくつかの変更を加えて、結果を出力します。

16進数で16文字しかないため、コードはできるだけ短くする必要があります。


例は空白行で区切られています。1行目は入力、2行目はステップ、3行目は出力を示しています

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
ゼロ桁を通過するテストケース(現在のアプローチにとって重要なエッジケースです):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でのデニスのセグメンテーション違反を返します。私は先にいる間にテストをやめるつもりです:)その例は正しいと確信していますか?
ダナ

回答:


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.

(10進数から整数へ)はの短縮形として機能するはずでしたḅ⁵が、この投稿の時点での最新バージョンのJellyには、使用できないバグがありました。


3
それは何ですか....?
Jアトキン

1
これはどのエンコーディングを使用しますか?これは、UTF-8のように見える、またはISO-8859はありません
Downgoat

2
@Downgoatそうではありません。Jellyは独自のカスタムエンコーディングを使用します。ソースコードは、UTF-8またはバイナリファイルとして提供できます。
デニス

2
@Timwiフェア。両方を投稿に追加しました。
デニス

2
デニスの防衛において:Jellyは256文字未満しか使用しないため、ANSI文字を使用するだけのJellyのフォークを簡単に定義できます。唯一の違いは、読みやすく、各機能が何をするのかを覚えやすいことです。
アダム

8

JavaScriptの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=
コナー・オブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴ提案に感謝しますが、それは自分自身を呼び出す必要があるため、機能しません。
ETHproductions

ああ!再帰は見ませんでした。私はバカ> _ <
コナーオブライエン

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/...
ダナ

4

ルビー、35 + 1 = 36

コマンドラインフラグを使用してp、実行

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

説明:

-pフラグはループを作成し、入力と最終的な出力を変数に保存します$_'%x'16進変換をtr!行い、数字の置換を行い、変更するものがなければfalsey値を返します。やり直しは新しい$_


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機能にバグがあることに気づき、修正し、修正を加えた新しいバージョン(および他のいくつかの蓄積された無関係な変更)をリリースしました

私はこのチャレンジよりも後のバージョンを使用しているため、Metaのコンセンサスによると、この答えは勝ちません

コード

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        

古いバージョンの言語で答えを書くことができます!
リルトシアスト

@ThomasKwa問題は、古いバージョンではコンパイラにバグがあることです。新しいバージョンで修正しました。これには、(関連のない)いくつかの新機能が接線方向に含まれています
ルイスメンドー

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}
AdámJan

1
またはさらに短く:10⊥10|X+10≤X-> 10(⊣⊥|+≤)X(技術的には同等ではありませんが、16進数で動作します)
ngn

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

2

Python、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:3文字を保存[a-f]する\Dように変更し、さらに8のstrval呼び出しを削除しpreg_replaceました argv[]STDINの代わりに使用するバージョンを追加し、ループターミネーターをwhileステートメントに移動し(oops!)さらに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を参照)
タイタス

2

R106の 103 102バイト

if代わりに使用して-3バイトwhile

-1バイトのas.double代わりに使用するGiuseppeのおかげ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:重複; :is_int?)同じバイトカウントのために。


1
@MagicOctopusUrn [hÐþQ#Au₂L‡は、残念ながら常に機能するとは限りません。チャレンジでは、最初に1回、次にすべての反復で16進数に変換するように指定されています。テストスイートにコードを貼り付けると、最初の3つのテストケースは正しいですが、最後の2つのテストケースは失敗します。
ケビンクルーッセン

2

C#(Visual C#Interactive Compiler)、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;
}

質問記事の最後でALGOに続いて、私あなたの関数には思えるよう153は、いくつかの時間前に戻った63なく99をもたらすことがある
RosLuP

1
@RosLuP-153で動作するようになりましたが、今では私の解決策ははるかに長くなっています:)私はそれを小さくすることに取り組んでいますが、今のところは少なくともそのケースを正しく処理しています。
ダナ

1

Mathematica、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>9、16進数字リストに9より大きい数字がまだ含まれている場合にのみ一致するパターンを使用します。


1

Japt、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(eval拡張付き)、44

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

sed許可したいy/A-F/1-6/です。しかし、そうではありません。


1

Python 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ゴルフのヒント既に存在します)。


joinに短縮することができますstr(ord(c)%12)for c in n
パチョリク

1

Java、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代わりに、PEEKのポップは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.