Descomponer un número!


16

Su tarea es descomponer un número usando el formato a continuación.

Esto es similar a la conversión de base, excepto que en lugar de enumerarla digitsen la base, enumera la values, de modo que la lista se suma a la entrada.

Si la base dada es n, entonces cada número en la lista debe estar en forma de k*(n**m), donde 0<=k<ny mes único en toda la lista.

Especificaciones

  • Cualquier formato de entrada / salida razonable. Su programa / función toma 2 entradas y genera una lista.
  • La lista de salida puede estar en cualquier orden.
  • 0 Puede ser excluido o incluido.
  • Liderar 0están permitidos.
  • Se permiten empotrados .

Casos de prueba

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]

Puntuación

Este es el . La solución más corta en bytes gana.

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 

Respuestas:


5

Jalea , 7 bytes

lr0⁹*×b

Pruébalo en línea! o verificar todos los casos de prueba .

Cómo funciona

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, rango invertido ...
Leaky Nun

Es tan impresionante lo que se puede lograr con tan pocos personajes
t-clausen.dk

4

JavaScript (ES6), 47 bytes

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


¿Quieres incluir un fragmento? :)
Leaky Nun


3

Pyth - 12 11 bytes

Solo un FGITW, puede ser más corto.

.e*b^Qk_jEQ

Test Suite .


Eliminar el _por un byte :)
Leaky Nun

@KennyLau significaba FGITW, significa "La pistola más rápida en Occidente", un fenómeno en el que las personas que responden primero obtienen más votos positivos que las mejores respuestas.
Maltysen

@KennyLau oh, eso está permitido, derp.
Maltysen

3

J, 20 19 bytes

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

Uso

   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

Explicación

[(]*(^<:@#\.))#.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%.*}

Un bloque sin nombre que espera la base y el número en la parte superior de la pila (en ese orden) y los reemplaza con la lista de dígitos (incluidos los ceros internos, sin ceros a la izquierda).

Pruébalo aquí.

Explicación

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

Salidas de menos significativas a la mayoría, con muchos ceros adicionales.

Para generar el más significativo al menos:

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

Recurse, quitando repetidamente los dígitos ncon divmod mientras escala el multiplicador de valor posicional c.


Para la segunda versión, ¿no puedes hacer en range(-n,1)lugar de range(n,-1,-1)?
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Gracias, no vi que ir en reversa fuera una opción. Incluso es suficiente con hacerlo range(n).
xnor

1

Ruby, 35 34 bytes

Se trata de un puerto de respuesta del pitón de XNOR , pero imprime nveces para el caso de prueba 727 20grabados 7, 320, 400, y 724 0s. Sugerencias de golf bienvenidas.

Editar: 1 byte gracias a Jordan.

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

Puede guardar un byte con n.times{|i|p ...}.
Jordania

1

Mathematica, 12 bytes (no competitivos)

¡Me pregunto si Wolfram Research creó esta función después de ver el desafío del OP!

NumberExpand

Esto se introdujo en la versión 11.0 (agosto de 2016).


1
Edité para hacer que esto no compita porque Mathematica 11.0 se lanzó el 8 de agosto.
Leaky Nun

1

Mathematica, 46 bytes

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

Explicación:

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

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

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

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

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

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

Uso muy inesperado de DiagonalMatrix. Por favor explique cómo funciona en este caso.
DavidC

0

Raqueta, 82 bytes

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

Soy un ganador (!)


1
Tantos espacios ... <n 1no funciona? (No conozco a Racket en absoluto)
Leaky Nun

1
No, eso no funcionaría: los identificadores están delimitados solo por espacios en blanco, paréntesis / llaves / llaves y algunos otros símbolos, como '. Sin embargo, es una buena pregunta.
Winny

(Y <es solo una variable con una función vinculada a ella)
Winny

0

JavaScript (ES7), 68 bytes

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

Prueba

Prueba de usos Math.powpara la compatibilidad del navegador.

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


**¿no es un operador de JavaScript válido aunque correcto?
ericw31415


Oh, es experimental. Es por eso que mi navegador no lo admite.
ericw31415

0

JavaScript, 75 bytes

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

Solo por diversión :) Se podría jugar más al golf, pero no estoy muy seguro de cómo.

ES7, 66 bytes

Si ES7 está permitido, entonces:

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

0

O , 17 bytes

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

Dos notas:

  1. El tercer caso de prueba no funciona debido a un error con la conversión de base. Ver fase / o # 68 .

  2. Esto no funciona en el intérprete en línea. bNo se había implementado todavía.


0

> <>, 28 bytes

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

Espera que los valores de entrada estén presentes en la pila al inicio del programa.

Como> <> no tiene objetos de lista, la salida se presenta como una lista de valores separados por una nueva línea, con las 'unidades' en la primera línea. Un ejemplo de ejecución:

Input: 
11 2

Ouput:
1
2
0
8

@OP, si este no es un formato de salida aceptable, avíseme y editaré la respuesta en consecuencia.


0

PHP, 55 bytes

Utiliza la codificación de Windows-1252.

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

Ejecutar así ( -dagregado solo por estética):

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

En realidad, 17 bytes (no competitivos)

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

Pruébalo en línea!

Este envío no es competitivo porque el comando se agregó después de este desafío.

Explicación:

;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

Hacerlo a la antigua usanza resultó ser más corto que usar el TBoperador de conversión de base. El código ejecuta un ciclo while hasta que a(el número) sea 0. En cada iteración, lo imprime a%oy lo resta a. ose preinicializa 1y se multiplica por b(la base) cada iteración. (Este enfoque mantiene todos los correos 0electrónicos y también agrega un liderazgo 0).

Pruébalo en línea!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.