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.

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 

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.

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


Möchtest du ein Snippet hinzufügen? :)
Undichte Nonne


3

Pyth - 12 11 Bytes

Nur ein FGITW, kann kürzer sein.

.e*b^Qk_jEQ

Test Suite .


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

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.

2

TSQL, 68 Bytes

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

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.


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

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.


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}

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


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


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

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.


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.


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

0

C #, 77 Bytes

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

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


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!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.