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.

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 

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.

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


Ingin menyertakan cuplikan? :)
Leaky Nun


3

Pyth - 12 11 byte

Hanya FGITW, bisa lebih pendek.

.e*b^Qk_jEQ

Test Suite .


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

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.

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

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.


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}}

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


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}

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 (!)


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


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

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.


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.


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

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

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


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!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.