정수를 2에서 62 사이의 기수로 주어진 숫자 표현으로 변환하는 가장 짧은 함수를 작성하십시오. 예 :
to_string(351837066319, 31) => "codegolf"
at 0:00멍청 아, 완벽 해
정수를 2에서 62 사이의 기수로 주어진 숫자 표현으로 변환하는 가장 짧은 함수를 작성하십시오. 예 :
to_string(351837066319, 31) => "codegolf"
at 0:00멍청 아, 완벽 해
답변:
[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또한 작동합니다)를 사용합니다.
[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
또는 프로그램의 다른 부분을 왼쪽 하단을 통해 라우팅하려는 경우 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" < +"'" <-":"<
@
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)}
]+[와 함께 '들 ,.
f(){
dc<<<$2o$1p|perl -pe"y/A-Z/a-z/;s/ \d+/chr$&+($&<10?48:$&<36?87:29)/ge"
}
sysconf(_SC_BC_BASE_MAX)내 시스템에서 99를 반환하면 최소 16이 필요합니다.
dc대신을 사용하여 기본 변환시 일부를 저장할 수 있습니다 bc.