기수가 주어진 문자열의 정수


13

정수를 2에서 62 사이의 기수로 주어진 숫자 표현으로 변환하는 가장 짧은 함수를 작성하십시오. 예 :

to_string(351837066319, 31) => "codegolf"

2
예제에서 소문자가 먼저 나온다는 것을 알 수 있습니다. 즉, 기본 62의 숫자는 0-9, az, AZ 순서로 표시됩니까?
sepp2k

그렇습니다.
Michiel de Mare

at 0:00멍청 아, 완벽 해
Zacharý

답변:


4

dc-43 자

[sb[58-]s_[lb~dZ39*+dB3<_9+rd0<xrP]dsxxk]sf

스택에 두 개의 인수 만 포함되어 있다고 가정하면 이것을 약간 줄일 수 있습니다.

[[58-]s_dSb~dZ39*+dB3<_9+SadLbr0<fLaPc]sf

독립형 프로그램으로서 37 자만 필요합니다 :

?o[58-]s_[O~dZ39*+dB3<_9+rd0<xrP]dsxx

을 사용하는 대신 [39+]sz9<z간단히을 사용 Z39*+하여 한 자리 숫자에 39를, 두 자리 숫자에 78을 추가합니다. 대신에 113우리는 B3( AD또한 작동합니다)를 사용합니다.


4

루비 1.8-75 자, 재귀

f=proc{|n,b|(n<b ? "":f[n/b,b])+([*'0'..'9']+[*'a'..'z']+[*'A'..'Z'])[n%b]}

재귀없이

f=proc{|n,b|d=[*'0'..'9']+[*'a'..'z']+[*'A'..'Z'];s=d[n%b];s=d[n%b]+s while(n/=b)>0;s}

(둘 다 Dogbert의 1.9 솔루션을 기반으로합니다.)


4

파이썬-86

from string import*
def t(n,r,s=''):
 while n:s=printable[n%r]+s;n/=r
 return s or'0'

문자열 임포트 트릭에 대한 Hoa Long Tam의 크레딧


3

파이썬, 93 99

from string import *
d=digits+letters
def t(n,b):
 s=''
 while n>0:s=d[n%b]+s;n/=b
 return s or '0'

편집 : 빈 문자열 경우 "또는 '0'"추가


n = 0이면 실패하고 '0'을 반환해야 할 경우 빈 문자열을 반환합니다. 어쨌든 문자열 트릭에 +1
Juan

2

dc, 61 자

[sr[lr~rd0<x]dsxxk[39+]sa[58-]sb[d9<ad78<b48+anz0<p]dspxIP]sf

다음으로 실행 :

dc -e'[sr[lr~rd0<x]dsxxk[39+]sa[58-]sb[d9<ad78<b48+anz0<p]dspxIP]sf' -e'351837066319 31 lfx'

또는:

dc -f base.dc -e '351837066319 31 lfx'

설명 : 우리는 숫자와 스택을 기준으로합니다. sr베이스를 레지스터 r에 저장합니다. 재귀 함수 는 숫자를 base의 숫자로 [lr~rd0<x]dsxx분해합니다 . 첫 번째 숫자는 항상 0이며 스택에서 제거됩니다 (기본적으로 0도 설정되므로 nop와 같습니다). 그런 다음 재귀 함수 는 함수 a ( ) 및 b ( )를 사용하여 각 숫자를 ASCII로 출력합니다 . 개행을 출력합니다. 이 함수는 register에 저장되며에 의해 호출 될 수 있습니다 .TOSregister rk[48+d57<ad122<banz0<p]dspx[39+]sa[58-]sbIPflfx


1
48+를 끝까지 이동하면 2를 저장합니다 (57과 122는 모두 문자를 떨어 뜨림). 또한 사소한 감독은 함수로 스택에 다른 것이 없다고 가정 할 수는 없지만 루프를 병합하면 문제가 제거됩니다 (몇 글자를 절약 할 수도 있음).
Nabb

2

루비 -72 70 59 자

f=->n,b{(n<b ? "":f[n/b,b])+[*?0..?9,*?a..?z,*?A..?Z][n%b]}

재귀없이 70 자

f=->n,b{d=*?0..?9,*?a..?z,*?A..?Z;s=d[n%b];s=d[n%b]+s while(n/=b)>0;s}

테스트

