base-36文字列をインクリメント


20

これは、以前スタックで尋ねた同様の質問のコードゴルフバージョンですが、面白いパズルになると思いました。

36を底とする数値を表す長さ10の文字列が与えられた場合、それを1つ増やし、結果の文字列を返します。

これは、文字列から数字だけを含めることを意味0する9とからの手紙az

Base 36は次のように機能します。

最初に0to を使用して、右端の数字がインクリメントされます9

0000000000> 9回の繰り返し> 0000000009

その後、ato zが使用されます。

000000000a> 25回の繰り返し> 000000000z

場合はzニーズがインクリメントされるように、それはゼロにループバックし、その左に数字がインクリメントされます。

000000010

さらなるルール:

  • 大文字または小文字を使用できます。
  • 先行ゼロを削除することはできません。入力と出力の両方が長さ10の文字列です。
  • zzzzzzzzzz入力として処理する必要はありません。

テストケース:

"0000000000" -> "0000000001"
"0000000009" -> "000000000a"
"000000000z" -> "0000000010"
"123456zzzz" -> "1234570000"
"00codegolf" -> "00codegolg"

@JoKingコードゴルフ、クールなアイデア、効率性。
ジャック・ヘイルズ

7
インクリメント操作だけを実装するというアイデアが好きです。なぜなら、それは、ベース変換とベース変換以外の戦略の可能性があるからです。
xnor

2
PPCGへようこそ!これは素晴らしい挑戦のアイデアですが、いくつかのコメントが指摘しているように、仕様の一部は不明確です。将来的には、投稿前にチャレンジに関するフィードバックを得ることができるサンドボックスを使用することをお勧めします。
ライコニ

1
"0zzzzzzzzz"テストケースとして(最も重要な数字を変更する)ようなものを追加することをお勧めします。オフバイワンエラーのために、Cソリューションが失敗しました。
OOBalance

1
大丈夫だと仮定してエントリを追加しました-Cエントリも既にそれを行っています。
フェリックスパルメン

回答:


6

05AB1E、10バイト

入力は大文字です。

コード

1ì36ö>36B¦

説明

1ì           # Prepend a 1 to the number
  36ö        # Convert from base 36 to decimal
     >       # Increment by 1
      36B    # Convert from decimal to base 36
         ¦   # Remove the first character

05AB1Eエンコードを使用します。オンラインでお試しください!または、すべてのテストケースを確認します


05AB1Eの新しいバージョンでは8バイトにすることができます。
ケビンCruijssen



7

Haskell、58バイト

d=['0'..'9']
f s=snd(span(<s)$mapM(\_->d++['a'..'z'])d)!!1

オンラインでお試しください!

非常に強引な戦略:長さ10のbase 36のすべての文字列を順番に生成し、リスト内の入力の後に来るものを見つけます。リストの先頭から遠く離れた文字列に膨大な時間をかけます。


Haskell、60バイト

q '9'='a'
q c=succ c
f(h:t)|any(<'z')t=h:f t|r<-'0'<$t=q h:r

オンラインでお試しください!

文字列の左から右に、すべてのzのサフィックスが続く文字に達するまで読み取ります。その文字をインクリメントし、zを0に置き換えます。



6

C(gcc) 50 48バイト

キャリーが発生しなくなるとすぐに終了するようにループを再構築した後、明示的なキャリーフラグは必要ありませんでした。ループチェック中に9-> A調整が実行されます。

提案してくれたceilingcatに感謝します。

f(char*s){for(s+=9;(*s+=*s-57?1:8)>90;*s--=48);}

オンラインでお試しください!


オリジナルバージョン:71 57バイト

このバージョンでは、キャリーフラグを使用して更新を伝達します。増分を開始するために、それをtrueに設定します。文字列はインプレースで変更され、0〜9、A〜Zのみを受け入れます。トリッキーな部分は、キャリーで9-> Aが正しく処理されるようにすることでした。

編集:入力ポインターをキャリーフラグとして再利用しました。

f(s){for(char*t=s+9;s;)*t--+=(s=++*t>90)?-43:7*!(*t-58);}

オンラインでお試しください!


6

C、82 81 53 50バイト

f(char*s){for(s+=10;*--s>89;)*s=48;*s+=*s-57?1:8;}

入力文字列を直接変更します。入力と出力は大文字です。こちらからオンラインでお試しください。24バイトのゴルフをしてくれたArnauldと、さらに3バイトのゴルフをしてくれたceilingcatに感謝します。

ゴルフをしていない:

