DC, 104 바이트
터미널에서 입력이 이루어지고 출력이 인쇄되며 스택에도 인쇄됩니다.
이것은? 연산자를 사용하려면 dc -e "<solution>"
또는 을 사용해야 dc <file with solution in it>
합니다.
아무도 답을 보지 않고 내 대답을 볼 수는 없지만 DC에서 문제를 해결하는 것을 좋아합니다. 지금 까지이 스레드에서 가장 효율적인 솔루션이지만 어쨌든 게시 할 것이라고 생각했습니다.
1sb?sn[lesi]ss[lble1+dse^dln=sln>c]sc[liSflq1+sq]sm[Lfplq1-dsq0<p]dsp[lb1+sb0si0selcxli0!=mlbln!=h]dshxx
스타터 물건
1sb Store 1 in register b
?sn Store user input in register n
[lesi]ss A macro to copy the e to the i register, stored in the s register
결과가 목표보다 크거나 같을 때까지 모든 거듭 제곱으로 밑을 올리는 매크로
[lble1+dse^dln=sln>c]sc
[lb ] load our base num (register b)
[ le ] load our exponent (register e)
[ 1+dse ] add 1 to the exponent, copy and store in the e register
[ ^d ] raise the base to the exponent and copy it
[ ln=s ] load the user input, if that is equal to the power result run the macro in register s
[ ln>c] load the user input, if it's greater than the power result run the macro in register c (this one)
[ ]sc save this macro in register c
위의 지수 매크로에서 찾은 유효한 지수 값을 다른 스택에 저장하는 매크로
[liSflq1+sq]sm
[liSf ] copy the i register to the top of the stack in register f
[ lq1+sq] add 1 to the q register
[ ]sm save this macro in the m register
2에서 목표 번호까지 모든 염기를 통해 2 배 이상의 매크로 (매크로 c)를 실행하는 매크로
[lb1+sb0si0selcxli0!=mlbln!=h]dsh
[lb1+sb ] add 1 to the base number
[ 0si0se ] reset the i and e registers (previously found value and exponent
[ lcx ] load and run the c macro
[ li0!=m ] load the result of the c macro and if it's not 0, run m to save it to the f stack
[ lbln!=h] if our base number is not equal to our target number, run macro h (this macro)
[ ]dsh duplicate this macro and save one copy, so that one is left on the stack to run later
f 스택에서 값을 인쇄하는 매크로
[Lfplq1-dsq0<p]dsp
[Lfp ] load the top value from the f register and print it
[ lq1-dsq ] load the q register and subtract one from it and save it
[ 0<p] if the q register is greater than 0, run macro p (this macro) again
[ ]dsp duplicate this macro and save one copy, so that one is left on the stack to run later
xx finally run the two macros on the stack (h and then p)
[1 2 3 6]
마지막 답변에 대한 답변이 인쇄 됩니다. 또한 인쇄 할 수[6 3 2 1]
,[1.0 2.0 3.0 6.0]
또는[6.0 3.0 2.0 1.0]
?