숫자를 분해하십시오!


16

당신의 임무는 아래 형식을 사용하여 숫자를 분해하는 것입니다.

이것은 기본 변환과 유사, 대신을 나열하는 것을 제외시켰다 digits기본에, 당신은 목록 values목록 입력까지 추가하도록.

주어진베이스 인 경우 n, 다음 목록의 각 수의 형식이어야합니다 k*(n**m), 0<=k<n그리고 m목록에서 고유합니다.

명세서

  • 합리적인 입 / 출력 형식 프로그램 / 기능은 2 개의 입력을 받아서 목록을 출력합니다.
  • 출력 목록은 임의의 순서로있을 수 있습니다.
  • 0 제외하거나 포함 할 수 있습니다.
  • 선행 0이 허용됩니다.
  • 내장이 허용 됩니다.

테스트 케이스

number base   converted list
input1 input2 output
123456 10     [100000,20000,3000,400,50,6] or [6,50,400,3000,20000,100000]
11     2      [8,2,1] or [0,0,0,0,8,0,2,1]
727    20     [400,320,7]
101    10     [100,1] or [100,0,1]

채점

이것은 입니다. 바이트 단위의 최단 솔루션이 승리합니다.

code-golf  number  sequence  number-theory  base-conversion  code-golf  bitwise  hashing  code-golf  string  ascii-art  whitespace  code-golf  math  code-golf  code-golf  image-processing  counting  code-golf  math  arithmetic  checksum  code-golf  code-golf  math  arithmetic  number-theory  code-golf  array-manipulation  random  code-golf  string  code-golf  math  ascii-art  base-conversion  code-golf  graphical-output  geometry  3d  code-golf  math  linear-algebra  matrix  code-golf  math  number  sequence  code-golf  array-manipulation  code-golf  math  matrix  linear-algebra  code-golf  number  sequence  counting  code-golf  string  code-golf  string  restricted-source  quine  sorting  code-golf  string  geometry  code-golf  string  code-golf  networking  code-golf  base-conversion  code-golf  math  matrix  code-golf  arithmetic  linear-algebra  matrix  code-golf  number  arithmetic  grid  code-golf  number  source-layout  code-golf  string  bitwise  checksum  code-golf  array-manipulation  code-golf  string  probability-theory  code-golf  tips  code-golf  sequence  code-golf  string  math  sequence  calculus  code-golf  string  palindrome  bioinformatics  code-golf  math  combinatorics  counting  permutations  code-golf  parsing  logic-gates  code-golf  arithmetic  number-theory  combinatorics  code-golf  math  sequence  polynomials  integer  code-golf  string  ascii-art  chess  code-golf  string  code-golf  number  code-golf  string  ascii-art  parsing  code-golf  code-golf  number  natural-language  conversion  code-golf  arithmetic  code-golf  string  code-golf  ascii-art  decision-problem 

답변:


5

젤리 , 7 바이트

lr0⁹*×b

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

작동 원리

lr0⁹*×b  Main link. Arguments: x (integer), n (base)

l        Compute the logarithm of x to base n.
 r0      Range; yield all non-negative integers less than the logarithm, in
         decreasing order.
   ⁹*    Elevate n to all integers in that range.
      b  Yield the list of base-n digits of x.
     ×   Multiply each digit by the corresponding power of n.

아, 반전 된 범위 ...
Leaky Nun

너무 적은 문자로 달성 할 수있는 것은 매우 인상적입니다
t-clausen.dk

4

자바 스크립트 (ES6), 47 바이트

f=(n,b,p=1,q=b*p)=>[...n<q?[]:f(n,b,q),n%q-n%p]
document.write("<pre>"+
[ [ 123456, 10 ], [ 11, 2 ], [ 727, 20 ], [ 101, 10 ] ]
.map(c=>c+" => "+f(...c)).join`\n`)


스 니펫을 포함 시키시겠습니까? :)
Leaky Nun


3

Pyth- 12 11 바이트

FGITW 만 짧을 수 있습니다.

.e*b^Qk_jEQ

테스트 스위트 .


_바이트를 제거하십시오 :)
Leaky Nun

@KennyLau는 FGITW를 의미합니다. "서쪽에서 가장 빠른 총"을 의미합니다. 이는 먼저 응답하는 사람들이 더 나은 답변보다 더 많은 찬사를받는 현상입니다.
Maltysen

@KennyLau 오, 그게 허용됩니다.
Maltysen

3

J, 20 19 바이트

