Dada una entrada n
, escriba un programa o función que genere / devuelva la suma de las sumas digitales de n
todas las bases 1 a n
.
Ejemplo:
n = 5
Crea el rango [1...n]
:[1,2,3,4,5]
Para cada elemento x
, obtenga una matriz de los x
dígitos base de n
: [[1,1,1,1,1],[1,0,1],[1,2],[1,1],[1,0]]
base biyectiva 1
de 5
es[1,1,1,1,1]
base- 2
(binario) de 5
is[1,0,1]
base 3
de 5
es[1,2]
base 4
de 5
es[1,1]
base 5
de 5
es[1,0]
Suma los dígitos: 13
Casos de prueba:
1 1
2 3
3 6
4 8
5 13
6 16
7 23
8 25
9 30
10 35
36 297
37 334
64 883
65 932
La secuencia se puede encontrar en OEIS: A131383
Tanteo:
code-golf : gana la presentación con la puntuación más baja.
227 -> 9999
. Y también:1383 -> 345678
.Respuestas:
Lienzo , 3 bytes.
Pruébalo aquí!
¿Lienzo golpeando a Jelly?
fuente
Haskell , 46 bytes
Pruébalo en línea!
Explicación
La función[0…b]n
\b n -> mapM(pure[0..b])[1..n]
genera todas las cadenas en orden lexicográfico. Por ejemplo:Al indexarlo con1 (n+1) 1 [1,…,1n times] [n]
(!!n)
esto se puede usar para convertirn
a baseb+1
, sin embargo, esto no funcionará para unary (base- ), pero estamos sumando los resultados. Incluso podemos guardar algunos bytes con y usando base- lugar de una para base- ya que nos falta que es lo mismo que Al resumir.a <- [1..n]
Usar
do
-notation solo concatena todas las listas en lugar de anidarlas:fuente
APL (Dyalog Unicode) , 14 bytes
Pruébalo en línea!
Explicación
Algunos paréntesis están implícitos y se pueden agregar (más claro que el paréntesis "oficial"):
Esta es una cima monádica. Dado un argumento
Y
, esta función se comporta como:Las dos funciones se aplican en orden. Comenzaremos por el correcto:
Hay tres funciones en este tren, por lo que este es un tenedor. Dado un argumento
Y
, actúa como:Podemos reducir fácilmente a esto (monadic
⊢
devuelve su argumento, por lo tanto, se llama identidad ):Ahora, sabemos que
Y
es un número entero (escalar simple, es decir, número o carácter), ya que se nos da uno. Por lo tanto⍳Y
, con⎕IO=1
, vuelve1 2 ... Y
.⍳Y
en realidad devuelve una matriz con formaY
(Y
debe ser un vector), donde cada escalar es el índice de sí mismo en la matriz (es por eso que monadic⍳
se llama generador de índice ). Estos índices son vectores, excepto el caso donde1≡⍴Y
, donde son escalares (este es nuestro caso).Analicemos la función del medio
(⍴⊤⊣)¨
, siguiente.⍴⊤⊣
es el operando de¨
( cada uno ), y la función es diádica, por lo que el¨
operador primero cambiará la forma de cada argumento de longitud 1 a la forma del otro (es decir, tome el elemento y úselo para reemplazar cada escalar en el otro argumento) , y luego aplica la función a cada par de los dos argumentos. En este caso,⍳Y
es un vector yY
es un escalar, por lo tanto, sin≡⍴⍳Y
, entoncesY
se convertirá enn⍴Y
(⍴
representa las funciones de forma (monádica) y remodelar (diádica). Es decir, en términos más simples,Y
se convertirá en una matriz que contieneY
tiemposY
.Ahora, para cada par, llamemos al argumento izquierdo
X
y al derechoZ
(para que no entremos en conflicto con la entradaY
).⍴⊤⊣
es un tenedor diádico, por lo que se expandirá a:Hagamos el primer paso fácil de reducir
X⊣Z
aX
(dyadic⊣
es la función izquierda ):La funciónX,Z∈N XZ X Z X X1 X
⍴
inX⍴Z
es, nuevamente, la función de remodelación , por lo queX⍴Z
, en nuestro caso, son simplementeX
tiemposZ
.⊤
es la función de codificación Dadas dos matrices de números, donde la matriz izquierda es la base de cada dígito en el resultado (no necesita ser entero o positivo), es decir, la codificación, y la derecha es una matriz de números, devuelve la matriz transpuesta de esos números en la codificación especificada (la transposición es la inversión de las dimensiones de una matriz en relación con sus elementos). La representación de un dígito se basa en el cociente de la división del número y el producto de las bases menos significativas. Si alguna base es0
, actúa como base + ∞. Los escalares de los argumentos son todos simples. ComoX
es un entero positivo, yX⍴Z
es un vector de elementos iguales, esto es realmente solo un caso de conversiónX
a baseZ
y remodelación aX
dígitos. Para , ( en base ) no puede tener más de dígitos, ya que tiene dígitos. Por lo tanto, es suficiente para nuestros propósitos.X⍴Z
El resultado deY1=[1,1,...,1]Y Y×1=Y
Y(⍴⊤⊣)¨⍳Y
, por lo tanto, seY
convierte a cada base de 1 aY
, posiblemente con ceros a la izquierda. Sin embargo, hay un problema: en APL, la base 1 no está en mayúsculas especiales, mientras que este desafío sí lo hace en casos especiales, por lo que debemos incluir la suma de los dígitos de base 1 deY
nosotros mismos. Afortunadamente, esta suma es sóloY
, ya que , por lo que la suma es simplemente . Se deduce que tenemos que agregar en algún lugar de la matriz. Así es como lo hacemos:Y
Ya he incluido esta parte aquí. Dyadic
,
es la función catenada , concatena sus argumentos en sus últimos ejes y errores si eso no es posible. Aquí, simplemente concatenamos el escalarY
al vectorY(⍴⊤⊣)¨⍳Y
, de modo que incrementemos la suma por la que vamos a calcularY
, como se explicó anteriormente.La parte final es la función izquierda de nuestra cima
+/∘∊
:∘
es el operador de redacción .f∘g Y
es el mismo quef g Y
. Sin embargo, lo estamos usando aquí para que nuestro tren no se bifurque en el∊
. Entonces, podemos reducir:Ahora es el momento de la suma, pero espera ... hay un problema. La matriz no es plana, por lo que no podemos simplemente sumar sus elementos antes de aplanarla primero. La función enlist
∊
aplana una matriz. Ahora que la matriz ha sido aplanada, finalmente la utilizamos+/
para sumarla./
es el operador de reducción , aplica una función diádica entre los elementos de una matriz en su penúltimo eje, con prioridad de derecha a izquierda. Si el rango (número de dimensiones, es decir, la longitud de la forma) de la matriz no disminuye, la matriz se encierra, aunque este no es el caso aquí. La función que se aplica aquí es+
, que es el plusfunción que agrega los pares en los últimos ejes de dos matrices (y errores si las matrices no se pueden agregar así). Aquí, simplemente agrega dos números varias veces para que se complete la reducción.He aquí, nuestro tren:
fuente
+/∘∊⊢,⊢⊤¨⍨⊢⍴¨⍳
Ruby ,
3937El único juego de golf aquí es eliminar algunos espacios en blanco. Pruébalo en línea
fuente
n
(37b):->n{(2..n).sum{|b|n.digits(b).sum}+n}
Python 2 , 57 bytes
Pruébalo en línea!
fuente
Java 8,
7665 bytes-11 bytes gracias a @ OlivierGrégoire .
Pruébalo en línea.
Explicación:
fuente
i
, así que ... 65 bytes.Desmos, 127 bytes
Desmos, 56 bytes
fuente
^n
debería ser suficiente.\sum_{b=2}^{n+1}
paran+\sum_{b=2}^n
guardar otros 2 bytesSAS,
8174 bytesLa entrada se ingresa después de la
cards;
declaración, en líneas nuevas, así:Emite un conjunto de datos que contiene la respuesta
s
(junto con las variables auxiliares), con una fila para cada valor de entradaSin golf:
fuente
Japt
-x
, 6 bytesIntentalo
Intentalo
fuente
J ,
2423 bytesPruébalo en línea!
fuente
05AB1E (heredado) , 5 bytes
Pruébalo en línea!
Explicación:
En 05AB1E (heredado), la base 1 de 5 es [0,0,0,0,0], no [1,1,1,1,1]. Por lo tanto, después de sumar el rango, agregue la entrada para tener en cuenta la base 1 que falta.
Estoy usando 05AB1E (heredado) porque en el 05AB1E actual, la base 1 de 5 es [1]. Para dar cuenta de esto, necesitaría disminuir el resultado en 1 o eliminar el primer elemento del rango, los cuales costarían 1 byte.
fuente
Perl 6 ,
4541 bytes-4 bytes gracias a Jo King
Pruébalo en línea!
fuente
Espacio en blanco , 153 bytes
Se agregaron letras
S
(espacio),T
(tabulación) yN
(nueva línea) solo como resaltado.[..._some_action]
agregado solo como explicación.Pruébelo en línea (solo con espacios en bruto, pestañas y nuevas líneas).
El puerto de mi respuesta Java 8 , porque Whitespace no tiene ninguna conversión de base integrada.
Ejemplo de ejecución:
input = 3
El programa se detiene con un error: no se encontró ninguna salida. (Aunque podría agregar tres líneas nuevas
NNN
para eliminar ese error).fuente
R , 60 bytes
Pruébalo en línea!
Falla
n>143
porque144^144
es más grande de lo que sedouble
puede obtener. Gracias a Josh Eller por sugerir reemplazarlolog(n,i)
simplementen
.Lo siguiente funcionará para
n>143
; No estoy seguro de en qué punto dejará de funcionar.R , 67 bytes
Pruébalo en línea!
Utiliza el
n%/%i^(0:log(n,i))%%i
método clásico para extraer losi
dígitos de basen
para cada baseb>1
, luego los suma y acumula la sumaF
, que se inicializa0
, luego agregan
(la1
representación de base den
)F
y devuelve el resultado. Paran=1
, se salta las bases y simplemente se agregan
aF
.fuente
0:log(n,i)
, ¿no podrías usarla0:n
? Siempre habrá como máximo n dígitos en cualquier representación base de n, y todo después de loslog(n,i)
dígitos iniciales debe ser 0, por lo que no afectará la suma.n=144
, ya que143^143
está alrededor1.6e308
y se144^144
evalúaInf
. ¡Gracias!Python 2 , 61 bytes
Pruébalo en línea!
Aunque esta es la solución de Dennis en la que se basa, el método me parece demasiado divertido para no compartirlo.
El objetivo es recurrir tanto al cortar el último dígito
n->n/b
como al incrementar la baseb->b+1
, pero queremos evitar que la base se incremente después de que uno o más dígitos hayan sido cortados. Esto se logra haciendo que la base seab
flotante, de modo que después de la actualizaciónn->n//b
, el flotanteb
infecten
con su flotabilidad. De esta manera, sin
es flotante o no, es un indicador de bits para saber si hemos eliminado algún dígiton
.Requerimos que
1/n==0
se cumpla la condición para que se repita en incrementosb
, que los enterosn
satisfacen porque la división del piso se realiza, pero las flotaciones fallan. (n=1
también falla, pero no queremos repetirlo de todos modos). De lo contrario, los flotantes funcionan como enteros en la función porque tenemos cuidado de hacer la división del pison//b
, y la salida es un flotante de números enteros.fuente
C (gcc),
6756 bytesPuerto de mi respuesta Java 8 .
-11 bytes gracias al golf de @ OlivierGrégoire en mi respuesta Java.
Pruébalo en línea.
Explicación:
fuente
JavaScript (ES6), 42 bytes
Esta versión es casi idéntica a mi respuesta principal, pero se basa en el flujo subyacente aritmético para detener la recurrencia. El valor admitido más alto depende del tamaño de la pila de llamadas.
Pruébalo en línea!
JavaScript (ES6),
51 4844 bytesPruébalo en línea!
Comentado
fuente
APL (Dyalog Unicode) , 22 bytes
Pruébalo en línea!
fuente
Casco , 6 bytes
Realmente deseo que haya algo como
M
paracmap
:(¡Pruébalo en línea o prueba todo!
Explicación
Alternativamente, 6 bytes
¡Pruébalo en línea o prueba todo!
Explicación
fuente
Pari / GP , 30 bytes
Pruébalo en línea!
fuente
Jalea , 4 bytes
Pruébalo en línea!
Cómo funciona
fuente
Adjunto , 25 bytes
Pruébalo en línea!
Explicación
fuente
Carbón de leña , 12 bytes
fuente
Retina 0.8.2 , 49 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Convierte a unario.
Use divmod repetido para convertir el número original a cada base.
Elimine la lista de bases, dejando solo los dígitos de conversión de base.
Toma la suma y convierte a decimal.
fuente
Desmos, 51 bytes
Inspirado por la respuesta de Conor O'Brien y mirando la entrada de OEIS, se me ocurrió mi propia solución Desmos:
Pruébalo en línea!
fuente
APL (NARS), 29 caracteres, 58 bytes
pequeña prueba sobre cómo usar:
fuente