Rozłóż liczbę!


16

Twoim zadaniem jest dekompozycja liczby przy użyciu poniższego formatu.

Jest to podobne do konwersji podstawowej, z tą różnicą, że zamiast wyszczególnienia digitsw bazie, podajesz listę w valuestaki sposób, że lista sumuje się z danymi wejściowymi.

Jeśli podana jest podstawa n, to każda liczba na liście musi mieć postać k*(n**m), gdzie 0<=k<ni mjest unikalna na całej liście.

Okular

  • Dowolny rozsądny format wejścia / wyjścia. Twój program / funkcja pobiera 2 wejścia i wyświetla listę.
  • Lista wyników może być w dowolnej kolejności.
  • 0 można wykluczyć lub włączyć.
  • Prowadzenie 0jest dozwolone.
  • Wbudowane są dozwolone .

Przypadki testowe

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]

Punktacja

To jest . Najkrótsze rozwiązanie w bajtach wygrywa.

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 

Odpowiedzi:


5

Galaretka , 7 bajtów

lr0⁹*×b

Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .

Jak to działa

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.

Ach, odwrócony zasięg ...
Leaky Nun

To imponujące, co można osiągnąć przy tak małej
liczbie

4

JavaScript (ES6), 47 bajtów

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


Chcesz dołączyć fragment kodu? :)
Leaky Nun


3

Pyth - 12 11 bajtów

Po prostu FGITW, może być krótszy.

.e*b^Qk_jEQ

Pakiet testowy .


Usuń _bajt :)
Leaky Nun

@KennyLau oznaczało FGITW, co oznacza „najszybszą broń na zachodzie”, zjawisko, w którym ludzie odpowiadający jako pierwsi otrzymują więcej głosów pozytywnych niż lepszych odpowiedzi.
Maltysen

@KennyLau oh dozwolone, derp.
Maltysen

3

J, 20 19 bajtów

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

Stosowanie

   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

Wyjaśnienie

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

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

Nienazwany blok, który oczekuje podstawy i liczby na górze stosu (w tej kolejności) i zastępuje je listą cyfr (łącznie z zerami wewnętrznymi, bez zer wiodących).

Sprawdź to tutaj.

Wyjaśnienie

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 bajtów

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

1

Python 2, 44 bajty

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

Wyprowadza wartości od najmniej znaczącej do większości, z wieloma dodatkowymi zerami.

Aby uzyskać wyniki od najbardziej znaczących do najmniej:

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

Powtarzaj, wielokrotnie nusuwając cyfry z divmod, jednocześnie zwiększając mnożnik wartości miejsca c.


W przypadku drugiej wersji nie możesz range(-n,1)tego zrobić range(n,-1,-1)?
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Dzięki, nie widziałem, żeby odwrócenie było opcją. Wystarczy nawet zrobić range(n).
xnor

1

Ruby, 35 lat 34 bajtów

Jest to port XNOR za Pythona odpowiedź , ale drukuje nrazy więc przypadek testowy 727 20drukuje 7, 320, 400, i 7240 s. Sugestie dotyczące gry w golfa mile widziane.

Edycja: 1 bajt dzięki Jordanowi.

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

Możesz zapisać bajt za pomocą n.times{|i|p ...}.
Jordania,

1

Mathematica, 12 bajtów (niekonkurujące)

Zastanawiam się, czy Wolfram Research stworzyło tę funkcję po zobaczeniu wyzwania PO!

NumberExpand

Zostało to wprowadzone w wersji 11.0 (sierpień 2016).


1
Zrobiłem edycję, aby nie konkurować, ponieważ Mathematica 11.0 została wydana 8 sierpnia.
Leaky Nun

1

Mathematica, 46 bajtów

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

Wyjaśnienie:

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

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

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

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

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

Bardzo nieoczekiwane użycie DiagonalMatrix. Prosimy wyjaśnić, jak to działa w tym przypadku.
DavidC,

0

Rakieta, 82 bajty

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

Jestem zwycięzcą (!)


1
Tak wiele przestrzeni ... <n 1nie działa? (W ogóle nie znam rakiety)
Leaky Nun

1
Nie, to by nie działało - identyfikatory są ograniczone tylko białymi spacjami, nawiasami / nawiasami klamrowymi / nawiasami klamrowymi i innymi symbolami, takimi jak '. Ale to dobre pytanie.
Winny

(I <to tylko zmienna z związaną z nią funkcją)
Winny

0

JavaScript (ES7), 68 bajtów

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

Test

Testowe zastosowania Math.powdla zgodności przeglądarki.

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


**nie jest prawidłowym operatorem JavaScript, prawda?
ericw31415

@ ericw31415 To operator potęgowania ES7 .
user81655

Och, to eksperymentalne. Dlatego moja przeglądarka go nie obsługuje.
ericw31415

0

JavaScript, 75 bajtów

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

Po prostu dla zabawy :) Można by bardziej zagrać w golfa, ale nie jestem pewien, jak to zrobić.

ES7, 66 bajtów

Jeśli ES7 jest dozwolone, to:

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

0

O , 17 bajtów

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

Dwie notatki:

  1. Trzeci przypadek testowy nie działa z powodu błędu konwersji bazy. Patrz faza / o # 68 .

  2. To nie działa w tłumaczu online. bnie został jeszcze wdrożony.


0

> <>, 28 bajtów

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

Oczekuje, że wartości wejściowe będą obecne na stosie podczas uruchamiania programu.

Ponieważ> <> nie ma obiektów listy, dane wyjściowe są przedstawiane jako lista wartości oddzielonych znakiem nowej linii, z „jednostkami” w pierwszym wierszu. Przykładowy przebieg:

Input: 
11 2

Ouput:
1
2
0
8

@OP, jeśli nie jest to akceptowalny format wyjściowy, daj mi znać, a odpowiednio zmienię odpowiedź.


0

PHP, 55 bajtów

Używa kodowania Windows-1252.

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

Działaj w ten sposób ( -ddodano tylko dla estetyki):

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 bajtów

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

0

Właściwie 17 bajtów (niekonkurujących)

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

Wypróbuj online!

To zgłoszenie nie jest konkurencyjne, ponieważ polecenie zostało dodane po tym wyzwaniu.

Wyjaśnienie:

;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 bajtów

Wa-:Pa%oo*:b

Wykonanie tego w staromodny sposób okazało się krótsze niż użycie TB podstawowego operatora konwersji. Kod uruchamia pętlę while, dopóki a(liczba) nie będzie 0. Przy każdej iteracji drukuje a%oi odejmuje go a. ojest wstępnie zainicjowany 1i zostaje pomnożony przez b(podstawową) każdą iterację. (Takie podejście zachowuje wszystko0 s, a także dodaje wiodące 0.)

Wypróbuj online!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.