f(char *s) { // function taking a string argument
     for(s += 10; *--s > 89; ) // skip to the least significant digit, and step through the string until you hit something other than a 'Z' (90 is the ASCII code for 'Z') ...
         *s = 48; // ... replacing each digit with a zero (48 is the ASCII code for '0')
         *s += // the next digit has to be incremented:
         *s - 57 // if it's not a '9' (ASCII code 57) ...
         ? 1 // ... that is straightforward ...
         : 8; // ... otherwise it has to be replaced with an 'A' (ASCII code 65 = 57 + 8)
 }

これは安全だと思います:60バイト
Arnauld

1
@Arnauld文字列の前に0バイトを仮定することはできません...-
ヤコブ

1
@Jakob私はそれについて100%確信していません。言語はその実装によって定義します。これはTIO VM上で実行されているC(gcc)であり、メモリは最初にクリアされると想定されます。(私は同様の仮定を行う他のCの回答を見ました。)
アーナルド

2
テスト環境を「実装」に含めることで、実際のところあまりにも多くの段階を踏んでいる可能性があります。ただし、メモリの仮定に依存しない60バイトバージョンを引き続き使用できます。
アルノー

1
@Arnauld私はさらに4バイトをゴルフしました。を処理する必要がないため、本当に安全なはずZZZZZZZZZZです。ErikFの答えは同じですが、さらに短くなります:codegolf.stackexchange.com/a/169468/79343
OOBalance

5

オンラインチューリングマシンシミュレータ、745バイト

init:0
accept:2
0,0
0,0,>
0,1
0,1,>
0,2
0,2,>
0,3
0,3,>
0,4
0,4,>
0,5
0,5,>
0,6
0,6,>
0,7
0,7,>
0,8
0,8,>
0,9
0,9,>
0,a
0,a,>
0,b
0,b,>
0,c
0,c,>
0,d
0,d,>
0,e
0,e,>
0,f
0,f,>
0,g
0,g,>
0,h
0,h,>
0,i
0,i,>
0,j
0,j,>
0,k
0,k,>
0,l
0,l,>
0,m
0,m,>
0,n
0,n,>
0,o
0,o,>
0,p
0,p,>
0,q
0,q,>
0,r
0,r,>
0,s
0,s,>
0,t
0,t,>
0,u
0,u,>
0,v
0,v,>
0,w
0,w,>
0,x
0,x,>
0,y
0,y,>
0,z
0,z,>
0,_
1,_,<
1,0
2,1,-
1,1
2,2,-
1,2
2,3,-
1,3
2,4,-
1,4
2,5,-
1,5
2,6,-
1,6
2,7,-
1,7
2,8,-
1,8
2,9,-
1,9
2,a,-
1,a
2,b,-
1,b
2,c,-
1,c
2,d,-
1,d
2,e,-
1,e
2,f,-
1,f
2,g,-
1,g
2,h,-
1,h
2,i,-
1,i
2,j,-
1,j
2,k,-
1,k
2,l,-
1,l
2,m,-
1,m
2,n,-
1,n
2,o,-
1,o
2,p,-
1,p
2,q,-
1,q
2,r,-
1,r
2,s,-
1,s
2,t,-
1,t
2,u,-
1,u
2,v,-
1,v
2,w,-
1,w
2,x,-
1,x
2,y,-
1,y
2,z,-
1,z
1,0,<

オンライン通訳


5

Perl 6の34の32 30バイト

o演算子を使用して関数を結合することにより、-2バイトのnwellnhofに感謝

{S/.//}o{base :36(1~$_)+1: 36}

オンラインでお試しください!

引数を基数36に変換し、1を加算して元に戻し、フォーマットする関数。Adnanの答えと同じ戦術を使用して、先行ゼロを保持するようになりました。


{S/.//}o{base :36(1~$_)+1: 36}30バイト。
nwellnhof

@nwellnhofすごい!私はこれまでoにゴルフをするときに使うことを考えたことがありませんでしたが、どこで役立つかはわかります!
ジョー・キング

ああ、それは.succ(1ずつ増加する)が機能しないのは残念です
ジョーキング


4

Haskell、63バイト

r.f.r
f('9':r)='a':r
f('z':r)='0':f r
f(c:r)=succ c:r
r=reverse

オンラインでお試しください!文字列を反転し、最初の文字を確認します。

  • A 9はに置き換えられますa
  • A zはに置き換えられ、0再帰的に次の文字がチェックされます。
  • 他のすべての文字はsucc、Charsのインスタンスであるため、Charsで使用できる後続関数を使用してインクリメントされます。 Enumクラスの

最後に、結果の文字列が再び逆になります。


4

6502(NMOS *)マシンコードルーチン、26バイト

A0 09 F3 FB B1 FB C9 5B 90 07 A9 30 91 FB 88 10 F1 C9 3A D0 04 A9 41 91 FB 60

*)「不正な」オペコードを使用しますISB/0xF3後のCMOSバリアントではなく、すべての元のNMOS 6502チップで動作します。

$fb/ 内の10文字の文字列へのポインターを$fc期待します。この数をその場で増やします。

無効な入力(たとえば、短い文字列など)に対して賢明なことは何も行いません- ZZZZZZZZZZ誤って「正しく」処理します;)

