Zerlege eine Zahl!

16

Ihre Aufgabe ist es, eine Zahl im folgenden Format zu zerlegen.

Dies ähnelt der Basiskonvertierung, mit der Ausnahme, dass Sie die digitsin der Basis auflisten, anstatt sie aufzulisten values, sodass sich die Liste zur Eingabe addiert.

Wenn die angegebene Basis ist n, muss jede Nummer in der Liste in der Form k*(n**m), wo 0<=k<nund min der gesamten Liste eindeutig sein.

Technische Daten

  • Beliebiges vernünftiges Eingabe- / Ausgabeformat. Ihr Programm / Funktion nimmt 2 Ein- und Ausgänge einer Liste.
  • Die Ausgabeliste kann in beliebiger Reihenfolge sein.
  • 0 können ausgeschlossen oder eingeschlossen werden.
  • Führen 0ist erlaubt.
  • Einbauten sind erlaubt .

Testfälle

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]

Wertung

Das ist . Kürzeste Lösung in Bytes gewinnt.

Undichte Nonne
quelle

Antworten:

5

Gelee , 7 Bytes

lr0⁹*×b

Probieren Sie es online! oder überprüfen Sie alle Testfälle .

Wie es funktioniert

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
quelle
Ah, umgekehrter Bereich ...
Undichte Nonne
Es ist so beeindruckend, was mit so wenigen Charakteren erreicht werden kann
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
quelle
Möchtest du ein Snippet hinzufügen? :)
Undichte Nonne
3

Gelee, 12 Bytes

bLR’*@€U
b×ç

Kann etwas kürzer sein ...

Probieren Sie es online!

Türknauf
quelle
1
jelly.tryitonline.net/…
Undichte Nonne
3
lḞr0⁴*×bsollte arbeiten.
Dennis
Funktioniert auch technisch 0r⁴*³%I.
Dennis
Vergiss das. lr0⁴*×bhat die gleiche Byteanzahl ohne alle zusätzlichen Nullen.
Dennis
@Dennis Das ist definitiv anders genug, um als separate Antwort zu posten.
Türklinke
3

Pyth - 12 11 Bytes

Nur ein FGITW, kann kürzer sein.

.e*b^Qk_jEQ

Test Suite .

Maltysen
quelle
Entfernen Sie die _für ein Byte :)
Leaky Nun
@KennyLau bedeutete FGITW, es bedeutet "Schnellste Waffe im Westen", ein Phänomen, bei dem die Leute, die zuerst antworten, mehr positive Stimmen erhalten als die besseren Antworten.
Maltysen
@KennyLau oh das ist erlaubt, derp.
Maltysen
3

J, 20 bis 19 Bytes

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

Verwendung

   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

Erläuterung

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

CJam, 16 Bytes

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

Ein unbenannter Block, der die Basis und die Nummer auf dem Stapel erwartet (in dieser Reihenfolge) und durch die Ziffernliste ersetzt (einschließlich interner Nullen ohne führende Nullen).

Teste es hier.

Erläuterung

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
quelle
2

TSQL, 68 Bytes

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

Python 2, 44 Bytes

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

Ausgabe von niedrigstwertig bis höchstwertig mit vielen zusätzlichen Nullen.

Ausgabe von höchstem bis niedrigstem Wert:

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

Recurse, wobei die Ziffern wiederholt nmit divmod entfernt werden, während der Platzwertmultiplikator erhöht wird c.

xnor
quelle
Können Sie für die zweite Version nicht range(-n,1)stattdessen tun range(n,-1,-1)?
Erik der Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Danke, ich habe nicht gesehen, dass es eine Option ist, rückwärts zu fahren. Es reicht sogar aus, es einfach zu tun range(n).
Xnor
1

Rubin, 35 34 Bytes

Dies ist eine Portierung von xnor Python Antwort , aber er druckt nmal so den Testfall 727 20druckt 7, 320, 400und 724 0s. Golfvorschläge sind willkommen.

Edit: 1 Byte Danke an Jordan.

->n,b{n.times{|i|p n/b**i%b*b**i}}
Sherlock9
quelle
Mit können Sie ein Byte speichern n.times{|i|p ...}.
Jordanien
1