irb(main):080:0> f[351837066319, 31]
=> "codegolf"
irb(main):081:0> f[0, 31]
=> "0"

1

하스켈, 109 자

m=divMod
d(0,x)b=[f x]
d(r,x)b=f x:d(m r b)b
f=(!!)$['0'..'9']++['a'..'z']++['A'..'Z']
s x b=reverse$d(m x b)b

1

Befunge-53 x 2 = 106 자

또는 프로그램의 다른 부분을 왼쪽 하단을 통해 라우팅하려는 경우 53 + 46 = 99 자입니다.

11p01-\>:11g%\11g/:#v_$>:1+!#v_:45+`!#v_:75*`!#v_   v
       ^            <  ^,    $# +"0"  < +"'"   <-":"<

먼저 스택에 변환 할 숫자를 배치 한 다음 기수를 놓고 왼쪽 상단부터 오른쪽으로이 함수를 입력하십시오. Befunge는 문자열 변수를 지원하지 않기 때문에 문자열을 출력하고 $아래 에서 아래 로 내려갑니다. (1,1)기수 저장을 위해 셀이 필요합니다 .

예를 들어 주어진 예를 들어 351837066319입력에 넣고 실행하십시오.

&56*1+    11p01-\>:11g%\11g/:#v_$>:1+!#v_:45+`!#v_:75*`!#v_   v
                 ^            <  ^,    $# +"0"  < +"'"   <-":"<
                                       @

1

골프 스크립트-32 자

{base{.9>39*+.74>58*48--}%''+}:f

1

루비 1.9 - 80 74 68

t =-> n, b {d = ? 0 ..? 9 ,? a ..? z, *? A ..? Z; s = ''; (s = d [n % b] + s; n / = b) n> 0; s} 동안

빈 문자열의 경우 '0', 95 89 82 자 :

t=->n,b,s=''{d=*?0..?9,*?a..?z,*?A..?Z;(s=d[n%b]+s;n/=b)while n>0;s.empty?? ?0: s}

루비 1.9-불행히도 기본 36까지만 작동합니다.

t=->n,b{n.to_s(b)}

2
당신은 대체 할 수 ]+[와 함께 '들 ,.
Nemo157

1

배쉬, 79 자

f(){
dc<<<$2o$1p|perl -pe"y/A-Z/a-z/;s/ \d+/chr$&+($&<10?48:$&<36?87:29)/ge"
}

BC_BASE_MAX는 16으로 문서화되어 있습니다. 나는 기적이 샘플 입력에서 출력을 만드는 기적을 모르겠지만 대부분의 다른 염기에 대해 가비지 (즉, 영숫자가 아닌 문자)를 출력합니다.
JB

@ JB : 어떤 BC를 사용하고 있습니까? GNU bc가 작동해야합니다. sysconf(_SC_BC_BASE_MAX)내 시스템에서 99를 반환하면 최소 16이 필요합니다.
ninjalj

@ JB : 또한 버그가있는 이전 개정판은 질문 요구 사항에 대해 방황했습니다.
ninjalj

기원전 1.06. 이제 당신은 그것을 언급했습니다. 맨 페이지에서 그림을 얻었지만 잘못 읽었습니다. 16은 입력 기본 한계입니다. 출력 기준 한도는 999입니다. 먼저 이전 버전에서 시도했지만 지금 다시 살펴 보겠습니다.
JB

1
나는 이것이 소문자 대신에 11-16 진수에 대해 대문자를 출력한다고 생각합니다. dc대신을 사용하여 기본 변환시 일부를 저장할 수 있습니다 bc.
Nabb




-1

자바 스크립트 170 바이트

function f1(ni,nr){
let s1='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
let s2='';
while(ni>0){
s2=s1[ni%nr]+s2;
ni=Math.floor(ni/nr);
}
return s2;
}

공백 제거, 변수 이름 단축, 쓸모없는 코드 (예 :) 제거 let및 다소 긴 문자열 감소와 같이 훨씬 더 많은 방법으로 골프를 즐길 수 있습니다
Jo King

이 질문에는 code-golf 태그가 지정 되어 있으므로 가능한 한 코드를 줄이려고 노력해야합니다. 내가 언급 한 것들의 빠른 골프는 이것을 125 바이트로 만들 수 있으며 , 더 짧아 질 것이 더 있습니다
Jo King

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