コメント付きの分解

; function to increment base 36 number as 10 character string
;
; input:
;   $fb/$fc: address of string to increment
; clobbers:
;   A, Y
 .inc36:
A0 09       LDY #$09            ; start at last character
 .loop:
F3 FB       ISB ($FB),Y         ; increment character ("illegal" opcode)
B1 FB       LDA ($FB),Y         ; load incremented character
C9 5B       CMP #$5B            ; > 'z' ?
90 07       BCC .checkgap       ; no, check for gap between numbers and letters
A9 30       LDA #$30            ; load '0'
91 FB       STA ($FB),Y         ; and store in string
88          DEY                 ; previous position
10 F1       BPL .loop           ; and loop
 .checkgap:
C9 3A       CMP #$3A            ; == '9' + 1 ?
D0 04       BNE .done           ; done if not
A9 41       LDA #$41            ; load 'a'
91 FB       STA ($FB),Y         ; and store in string
 .done:
60          RTS

ルーチンを使用したC64アセンブラープログラムの例:

オンラインデモ

screenshot

ca65構文のコード:

.import inc36   ; link with routine above

.segment "BHDR" ; BASIC header
                .word   $0801           ; load address
                .word   $080b           ; pointer next BASIC line
                .word   2018            ; line number
                .byte   $9e             ; BASIC token "SYS"
                .byte   "2061",$0,$0,$0 ; 2061 ($080d) and terminating 0 bytes

.bss
b36str:         .res    11

.data
prompt:         .byte   "> ", $0

.code
                lda     #<prompt        ; display prompt
                ldy     #>prompt
                jsr     $ab1e

                lda     #<b36str        ; read string into buffer
                ldy     #>b36str
                ldx     #$b
                jsr     readline

                lda     #<b36str        ; address of array to $fb/fc
                sta     $fb
                lda     #>b36str
                sta     $fc
                jsr     inc36           ; call incrementing function

                lda     #<b36str        ; output result
                ldy     #>b36str
                jmp     $ab1e

; read a line of input from keyboard, terminate it with 0
; expects pointer to input buffer in A/Y, buffer length in X
.proc readline
                dex
                stx     $fb
                sta     $fc
                sty     $fd
                ldy     #$0
                sty     $cc             ; enable cursor blinking
                sty     $fe             ; temporary for loop variable
getkey:         jsr     $f142           ; get character from keyboard
                beq     getkey
                sta     $2              ; save to temporary
                and     #$7f
                cmp     #$20            ; check for control character
                bcs     checkout        ; no -> check buffer size
                cmp     #$d             ; was it enter/return?
                beq     prepout         ; -> normal flow
                cmp     #$14            ; was it backspace/delete?
                bne     getkey          ; if not, get next char
                lda     $fe             ; check current index
                beq     getkey          ; zero -> backspace not possible
                bne     prepout         ; skip checking buffer size for bs
checkout:       lda     $fe             ; buffer index
                cmp     $fb             ; check against buffer size
                beq     getkey          ; if it would overflow, loop again
prepout:        sei                     ; no interrupts
                ldy     $d3             ; get current screen column
                lda     ($d1),y         ; and clear 
                and     #$7f            ;   cursor in
                sta     ($d1),y         ;   current row
output:         lda     $2              ; load character
                jsr     $e716           ;   and output
                ldx     $cf             ; check cursor phase
                beq     store           ; invisible -> to store
                ldy     $d3             ; get current screen column
                lda     ($d1),y         ; and show
                ora     #$80            ;   cursor in
                sta     ($d1),y         ;   current row
                lda     $2              ; load character