Mathematica, 12 Bytes (nicht konkurrierend)

Ich frage mich, ob Wolfram Research diese Funktion geschaffen hat, nachdem ich die Herausforderung des OP gesehen habe!

NumberExpand

Dies wurde in Version 11.0 (August 2016) eingeführt.

DavidC
quelle
1
Ich habe diese Datei bearbeitet, um nicht konkurrieren zu können, da Mathematica 11.0 am 8. August veröffentlicht wurde.
Leaky Nun
1

Mathematica, 46 Bytes

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

Erläuterung:

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}
Alephalpha
quelle
Sehr unerwartete Verwendung von DiagonalMatrix. Bitte erklären Sie, wie es in diesem Fall funktioniert.
DavidC
0

Schläger, 82 Bytes

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

Ich bin ein Gewinner (!)

Winny
quelle
1
So viele Räume ... geht das <n 1nicht? (Ich kenne Racket überhaupt nicht)
Undichte Nonne
1
Nein, das würde nicht funktionieren - Bezeichner werden nur durch Leerzeichen, Klammern / Klammern / geschweifte Klammern und einige andere Symbole, wie z '. Das ist jedoch eine gute Frage.
Winny
(Und <ist nur eine Variable mit einer daran gebundenen Funktion)
Winny
0

JavaScript (ES7), 68 Byte

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

Prüfung

Testanwendungen Math.powfür die Browserkompatibilitä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`)

user81655
quelle
**ist aber kein gültiger JavaScript-Operator richtig?
ericw31415
@ ericw31415 Dies ist der ES7-Exponentiationsoperator .
user81655
Oh, es ist experimentell. Deshalb unterstützt mein Browser dies nicht.
ericw31415
0

JavaScript, 75 Byte

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

Nur zum Spaß :) Es könnte mehr Golf gespielt werden, aber ich bin mir nicht sicher, wie.

ES7, 66 Bytes

Wenn ES7 erlaubt ist, dann:

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

O , 17 Bytes

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

Zwei Notizen:

  1. Der dritte Testfall funktioniert aufgrund eines Fehlers bei der Basiskonvertierung nicht. Siehe Phase / o # 68 .

  2. Dies funktioniert im Online-Interpreter nicht. bwurde noch nicht implementiert.

kirbyfan64sos
quelle
0

> <> 28 Bytes

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

Erwartet, dass die Eingabewerte beim Programmstart auf dem Stack vorhanden sind.

Da> <> keine Listenobjekte enthält, wird die Ausgabe als durch Zeilenumbrüche getrennte Werteliste mit den Einheiten in der ersten Zeile dargestellt. Ein Beispiellauf:

Input: 
11 2

Ouput:
1
2
0
8

@OP, wenn dies kein akzeptables Ausgabeformat ist, lass es mich wissen und ich bearbeite die Antwort entsprechend.

Sok
quelle
0

PHP, 55 Bytes

Verwendet die Windows-1252-Codierung.

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

Laufen Sie wie folgt ( -dnur aus ästhetischen Gründen hinzugefügt):

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

C #, 77 Bytes

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

Eigentlich 17 Bytes (nicht konkurrierend)

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

Probieren Sie es online!

Diese Übermittlung ist nicht konkurrierend, da der Befehl nach dieser Aufforderung hinzugefügt wurde.

Erläuterung:

;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
quelle
Sicherlich gibt es einen Weg, dies zu vermeiden ? (Ab vier Bytes golfen)
Undichte Nonne
0

Pip , 13 Bytes

Wa-:Pa%oo*:b

Es stellte sich heraus, dass die altmodische Vorgehensweise kürzer war als die Verwendung des TBBasisumwandlungsoperators. Der Code führt eine while-Schleife aus, bis a(die Nummer) ist 0. Bei jeder Iteration wird es gedruckt a%ound von subtrahiert a. owird vorinitialisiert 1und mit b(der Basis) jeder Iteration multipliziert . (Dieser Ansatz behält alle 0s bei und fügt auch einen führenden hinzu 0.)

Probieren Sie es online!

DLosc
quelle