Dejar n
y b
ser enteros positivos mayores que 1
.
Salida de la distancia desde n
la siguiente potencia de b
.
Para n=5
y b=3
, la siguiente potencia de 3
from 5
es 9
( 3^2 = 9
), entonces la salida es 9 - 5 = 4
.
Para n=8
y b=2
, la siguiente potencia de 2
from 8
es 16
( 2^4 = 16
), entonces la salida es 16 - 8 = 8
. Tenga en cuenta que n
es un poder de 2
en 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 elECX
registro) yb
(pasados en elEDX
registro), y devuelve un único resultado entero (en elEAX
registro). 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 rax
en 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-=n
si intercambias el orden deb
yn
?Dyalog APL, 10 bytes
2 bytes guardados gracias a @ZacharyT
Pruébalo en línea!
Toma
n
como argumento de la derecha yb
como argumento de la izquierda.Calcula .
b⌊logbn + 1⌋ - n
fuente
⊣-⍨⊢*1+∘⌊⍟⍨
.⊢-⍨⊣*1+∘⌊⍟
10 bytes pero con argumentos intercambiados, así que esen
es el argumento correcto yb
el 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::f
cuando defino una nueva variable en la función; Parece que funciona aquí.sapply(x, sum)
o lo que sea, que se sumasum
a los argumentos.Cubix ,
2420 bytes-4 bytes gracias a MickyT
Lee en entrada como
n,b
Se adapta a un cubo de 2x2x2:
Explicación:
I|I0
: lee la entrada, empuja 0 (contador) a la pila^w
coloca la IP en el lugar correcto para el bucle:Pp-
: calcularb^(counter)
, movern
a 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éveten
al final de la pila, gira en U, abre la parte superior de la pila (b^(counter)
) e incrementa el contador^w
y 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!
until
salvar el diafuente
05AB1E ,
98 bytesPruébalo en línea!
Explicación
fuente
ć
lugar de¬
.n
implí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
694
y3
como 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
for
lugar dewhile
o;p(n,b){for(o=b;n>=b;)b*=o;return b-n;}
n/b
lugar den>=b
R, 30 bytes
Evalúa la función.
Que toma la primera potencia mayor o igual que
n
, y luego restan
de ese valor.Cambiado
ceiling(power)
afloor(power+1)
para garantizar que sin
es un poder deb
, tomamos el siguiente poder.fuente
JavaScript (ES6), 31 bytes
Casos de prueba:
Mostrar fragmento de código
fuente
n
yb
o simplementen
), debido a que se evita tener que pasarn
de 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 porb
hasta que excede estrictamentea
y 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-a
puede 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-n
nunca es cero al mismo tiempo quen<b
es 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
1
yend
necesaria?1end
comenzarían a interpretarse como el número y1e
luego arrojarían un error porque1en
no 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=1while
no arroja un error.QBIC , 23 bytes
Toma el parámetro
b
primero, 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))-n
guarda dos bytes y está permitido por meta consenso.ceil
no funcionaría.ceil
porque no funciona para poderes deb
, pero como @Uriel señaló que importar antes todavía guarda un byte.import
después de la lambda y agreguef=
el encabezado.Lisp común, 73 bytes
Pruébalo en línea!
fuente