store:          cli                     ; enable interrupts
                cmp     #$14            ; was it backspace/delete?
                beq     backspace       ; to backspace handling code
                cmp     #$d             ; was it enter/return?
                beq     done            ; then we're done.
                ldy     $fe             ; load buffer index
                sta     ($fc),y         ; store character in buffer
                iny                     ; advance buffer index
                sty     $fe
                bne     getkey          ; not zero -> ok
done:           lda     #$0             ; terminate string in buffer with zero
                ldy     $fe             ; get buffer index
                sta     ($fc),y         ; store terminator in buffer
                sei                     ; no interrupts
                ldy     $d3             ; get current screen column
                lda     ($d1),y         ; and clear 
                and     #$7f            ;   cursor in
                sta     ($d1),y         ;   current row
                inc     $cc             ; disable cursor blinking
                cli                     ; enable interrupts
                rts                     ; return
backspace:      dec     $fe             ; decrement buffer index
                bcs     getkey          ; and get next key
.endproc

1
65C02バージョンはISBを破棄し、LDA()、Y(および.doneを1行上に移動)の後にINCを使用し、1バイト短くすることができます。
ピーターフェリー

@peterferrie 65C02にはaccuのINCがありますか?
フェリックスパルメン

@peterferrieわかりました、それはいいです-それは私が6502の最初の場所で欠けていたものです:)
フェリックス・パルメン

3

Retina 0.8.2、12バイト

