Phân hủy một con số!


16

Nhiệm vụ của bạn là phân tách một số bằng định dạng bên dưới.

Điều này tương tự như chuyển đổi cơ sở, ngoại trừ việc thay vì liệt kê digitstrong cơ sở, bạn liệt kê danh sách values, sao cho danh sách thêm vào đầu vào.

Nếu cơ sở đã cho là n, thì mỗi số trong danh sách phải ở dạng k*(n**m), ở đâu 0<=k<nmlà duy nhất trong toàn danh sách.

Thông số kỹ thuật

  • Bất kỳ định dạng đầu vào / đầu ra hợp lý. Chương trình / chức năng của bạn có 2 đầu vào và đầu ra một danh sách.
  • Danh sách đầu ra có thể theo thứ tự bất kỳ.
  • 0 có thể được loại trừ hoặc bao gồm.
  • Dẫn đầu 0được cho phép.
  • Xây dựng được cho phép .

Tủ thử

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]

Chấm điểm

Đây là . Giải pháp ngắn nhất trong byte thắng.

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 

Câu trả lời:


5

Thạch , 7 byte

lr0⁹*×b

Hãy thử trực tuyến! hoặc xác minh tất cả các trường hợp thử nghiệm .

Làm thế nào nó hoạt động

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.

À, phạm vi đảo ngược ...
Leaky Nun

Thật ấn tượng với những gì có thể đạt được với rất ít nhân vật
t-clausen.dk

4

JavaScript (ES6), 47 byte

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`)


Muốn bao gồm một đoạn? :)
Nữ tu bị rò rỉ

3

Thạch, 12 byte

bLR’*@€U
b×ç

Có thể ngắn hơn ...

Hãy thử trực tuyến!



3
lḞr0⁴*×bnên làm việc.
Dennis

Về mặt kỹ thuật, 0r⁴*³%Ihoạt động là tốt.
Dennis

Cào đó. lr0⁴*×bcó cùng số byte, không có tất cả các số 0 bổ sung.
Dennis

@Dennis Điều đó chắc chắn đủ khác nhau để đăng dưới dạng một câu trả lời riêng biệt.
Doorknob

3

Pyth - 12 11 byte

Chỉ cần một FGITW, có thể ngắn hơn.

.e*b^Qk_jEQ

Phòng thử nghiệm .


Xóa _một byte :)
Leaky Nun

@KennyLau có nghĩa là FGITW, nó có nghĩa là "Súng nhanh nhất ở phương Tây", một hiện tượng mà những người trả lời đầu tiên nhận được nhiều sự ủng hộ hơn là những câu trả lời tốt hơn.
Maltysen

@KennyLau oh được phép, derp.
Maltysen

3

J, 20 19 byte

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

Sử dụng

   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

Giải trình

[(]*(^<:@#\.))#.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 byte

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

Một khối không tên dự kiến ​​cơ sở và số trên đầu ngăn xếp (theo thứ tự đó) và thay thế chúng bằng danh sách chữ số (bao gồm các số 0 bên trong, không có số 0 đứng đầu).

Kiểm tra nó ở đây.

Giải trình

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 byte

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

1

Python 2, 44 byte

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

Đầu ra từ ít quan trọng nhất đến hầu hết, với nhiều số 0 bổ sung.

Để đầu ra quan trọng nhất đến ít nhất:

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

Lặp lại, lặp đi lặp lại các chữ số nvới divmod trong khi nhân rộng hệ số nhân giá trị địa điểm c.


Đối với phiên bản thứ hai, bạn không thể làm gì range(-n,1)thay vì range(n,-1,-1)?
Erik the Outgolfer 18/07/2016 lúc

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Cảm ơn, tôi không thấy rằng đi ngược lại là một lựa chọn. Nó thậm chí đủ để làm range(n).
xnor

1

Ruby, 35 34 byte

Đây là một cảng Python câu trả lời XNOR của , nhưng nó in nlần vì vậy các trường hợp thử nghiệm 727 20in 7, 320, 400, và 724 0s. Gợi ý chơi golf chào mừng.

Chỉnh sửa: 1 byte nhờ Jordan.

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

Bạn có thể lưu một byte với n.times{|i|p ...}.
Jordan

1

Mathicala, 12 byte (không cạnh tranh)

Tôi tự hỏi liệu Wolfram Research có tạo ra chức năng này hay không sau khi thấy thử thách của OP!

NumberExpand

Điều này đã được giới thiệu trong phiên bản 11.0 (tháng 8 năm 2016).


1
Tôi đã chỉnh sửa để làm cho điều này không cạnh tranh vì Mathicala 11.0 đã được phát hành vào ngày 8 tháng 8
Leaky Nun

1

Toán học, 46 byte

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

Giải trình:

Trong [1]: = IntegerDigits [123456,10]                                                

Hết [1] = {1, 2, 3, 4, 5, 6}

Trong [2]: = Dia CrossMatrix @ IntegerDigits [123456,10] // MatrixForm                   

Hết [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

Trong [3]: = Dia CrossMatrix @ IntegerDigits [123456,10] ~ FromDigits ~ 10                   

Hết [3] = {100000, 20000, 3000, 400, 50, 6}

Sử dụng rất bất ngờ DiagonalMatrix. Vui lòng giải thích làm thế nào nó hoạt động trong trường hợp này.
DavidC

0

Vợt, 82 byte

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

Tôi là người chiến thắng (!)


1
Quá nhiều không gian ... <n 1không hoạt động? (Tôi hoàn toàn không biết vợt)
Leaky Nun

1
Không, điều đó sẽ không hoạt động - các định danh chỉ được phân định bằng khoảng trắng, dấu ngoặc đơn / dấu ngoặc nhọn / dấu ngoặc nhọn và một số ký hiệu khác, như '. Đó là một câu hỏi hay, mặc dù.
Winny

(Và <chỉ là một biến có chức năng ràng buộc với nó)
Winny

0

JavaScript (ES7), 68 byte

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

Kiểm tra

Kiểm tra sử dụng Math.powđể tương thích trình duyệt.

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`)


