Dejar ny bser enteros positivos mayores que 1.
Salida de la distancia desde nla siguiente potencia de b.
Para n=5y b=3, la siguiente potencia de 3from 5es 9( 3^2 = 9), entonces la salida es 9 - 5 = 4.
Para n=8y b=2, la siguiente potencia de 2from 8es 16( 2^4 = 16), entonces la salida es 16 - 8 = 8. Tenga en cuenta que nes un poder de 2en este ejemplo.
Casos de prueba:
n b output
212 2 44
563 5 62
491 5 134
424 3 305
469 8 43
343 7 2058
592 7 1809
289 5 336
694 3 35
324 5 301
2 5 3
Este es el código de golf . La respuesta más corta en bytes gana. Se aplican lagunas estándar .
code-golf
arithmetic
Monja permeable
fuente
fuente

;)æċ!" en lugar de "oww esto es tan difícil ..."æċ_⁸Asamblea x86-64 ( Convención de llamadas de Windows x64 ),
1413 bytesUn enfoque iterativo ineficiente (¡pero esbelto!) (Con crédito a @Neil por inspiración):
La función anterior toma dos parámetros enteros,
n(pasados en elECXregistro) yb(pasados en elEDXregistro), y devuelve un único resultado entero (en elEAXregistro). Para llamarlo desde C, usaría el siguiente prototipo:Esto está limitado al rango de un entero de 32 bits. Se puede modificar fácilmente para admitir enteros de 64 bits mediante el uso de registros largos completos, pero costaría más bytes codificar esas instrucciones. :-)
fuente
push 1+pop raxen solo 3 bytes. Pero ... entonces no tendrías que saltarte la multiplicación, por lo que aún sería un ahorro razonable porque podrías dejar eljmp.C (gcc) ,
3935 bytesNuevo comportamiento indefinido gracias a Erik
Pruébalo en línea!
fuente
f(n,b,i){for(i=b;b<n;b*=i);n=b-n;}ahorra 5 bytes y es compatible con gccb-=n?b-=nsi intercambias el orden debyn?Dyalog APL, 10 bytes
2 bytes guardados gracias a @ZacharyT
Pruébalo en línea!
Toma
ncomo argumento de la derecha ybcomo argumento de la izquierda.Calcula .
b⌊logbn + 1⌋ - nfuente
⊣-⍨⊢*1+∘⌊⍟⍨.⊢-⍨⊣*1+∘⌊⍟10 bytes pero con argumentos intercambiados, así que esenes el argumento correcto ybel argumento izquierdo. Usé el truco de ZacharyT1+∘⌊para llegar hasta aquí.R ,
3834 bytesFunción anónima. Almacena todos los valores de b a la potencia de todo en el rango [0, n], resta n de cada uno, los subconjuntos en valores positivos y devuelve el mínimo.
TIO tiene una versión no pryr, llamada como
f(n,b); Esta versión debe llamarse comof(b,n).Ahorré 4 bytes gracias a Jarko Dubbeldam, quien luego me superó.
Pruébalo en línea!
fuente
pryr::f({a=b^(0:n)-n;min(a[a>0])})es unos pocos bytes más corto.pryr::fcuando defino una nueva variable en la función; Parece que funciona aquí.sapply(x, sum)o lo que sea, que se sumasuma los argumentos.Cubix ,
2420 bytes-4 bytes gracias a MickyT
Lee en entrada como
n,bSe adapta a un cubo de 2x2x2:
Explicación:
I|I0: lee la entrada, empuja 0 (contador) a la pila^wcoloca la IP en el lugar correcto para el bucle:Pp-: calcularb^(counter), moverna la parte superior de la pila, calcularb^(counter) - n?: girar a la izquierda si es negativo, recto si es 0, a la derecha si es positivoO@salida de la parte superior de la pila (distancia) y salida.|?proceder como si la parte superior de la pila fuera cero<;qu;): apunta la IP en la dirección correcta, abre la parte superior de la pila (número negativo / cero), muévetenal final de la pila, gira en U, abre la parte superior de la pila (b^(counter)) e incrementa el contador^wy el programa continúa.¡Míralo en línea!
Pruébalo en línea!
fuente
Pwp.I|-.;)^0@O?|uq;<Haskell , 20 bytes
Pruébalo en línea!
untilsalvar el diafuente
05AB1E ,
98 bytesPruébalo en línea!
Explicación
fuente
ćlugar de¬.nimplícitamente, tanto en la comparación del filtro como en el cálculo de la diferencia absoluta.Java (OpenJDK 8) , 42 bytes
Basado en la respuesta C de @ GovindParmar .
Pruébalo en línea!
fuente
MAT ,
109 bytesPruébalo en línea!
Explicación
Considere las entradas
694y3como ejemplo.fuente
JavaScript (ES6), 29 bytes
Muy similar al enfoque de Rick, pero publicado con su permiso (y algo de ayuda para guardar un byte).
Intentalo
fuente
Mathematica, 24 bytes
gracias Martin
I / O
fuente
1/Log@##o#2~Log~#. O incluso mejor intercambie el orden de las entradas y useLog@##.#^Floor[...]#es más corto que#^(Floor[...]+1). Y también están los operadores UnicodeFloor.Log@##! En realidad, si intercambias el orden de los argumentos, ¡#^⌊Log@##⌋#-#2&debería ser posible para -5 bytes (creo)!C,
4240 bytesGracias al comentarista @Steadybox por el consejo
fuente
forlugar dewhileo;p(n,b){for(o=b;n>=b;)b*=o;return b-n;}n/blugar den>=bR, 30 bytes
Evalúa la función.
Que toma la primera potencia mayor o igual que
n, y luego restande ese valor.Cambiado
ceiling(power)afloor(power+1)para garantizar que sines un poder deb, tomamos el siguiente poder.fuente
JavaScript (ES6), 31 bytes
Casos de prueba:
Mostrar fragmento de código
fuente
nybo simplementen), debido a que se evita tener que pasarnde forma recursiva.n=>g=(b,p=b)=>p>n?p-n:g(b,p*b)yn=>b=>(g=p=>p>n?p-n:g(p*b))(b).f=(n,i)=>g=(b=i)=>b>n?b-n:g(b*i)Funcionaría por 30 bytes? Tendría que ser llamado de esta manera:f(324,5)(). EDITAR: Ah, @Neil me ganó.Octava , 32 bytes
Pruébalo en línea!
fuente
Octava, 26 bytes
¡Verifique todos los casos de prueba!
fuente
Rubí , 38 bytes.
Dos enfoques diferentes:
Pruébalo en línea!
Pruébalo en línea!
fuente
Haskell , 31 bytes
Pruébalo en línea!
fuente
Perl 6 ,
31 3029 bytesPruébalo (31)
Pruébalo (30)
Pruébalo (29)
Pruébalo (29)
fuente
PARI / GP ,
2624 bytesfuente
Japt , 9 bytes
¡Pruébelo en línea!
Explicación
fuente
Python ,
4241 bytesUna función recursiva que, comenzando con
v=1, se multiplica repetidamente porbhasta que excede estrictamenteay luego devuelve la diferencia.Pruébalo en línea!
Nota: El resultado nunca será cero, por lo que
a>=v and f(a,b,v*b)or v-apuede reemplazarse(a<v)*(v-a)or f(a,b,v*b)sin causar errores de recursión.Python 3, 37 bytes?
Usando una idea de ...
que utiliza aritmética de coma flotante (por lo tanto, los resultados pueden desviarse de su verdadera distancia),
intente aquí .
fuente
b-nnunca es cero al mismo tiempo quen<bes cierto).Brachylog , 7 bytes
Pruébalo en línea!
Toma la entrada como una lista
[b, n].fuente
PHP> = 7.1, 46 bytes
PHP Sandbox en línea
fuente
Lua,
7473 ByteUna solución directa, estoy usando 10 bytes para asegurar que los argumentos se traten como números y no como cadenas. Salidas a STDIN.
Editar: olvidé eliminar el espacio
w=1 n=n+0, guarda un byteExplicado
Pruébalo en línea!
fuente
1yendnecesaria?1endcomenzarían a interpretarse como el número y1eluego arrojarían un error porque1enno es un valor hexadecimal válido. Esto solo ocurre cuando la letra que sigue al número es[abcdef]porque otras letras no pueden interpretarse como valor hexadecimal ->w=1whileno arroja un error.QBIC , 23 bytes
Toma el parámetro
bprimero, luegon.Explicación
fuente
Python 2 ,
4841 bytesPrograma completo sin recursividad o bit twiddling:
Pruébalo en línea!
Formato de entrada:
n, b.fuente
Python 3 ,
5048 bytes¡Gracias a EriktheOutgolfer por guardar 2 bytes!
Pruébalo en línea!
Python no tiene ningún registro sofisticado o techos incorporados, así que seguí con el enfoque obvio con un poco de estilo de golf.
fuente
import math;lambda n,b:b**-~int(math.log(n,b))-nguarda dos bytes y está permitido por meta consenso.ceilno funcionaría.ceilporque no funciona para poderes deb, pero como @Uriel señaló que importar antes todavía guarda un byte.importdespués de la lambda y agreguef=el encabezado.Lisp común, 73 bytes
Pruébalo en línea!
fuente