T`zo`dl`.z*$

オンラインでお試しください!説明:dl置換先の部分は、ソースにコピーされている0-9a-z間に展開さoれますz0-9a-z(ただし、2番目zは一致しないため無視されます)。これにより、一致した数字が増加します。.z*$パターンの一部は、最後の非z数字とすべての末尾zのsに一致するため、増分からの桁上げを処理します0




3

Apl(Dyalog Unicode)30 28 24バイト

バイトを節約するためのヒントをくれたngnに感謝します。

(f⍣¯1)1+f←36⊥1,(⎕D,⎕A)⍳⊢

オンラインでお試しください!

  • 0の0IOが必要です

  • 大文字を使用


さらに一歩進んで'1',参加してみfませんか?その後1↓、その逆の一部になります
-ngn

@ngnいいね、ありがとう!
jslip

さらに短く:(⎕D,⎕A)⍳'1',->1,(⎕D,⎕A)⍳
ngn

最後の改善-トレインとして書き直すことができます(f⍣¯1)1+f←36⊥1,(⎕D,⎕A)⍳⊢
。– ngn

3

PHP、69 64バイト

ラメバージョン

printf("%010s",base_convert(1+base_convert($argn,36,10),10,36));

でパイプとして実行し-Rます。入力は大文字小文字を区別せず、出力は小文字です。

最初のアプローチ、69バイト:

<?=str_pad(base_convert(1+base_convert($argn,36,10),10,36),10,'0',0);

パイプとして実行 -F

ループバージョン、69バイト

for($n=$argn;~$c=$n[$i-=1];)$f||$f=$n[$i]=$c!=9?$c>Y?0:++$c:A;echo$n;
  • PHP 7.1のみ:古いPHPは負の文字列インデックスを理解しません。
    若いPHPは未定義の定数に対して警告を生成します。
  • 大文字の入力が必要です。小文字の入力の場合はY、とAを小文字に置き換えます。

パイプとして実行 -nR

...またはオンラインで試してください



別の68バイトバージョン:オンラインでお試しください!を使用して-R、これも66バイトで呼び出すことができます。
Night2

1
@ Night2良いアプローチ。しかし、それも短く行うことができますprintf('%010s',($b=base_convert)(1+$b($argn,36,10),10,36));- 59バイト
タイタス

1
良いですね。次のような関数を呼び出すことができることを知りませんでした($b=base_convert)(a,b,c)。私はあなたから多くを学んでいます。
Night2


2

、14バイト

×0⁹←⮌⍘⊕⍘S³⁶¦³⁶

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

×0⁹

9 0秒印刷します。これは結果を埋めるために役立ちます。

←⮌⍘⊕⍘S³⁶¦³⁶

入力を基数36から変換し、インクリメントしてから、基数36に変換し直します。次に、結果を逆にして、左方向に印刷します。


2

Java 8、90 76 56バイト

s->Long.toString(Long.valueOf(1+s,36)+1,36).substring(1)

入力に大文字と小文字の両方を受け入れます。出力は常に小文字です。

おかげOkx18バイトのゴルフをしてにます。

こちらからオンラインでお試しください

ゴルフをしていない:

s -> // lambda taking a String argument and returning a String
    Long.toString(Long.valueOf(1+s,36)+1,36) // prefix input with '1' to ensure leading zeros, convert to Long using base 36, increment, then convert back to String in base 36
    .substring(1) // remove the leading '1'

いいね!あなたのようなものとすることができますパッド古いJavaで将来の参考のために"".format("%10s",t).replace(' ','0')
ヤコブ

@Jakobありがとう、それが私が探していたものです。
OOBalance

最初にaを追加1してから削除するというアプローチを使用する方がs->Long.toString(Long.valueOf("1"+s,36)+1,36).substring(1)
簡単です。– Okx

@Okx素晴らしいアプローチ。さらに2バイト:"1"+s=>1+s
OOBalance

2

JavaScript(ES6)、89バイト

これは他のJavaScriptエントリほどバイト効率がよくありませんが、このルールに気付かずにこれを作成しました。

長さ10の文字列与えられた場合

だから、これは深刻なエントリではありません-ただの楽しみのために!それは、次のような、一般的な長さの文字列を使用しています0abc、と前に付加1最初の桁があるときにz、例えばzzz> - 1000。入力は小文字でなければなりません。

s=>(l=s[s.length-1],r=s.slice(0,-1),l=='z'?f(r||'0')+0:r+(parseInt(l,36)+1).toString(36))

説明

この式は、(A, B, C)実際には「Aを実行し、次にBを実行し、次にCを返す」ことを意味します。これを利用して、コードで再利用する変数を宣言します。s「string」の略で、l「last」、r「rest」を意味します。

/*1*/ s=>(
/*2*/   l=s[s.length-1],
/*3*/   r=s.slice(0,-1),
/*4*/   l=='z'
/*5*/     ? f(r||'0')+0
/*6*/     : r+(parseInt(l,36)+1).toString(36))

これは再帰的な関数です。のような典型的な文字列のaza場合、最後の文字をインクリメントするだけです(6行目を参照)- azb。ただしz、などh0gzで終わる文字列の場合、最後の文字(z)までのすべてで実行され、その代わりにa 0が置換されます(5行目を参照)- f(h0gz)= f(h0g) + 0=h0h0

||'0'5行目では、それが1長の文字列(つまり、文字列の上に呼ばれていたときに機能が働くようです'z')。それがなければ、f('')(以来と呼ばれ'z'.slice(0, -1)ている'')未定義の動作を持っている、(文字通り-それを自分で試してください)、それは駄目ません。期待される結果がf('z')ある'10'私たちから得るものである、f('0') + 0我々が使用するので、||'0'。(通常の場合の||'0'邪魔にならないため、特に有用です- 少なくとも1長さ(rs少なくとも2長)-ストリングは長さが0の場合にのみ偽であるため。)

文字列をインクリメントする方法は、他のJSエントリで使用されるものと同じです。base-36の「数値」を実際の数値に変換し、1を加算してからbase-36に変換します。実際に 'z'をインクリメントすることはないため、 'z'のインクリメント1'z'-> '10')を心配する必要はありません(4行目と6行目を参照してください:最後の文字は 'z'でない場合にのみインクリメントされます)。

また、実際には一度に複数の文字を操作することはなく、文字列の最後の文字のみを操作するため、先行ゼロを破棄するリスクはありません。残りの文字は、文字列と前置された後書きをスライスするときにきれいに切り取られます。


2

クリーン89 84バイト

import StdEnv
@['9':t]=['a':t]
@['z':t]=['0': @t]
@[c:t]=[inc c:t]
r=reverse

r o@o r

オンラインでお試しください!

Laikoniのおかげで短いソリューション。

クリーン、115バイト

使い始めると大好きです limit(iterate...

import StdEnv
@'9'='a'
@c=inc c
?[h,'{':t]=[@h,'0': ?t]
?[h:t]=[h: ?t]
?e=e
$l=limit(iterate?(init l++[@(last l)]))

オンラインでお試しください!

リスト一致を使用して、ベースを変換せずに答えを生成します。

  • ? :: [Char] -> [Char] 繰り越しを実行します。
  • @ :: Char -> Char'9'との間のギャップを考慮して、1ずつ増加します'z'
  • $ :: [Char] -> [Char]最後の文字をインクリメントし?、値が安定するまで適用します。

1
派手ではないが、かなり短い:オンラインで試してみてください!
ライコニ

@ライコニ編集、ありがとう!
18

2

R152 123バイト

function(x)f(utf8ToInt(x),10)
f=function(x,n,y=x[n]){x[n]=y+(y==57)*39+(y==122)*(-75)+1
"if"(y==122,f(x,n-1),intToUtf8(x))}

オンラインでお試しください!

まったく異なるアプローチ。ASCIIコードポイントを取得し、s がなくなるまで右端のコードポイントを再帰的に「インクリメント」します0((57)からa(97)にジャンプし、z(122)から0(48)に戻ります)z。文字列に戻します。

古いバージョン

function(s,w=gsub("(z)(?=\\1*$)","0",s,,T),x=regexpr(".0*$",w)[1],y=substr(w,x,x),z=chartr("0-9a-z","1-9a-z0",y))sub(p(y,"(0*$)"),p(z,"\\1"),w)
p=paste0

オンラインでお試しください!

これはすべてテキスト操作であり、Rコードゴルフとは連動しません。

z文字列の最後のすべてをに置き換えます0。新しく作成された末尾0sの前の最後の要素の場所を見つけます。次のベース36桁を見つけます。変更を加えます。オンラインチューリングマシンシミュレータソリューションをかろうじて打ち負かしたことを嬉しく思います。


これよりもずっと上手くできるよ!! あなたが正しい組み込みを見つけることができるなら、私は72バイトを持っていると思います
ジュゼッペ

おっと...この挑戦はコードボウリングだと思った!
ngm

まあ組み込みはstrtoiあなたが始めることです。72に下げるには、さらにいくつかのゴルフトリックがあります
ジュゼッペ

1
strtoiかなり小さい数字に制限されていますか?少し前にitめました。
ngm

ああなるほど。int制限がそれほど問題であることに気づかなかった。残念!後世のために、これは私の失敗した解決策でした:オンラインで試してみてください!
ジュゼッペ

2

星空、325バイト

     + , , , , , , , , , ,     +      +   +   +`* +          + +* + +**      + * +* * '    +           + +* +* +* +*      +* `     +  + +                + +  *       +* *  '    +      +*           + +* +* +*  `   +   +           + +* +  *  **   +  + +'    +    +   ` +           + +* +  *    * .           + +* +  *   * +   '

