Uraikan angka!

16

Tugas Anda adalah menguraikan angka menggunakan format di bawah ini.

Ini mirip dengan konversi basis, kecuali bahwa alih-alih mencantumkan digitsdalam basis, Anda mencantumkan values, sehingga daftar menambahkan hingga input.

Jika basis yang diberikan adalah n, maka setiap angka dalam daftar harus dalam bentuk k*(n**m), di mana 0<=k<ndan munik di seluruh daftar.

Spesifikasi

  • Format input / output yang masuk akal. Program / fungsi Anda membutuhkan 2 input dan output daftar.
  • Daftar output dapat dalam urutan apa pun.
  • 0 dapat dikecualikan atau disertakan.
  • Memimpin 0diizinkan.
  • Built-in diizinkan .

testcases

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]

Mencetak gol

Ini adalah . Solusi terpendek dalam byte menang.

bocor Nun
sumber

Jawaban:

5

Jelly , 7 byte

lr0⁹*×b

Cobalah online! atau verifikasi semua kasus uji .

Bagaimana itu bekerja

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.
Dennis
sumber
Ah, rentang terbalik ...
Leaky Nun
Sangat mengesankan apa yang bisa dicapai dengan begitu sedikit karakter
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`)

Neil
sumber
Ingin menyertakan cuplikan? :)
Leaky Nun
3

Jelly, 12 byte

bLR’*@€U
b×ç

Bisa lebih pendek ...

Cobalah online!

Gagang pintu
sumber
3
lḞr0⁴*×bharus bekerja.
Dennis
Secara teknis, 0r⁴*³%Iberfungsi juga.
Dennis
Gores itu. lr0⁴*×bmemiliki jumlah byte yang sama, tanpa semua nol ekstra.
Dennis
@ Dennis Itu cukup berbeda untuk dikirim sebagai jawaban terpisah.
Gagang Pintu
3

Pyth - 12 11 byte

Hanya FGITW, bisa lebih pendek.

.e*b^Qk_jEQ

Test Suite .

Maltysen
sumber
Hapus _untuk byte :)
Leaky Nun
@ KennyLau berarti FGITW, artinya "Senjata Tercepat di Barat", sebuah fenomena di mana orang yang menjawab pertama mendapatkan lebih banyak suara daripada jawaban yang lebih baik.
Maltysen
@ KennyLau oh itu diizinkan, derp.
Maltysen
3

J, 20 19 byte

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

Pemakaian

   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

Penjelasan

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

CJam, 16 byte

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

Blok tanpa nama yang mengharapkan basis dan nomor di atas tumpukan (dalam urutan itu) dan menggantinya dengan daftar digit (termasuk nol internal, tanpa nol di depan)

Uji di sini.

Penjelasan

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.
Martin Ender
sumber
2

TSQL, 68 byte

DECLARE @ INT=123456,@z INT=10
DECLARE @l INT=1WHILE
@>0BEGIN PRINT @%@z*@l SELECT @/=@z,@l*=@z END
t-clausen.dk
sumber
1

Python 2, 44 byte

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

Keluaran dari yang paling tidak penting hingga yang paling, dengan banyak nol ekstra.

Untuk menghasilkan yang paling signifikan ke paling tidak:

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

Berulang, berulang-ulang mengambil digit ndengan divmod sambil meningkatkan pengganda nilai tempat c.

Tidak
sumber
Untuk versi kedua, tidak bisa Anda lakukan range(-n,1)bukan range(n,-1,-1)?
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Terima kasih, saya tidak melihat bahwa mundur adalah suatu pilihan. Bahkan cukup untuk melakukannya saja range(n).
xnor
1

Rubi, 35 34 byte

Ini adalah port jawaban Python xnor , tetapi ia mencetak nwaktu sehingga 727 20cetakan test case dicetak7 , 320, 400, dan 7240 s. Saran golf diterima.

Sunting: 1 byte berkat Jordan.

->n,b{n.times{|i|p n/b**i%b*b**i}}
Sherlock9
sumber
Anda dapat menyimpan byte dengan n.times{|i|p ...}.
Jordan
1

Mathematica, 12 byte (tidak bersaing)

Saya ingin tahu apakah Wolfram Research menciptakan fungsi ini setelah melihat tantangan OP!

NumberExpand

Ini diperkenalkan di versi 11.0 (Agustus, 2016).

DavidC
sumber
1
Saya diedit untuk membuat ini non-bersaing karena Mathematica 11.0 dirilis pada 8 Agustus.
Leaky Nun
1

Mathematica, 46 byte

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

Penjelasan:

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

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

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

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

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

Keluar [3] = {100000, 20000, 3000, 400, 50, 6}
alephalpha
sumber
Penggunaan yang sangat tak terduga DiagonalMatrix. Mohon jelaskan cara kerjanya dalam kasus ini.
DavidC
0

Racket, 82 byte

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

Saya pemenang (!)

Winny
sumber
1
Begitu banyak ruang ... <n 1tidak berfungsi? (Saya tidak tahu Racket sama sekali)
Leaky Nun
1
Tidak ada yang tidak berfungsi - pengidentifikasi dibatasi hanya oleh spasi putih, kurung / kurung / kurung kurawal, dan beberapa simbol lainnya, seperti '. Ini pertanyaan yang bagus.
Winny
(Dan <hanya sebuah variabel dengan fungsi terikat padanya)
Winny
0

JavaScript (ES7), 68 byte

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

Uji

Penggunaan uji Math.powuntuk kompatibilitas browser.

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

pengguna81655
sumber
**bukankah operator JavaScript yang valid bukan?
ericw31415
@ ericw31415 Ini adalah operator eksponensial ES7 .
user81655
Oh, ini eksperimental. Itu sebabnya browser saya tidak mendukungnya.
ericw31415
0

JavaScript, 75 byte

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

Hanya untuk bersenang-senang :) Bisa bermain golf lebih banyak, tapi saya tidak terlalu yakin bagaimana caranya.

ES7, 66 byte

Jika ES7 diizinkan maka:

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

O , 17 byte

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

Dua catatan:

  1. Kasing uji ketiga tidak berfungsi karena bug dengan konversi basis. Lihat fase / o # 68 .

  2. Ini tidak berfungsi dalam juru bahasa online. bbelum diimplementasikan.

kirbyfan64sos
sumber
0

> <>, 28 byte

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

Mengharapkan nilai input akan ada pada stack saat program dimulai.

Karena> <> tidak memiliki objek daftar, output disajikan sebagai daftar nilai yang dipisahkan baris baru, dengan 'unit' di baris pertama. Contoh dijalankan:

Input: 
11 2

Ouput:
1
2
0
8

@OP, jika ini bukan format output yang dapat diterima, beri tahu saya dan saya akan mengedit jawabannya.

Sok
sumber
0

PHP, 55 byte

Menggunakan penyandian Windows-1252.

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

Jalankan seperti ini ( -dditambahkan hanya untuk estetika):

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

C #, 77 byte

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

Sebenarnya, 17 byte (tidak bersaing)

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

Cobalah online!

Pengajuan ini tidak bersaing karena perintah ditambahkan setelah tantangan ini.

Penjelasan:

;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
Mego
sumber
Tentunya ada cara untuk menghindari ? (Golf off empat byte)
Leaky Nun
0

Pip , 13 byte

Wa-:Pa%oo*:b

Melakukannya dengan cara kuno ternyata lebih pendek daripada menggunakan TBoperator konversi basis. Kode berjalan loop sementara sampai a(angka) adalah 0. Pada setiap iterasi, ia mencetak a%odan mengurangi dari a. odiinisialisasi 1dan dikalikan dengan b(dasar) setiap iterasi. (Pendekatan ini membuat semua 0dan juga menambahkan terkemuka 0.)

Cobalah online!

DLosc
sumber