**không phải là một toán tử JavaScript hợp lệ mặc dù phải không?
ericw31415

@ ericw31415 Đó là toán tử lũy thừa ES7 .
dùng81655

Ồ, đó là thử nghiệm. Đó là lý do tại sao trình duyệt của tôi không hỗ trợ nó.
ericw31415

0

JavaScript, 75 byte

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

Chỉ để cho vui thôi :) Nó có thể được chơi gôn nhiều hơn, nhưng tôi không chắc lắm.

ES7, 66 byte

Nếu ES7 được cho phép thì:

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

0

O , 17 byte

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

Hai lưu ý:

  1. Trường hợp thử nghiệm thứ ba không hoạt động do lỗi với chuyển đổi cơ sở. Xem pha / o # 68 .

  2. Điều này không hoạt động trong trình thông dịch trực tuyến. bchưa được thực hiện.


0

> <>, 28 byte

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

Dự kiến ​​các giá trị đầu vào sẽ xuất hiện trên ngăn xếp khi bắt đầu chương trình.

Vì> <> không có các đối tượng danh sách, đầu ra được trình bày dưới dạng danh sách giá trị được phân tách bằng dòng mới, với 'đơn vị' trên dòng đầu tiên. Một ví dụ chạy:

Input: 
11 2

Ouput:
1
2
0
8

@OP, nếu đây không phải là định dạng đầu ra chấp nhận được, hãy cho tôi biết và tôi sẽ chỉnh sửa câu trả lời cho phù hợp.


0

PHP, 55 byte

Sử dụng mã hóa Windows-1252.

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

Chạy như thế này (chỉ -dthêm tính thẩm mỹ):

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 byte

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

0

Trên thực tế, 17 byte (không cạnh tranh)

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

Hãy thử trực tuyến!

Trình này không cạnh tranh vì lệnh đã được thêm vào sau thử thách này.

Giải trình:

;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

Pip , 13 byte

Wa-:Pa%oo*:b

Làm theo cách cũ đã trở nên ngắn hơn so với sử dụng TBtoán tử chuyển đổi cơ sở. Mã chạy một vòng lặp while cho đến khi a(số) là 0. Ở mỗi lần lặp, nó in a%ovà trừ nó từ a. ođược khởi tạo trước 1và được nhân với b(cơ sở) mỗi lần lặp. (Cách tiếp cận này giữ tất cả 0s và cũng thêm một đầu 0.)

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.