オンラインでお試しください!

説明:

Put-a-zero-at-the-base-of-the-stack
|     +
Read-10-digits
| , , , , , , , , , ,
Initialise-next-stack
|     +
Initialise-carry-bit
|      +
|   +   +
Do
|`
    Top-of-stack:-[output-stack]-[carry-bit]-[next-value]
    Add-Carry-bit-to-digit
    |*

    Compare-with-58-("9"=57)
    | +
    5-double-triple-sub1-double
    |          + +* + +**      + * +*
    Take-difference
    | *
    If-one-above-"9"
    | '
        set-to-"a"=97=6-double-double-double-double-add1
        |    +
        |           + +* +* +* +*      +*
    | `

    Initialise-next-carry-bit
    |     +
    |  +

    Compare-with-123-("z"=122)
    | +
    11-squared-add2
    |                + +  *       +*
    Take-difference
    | *
    If-one-above-"z"
    |  '
        Delete-current-value
        |    +
        set-carry-bit
        |      +*
        Set-to-"0"=48
        |           + +* +* +*
    |  `

    Push-value-to-stack
    |   +   +
    |           + +* +  *
    |  **

    |   +  +
While-next-value-is-not-null
| +'

Pop-carry-bit-and-null-string-terminator
|    +    +
Do
|   `
    Get-top-value
    | +
    |           + +* +  *
    |    *

    Print-it
    | .

    Pop-the-value-off-the-stack
    |           + +* +  *
    |   *
While-stack-is-not-null
| +   '



1

Pyke、11バイト

? b!!R+bhbt

ここで試してみてください!

? b         - Change default base of `base` command to 36 
            -  This is kind of clever because it modifies the list of characters 
            -  the command uses to exactly the same as it was originally, whilst
            -  forcing an overwrite from the default settings of 10. 
            -  The default setup works for base 36, you just have to specify it
            -  time when using the command.
            -  Literally `b.contents = modify(b.contents, func=lambda: noop)`
   !!       - The previous command returns `0123456789abcdefghijklmnopqrstuvwxyz`
            -  So we convert it into a 1 with (not not ^) for the following command:
     R+     -     "1"+input
       b    -    base(^, 36)
        h   -   ^ + 1
         b  -  base(^, 36)
          t - ^[1:]

次の言語変更で2バイト短くなる可能性があります:16進モードを使用する場合、base_36およびbase_10の使用をすべてbase_92に変更します(このコンテキストでは実際にはベース92ではありません)




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.