[(]*(^<:@#\.))#.inv

용법

   f =: [(]*(^<:@#\.))#.inv
   10 f 123456
100000 20000 3000 400 50 6
   2 f 11
8 0 2 1
   20 f 727
400 320 7
   10 f 101
100 0 1

설명

[(]*(^<:@#\.))#.inv
              #.      Given a base and list of digits in that base,
                      converts it to an integer in base 10
                inv   Power conjunction by -1, creates an inverse
                      Now, this becomes a verb that given a base and an integer in base 10,
                      creates a list of digits in that base representing it
[                     Select the base and pass it along
         #\.          Tally each suffix of the list of base digits,
                      Counts down from n to 1
      <:              Decrements each value
        @             More specifically, decrement is composed with the tally and applied
                      together on each suffix
     ^                Raises each value x using base^x
  ]                   Selects the list of base digits
   *                  Multiply elementwise between each base power and base digit

2

CJam, 16 바이트

{1$b\1$,,f#W%.*}

이름이없는 블록은 스택의 맨 위에있는 기본과 숫자 (순서대로)를 예상하고 숫자 목록 (앞의 0이없는 내부 0 포함)으로 대체합니다.

여기에서 테스트하십시오.

설명

1$  e# Copy base b.
b   e# Compute base-b digits of input number.
\   e# Swap digit list with other copy of b.
1$  e# Copy digit list.
,   e# Get number of digits M.
,   e# Turn into range [0 1 ... M-1].
f#  e# Map b^() over this range, computing all necessary powers of b.
W%  e# Reverse the list of powers.
.*  e# Multiply each digit by the corresponding power.

2

TSQL, 68 바이트

DECLARE @ INT=123456,@z INT=10
DECLARE @l INT=1WHILE
@>0BEGIN PRINT @%@z*@l SELECT @/=@z,@l*=@z END

1

파이썬 2, 44 바이트

lambda n,b:[n/b**i%b*b**i for i in range(n)]

많은 여분의 0으로 최소 중요도에서 최대 출력까지.

가장 중요하게 출력하려면 :

f=lambda n,b,c=1:n*[1]and f(n/b,b,c*b)+[n%b*c]

n장소 값 승수를 스케일 업하는 동안 divmod를 사용 하여 숫자를 반복적으로 반복하여 반복 c합니다.


두 번째 버전의 경우 range(-n,1)대신 할 수 range(n,-1,-1)없습니까?
Outgolfer Erik

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ 고마워, 나는 반대로가는 것이 옵션이라는 것을 보지 못했습니다. 그것만으로도 충분합니다 range(n).
xnor

1

루비, 35 34 바이트

이것은의 포트입니다 XNOR의 파이썬 대답 하지만, 인쇄 n테스트 케이스 있도록 시간을 727 20인쇄 7, 320, 400, 724 개 0의. 골프 제안을 환영합니다.

편집 : Jordan 덕분에 1 바이트.

->n,b{n.times{|i|p n/b**i%b*b**i}}

로 바이트를 저장할 수 있습니다 n.times{|i|p ...}.
Jordan

1

Mathematica, 12 바이트 (비경쟁)

OP의 도전을보고 Wolfram Research가이 기능을 만들 었는지 궁금합니다!

NumberExpand

이것은 버전 11.0 (2016 년 8 월)에서 도입되었습니다.


1
Mathematica 11.0이 8 월 8 일에 출시 되었기 때문에 비경쟁이되도록 편집했습니다.
Leaky Nun

1

수학, 46 바이트

DiagonalMatrix@IntegerDigits@##~FromDigits~#2&

설명:

In [1] : = 정수 값 [123456,10]                                                

Out [1] = {1, 2, 3, 4, 5, 6}

In [2] : = DiagonalMatrix @ IntegerDigits [123456,10] // MatrixForm                   

Out [2] // MatrixForm = 1 0 0 0 0

                    0 2 0 0 0 0

                    0 3 0 0 0

                    0 0 4 0 0

                    0 0 0 5 0

                    0 0 0 0 6

에서 [3] : = DiagonalMatrix @ IntegerDigits [123456,10] ~ FromDigits ~ 10                   

Out [3] = {100000, 20000, 3000, 400, 50, 6}

의 예기치 않은 사용 DiagonalMatrix. 이 경우 어떻게 작동하는지 친절하게 설명하십시오.
DavidC

0

라켓, 82 바이트

(define(d n b[a'()])(if(< n 1)a(d(/ n b)b(cons(*(modulo(floor n)b)(length a))a))))

나는 승자입니다!


1
너무 많은 공간이 <n 1작동 하지 않습니다? (나는 라켓을 전혀 모른다)
Leaky Nun

1
작동하지 않습니다. 식별자는 공백, 괄호 / 중괄호 / 중괄호 및 기타 기호로만 구분됩니다 '. 그래도 좋은 질문입니다.
Winny

(그리고 <함수가 바인딩 된 변수 일뿐입니다)
Winny

0

자바 스크립트 (ES7), 68 바이트

n=>b=>(c=[...n.toString(b)]).map(d=>b**--p*parseInt(d,b),p=c.length)

테스트

Math.pow브라우저 호환성을 위해 테스트를 사용 합니다.

f=n=>b=>(c=[...n.toString(b)]).map(d=>Math.pow(b,--p)*parseInt(d,b),p=c.length)
document.write("<pre>"+
[ [ 123456, 10 ], [ 11, 2 ], [ 727, 20 ], [ 101, 10 ] ]
.map(c=>c+" => "+f(c[0])(c[1])).join`\n`)


**올바른 JavaScript 연산자가 아니십니까?
ericw31415

@ ericw31415 ES7 지수 연산자 입니다.
user81655

아, 실험 중입니다. 그래서 내 브라우저가이를 지원하지 않습니다.
ericw31415

0

자바 스크립트, 75 바이트

(a,b)=>[...a.toString(b)].reverse().map(($,_)=>Math.pow(b,_)*parseInt($,b))

그냥 재미를 위해 :) 그것은 더 골프 수 있지만, 어떻게 확신하지 않습니다.

ES7, 66 바이트

ES7이 허용되면 다음을 수행하십시오.

(a,b)=>[...a.toString(b)].reverse().map(($,_)=>b**_*parseInt($,b))

0

O , 17 바이트

jQb`S/l{#Qn^*p}d

두 가지 메모 :

  1. 기본 변환 관련 버그로 인해 세 번째 테스트 사례가 작동하지 않습니다. phase / o # 68을 참조하십시오 .

  2. 온라인 통역사에서는 작동하지 않습니다. b아직 구현되지 않았습니다.


0

> <>, 28 바이트

:&\
&*>:{:}$%:n$}-:0=?;ao$&:

프로그램 시작시 입력 값이 스택에있을 것으로 예상합니다.

> <>에 목록 객체가 없으므로 출력은 줄 바꿈으로 구분 된 값 목록으로 표시되며 첫 번째 줄에 '단위'가 있습니다. 예제 실행 :

Input: 
11 2

Ouput:
1
2
0
8

@OP, 이것이 수용 가능한 출력 형식이 아닌 경우 알려 주시면 그에 따라 답변을 편집하겠습니다.


0

PHP, 55 바이트

Windows-1252 인코딩을 사용합니다.

for($n=$argv[1];$d+$n-=$d=$n%$argv[2]**++$i;)echo$d,~Ó;

다음과 같이 실행하십시오 ( -d미학에만 추가됨).

php -d error_reporting=30709 -r 'for($n=$argv[1];$d+$n-=$d=$n%$argv[2]**++$i;)echo$d,~Ó; echo"\n";' 123056 10

0

C #, 77 바이트

IEnumerable _(int n,int b){int m=1;while(n>0){yield return n%b*m;n/=b;m*=b;}}

0

실제로 17 바이트 (비경쟁)

;a¡;lrR(♀ⁿ@♂≈♀*;░

온라인으로 사용해보십시오!

도전 후에 명령이 추가 되었으므로이 제출은 경쟁이 아닙니다 .

설명:

;a¡;lrR(♀ⁿ@♂≈♀*;░
                   initial stack: [b n] (b = base, n = number)
;                  dupe b
 a                 invert stack
  ¡                n as a base-b integer
   ;lrR            dupe, length, range, reverse
       (♀ⁿ         raise b to each power in range
          @♂≈      create list of integers from base-b string
             ♀*    pairwise multiplication
               ;░  filter out zeroes


0

, 13 바이트

Wa-:Pa%oo*:b

구식 방식을 사용하면 TB기본 변환 연산자를 사용하는 것보다 짧습니다 . 코드는 a(숫자)가 (이)가 될 때까지 while 루프를 실행합니다 0. 반복 할 때마다를 인쇄 a%o하고 빼 a냅니다. 각 반복에 대해 ( o초기) 미리 초기화되고 1곱해집니다 b. (이 접근법은 모든 것을 유지 0하고 선행을 추가합니다 0.)

온라인으로 사용해보십시오!

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