分解一个数字!


16

您的任务是使用以下格式分解数字。

这与基本转换类似,不同之处在于digits,您列出了values,而不是在基本列表中列出,这样列表就加到了输入上。

如果给定的基为n,则列表中的每个数字都必须采用的形式k*(n**m),其中0<=k<nm在整个列表中都是唯一的。

眼镜

  • 任何合理的输入/输出格式。您的程序/功能需要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 

Answers:


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 '16

4

JavaScript(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哦,这是允许的,derp。
Maltysen '16

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%.*}

一个未命名的块,期望基数和数字位于堆栈的顶部(按此顺序),并用数字列表(包括内部零,不带前导零)替换它们。

在这里测试。

说明

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

Python 2,44字节

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

输出从最低有效到最高,带有许多额外的零。

输出最高至最低:

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)吗?
暴民埃里克

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ谢谢,我不认为倒车是一种选择。只做就足够了range(n)
xnor

1

Ruby,35 34字节

这是一个港口XNOR的Python的答案,但它打印n时间,以便测试用例727 20版画7320400,和724 0秒。欢迎打高尔夫球。

编辑: 1字节感谢乔丹。

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

您可以使用保存一个字节n.times{|i|p ...}
约旦

1

Mathematica,12个字节(无竞争)

我不知道Wolfram Research在看完OP的挑战后是否创建了此功能!

NumberExpand

11.0版(2016年8月)中引入了此功能。


1
我编辑,使这个非竞争,因为数学11.0 07月8发布
漏尼姑

1

Mathematica,46个字节

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

说明:

In [1]:= IntegerDigits [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

                    0 2 0 0 0 0

                    0 0 3 0 0 0

                    0 0 0 4 0 0

                    0 0 0 0 5 0

                    0 0 0 0 0 6

In [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

0

JavaScript(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 '16

@ ericw31415这是ES7幂运算符
user81655 '16

哦,这是实验性的。这就是为什么我的浏览器不支持它。
ericw31415 '16

0

JavaScript,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

当然有办法避免吗?(删除了四个字节)
Leaky Nun

0

,13字节

Wa-:Pa%oo*:b

事实证明,这样做比使用TB基本转换运算符要短。该代码运行while循环,直到a(数字)为0。在每次迭代时,它都会打印a%o并减去ao被预先初始化1并乘以b(基数)每次迭代。(这种方法保留了所有优势,0而且还增加了领先优势0。)

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.