Soit n
et b
soit des entiers positifs supérieurs à 1
.
Sortie de la distance de n
la prochaine puissance de b
.
Pour n=5
et b=3
, la puissance suivante de 3
from 5
est 9
( 3^2 = 9
), donc la sortie est 9 - 5 = 4
.
Pour n=8
et b=2
, la puissance suivante de 2
from 8
est 16
( 2^4 = 16
), donc la sortie est 16 - 8 = 8
. Notez que n
c'est une puissance de 2
dans cet exemple.
Cas de test:
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
C'est du code-golf . La réponse la plus courte en octets gagne. Les failles standard s'appliquent.
code-golf
arithmetic
Fuite, nonne
la source
la source
;)æċ
!" au lieu de "oww c'est trop dur ..."æċ_⁸
Assemblage x86-64 ( Convention d'appel Windows x64 ),
1413 octetsUne approche itérative inefficace (mais svelte!) (Crédit à @Neil pour l'inspiration):
La fonction ci-dessus prend deux paramètres entiers,
n
(passés dans leECX
registre) etb
(passés dans leEDX
registre), et retourne un seul résultat entier (dans leEAX
registre). Pour l'appeler depuis C, vous utiliseriez le prototype suivant:Ceci est limité à la plage d'un entier 32 bits. Il peut être facilement modifié pour prendre en charge des entiers 64 bits en utilisant les registres longs complets, mais cela coûterait plus d'octets pour coder ces instructions. :-)
la source
push 1
+pop rax
en seulement 3 octets. Mais… alors vous n'auriez pas à sauter la multiplication, donc ce serait quand même une économie raisonnable car vous pourriez laisser tomber lejmp
.C (gcc) ,
3935 octetsNouveau comportement indéfini grâce à Erik
Essayez-le en ligne!
la source
f(n,b,i){for(i=b;b<n;b*=i);n=b-n;}
enregistre 5 octets et est pris en charge par gccb-=n
?b-=n
si vous échangez l'ordre deb
etn
?Dyalog APL, 10 octets
2 octets économisés grâce à @ZacharyT
Essayez-le en ligne!
Prend
n
comme argument droit etb
comme argument gauche.Calcule .
b⌊logbn + 1⌋ - n
la source
⊣-⍨⊢*1+∘⌊⍟⍨
.⊢-⍨⊣*1+∘⌊⍟
10 octets mais avec des arguments échangés, c'estn
donc l'argument de droite etb
l'argument de gauche. J'ai utilisé l'astuce de ZacharyT1+∘⌊
pour descendre aussi loin.R ,
3834 octetsFonction anonyme. Stocke toutes les valeurs de b à la puissance de tout dans la plage [0, n], soustrait n de chaque, sous-ensembles sur les valeurs positives et renvoie le min.
TIO a une version non pryr, appelée comme
f(n,b)
; cette version doit être appelée commef(b,n)
.Sauvegardé 4 octets grâce à Jarko Dubbeldam, qui m'a ensuite surpassé.
Essayez-le en ligne!
la source
pryr::f({a=b^(0:n)-n;min(a[a>0])})
est quelques octets plus court.pryr::f
lorsque j'ai défini une nouvelle variable dans la fonction; on dirait que ça marche ici.sapply(x, sum)
ça, ça ajoutesum
aux arguments.Cubix ,
2420 octets-4 octets grâce à MickyT
Lit en entrée comme
n,b
Convient à un cube 2x2x2:
Explication:
I|I0
: lire l'entrée, pousser 0 (compteur) dans la pile^w
met l'IP au bon endroit pour la boucle:Pp-
: calculerb^(counter)
, déplacern
en haut de la pile, calculerb^(counter) - n
?
: tourner à gauche si négatif, droit si 0, droit si positifO@
sortie en haut de la pile (distance) et sortie.|?
procéder comme si le haut de la pile était nul<;qu;)
: pointez l'IP dans la bonne direction, éclatez le haut de la pile (nombre négatif / zéro), déplacez-vousn
vers le bas de la pile, demi-tour, éclatez le haut de la pile (b^(counter)
) et incrémentez le compteur^w
et le programme continue.Regardez-le en ligne!
Essayez-le en ligne!
la source
Pwp.I|-.;)^0@O?|uq;<
Haskell , 20 octets
Essayez-le en ligne!
until
sauve la journéela source
05AB1E ,
98 octetsEssayez-le en ligne!
Explication
la source
ć
place de¬
.n
implicitement, à la fois dans la comparaison des filtres et dans le calcul de la différence absolue.Java (OpenJDK 8) , 42 octets
Basé sur la réponse C de @ GovindParmar .
Essayez-le en ligne!
la source
MATL ,
109 octetsEssayez-le en ligne!
Explication
Considérez les entrées
694
et3
comme exemple.la source
JavaScript (ES6), 29 octets
Très similaire à l'approche de Rick mais publié avec sa permission (et un peu d'aide pour sauvegarder un octet).
L'essayer
la source
Mathematica, 24 octets
merci Martin
I / O
la source
1/Log@##
ou#2~Log~#
. Ou encore mieux permutez l'ordre des entrées et utilisezLog@##
.#^Floor[...]#
est plus court que#^(Floor[...]+1)
. Et il y a aussi les opérateurs UnicodeFloor
.Log@##
! En fait, si vous changez l'ordre des arguments, cela#^⌊Log@##⌋#-#2&
devrait être possible pour -5 octets (je pense)!C,
4240 octetsMerci au commentateur @Steadybox pour l'astuce
la source
for
au lieu d'while
enregistrer deux octets:o;p(n,b){for(o=b;n>=b;)b*=o;return b-n;}
n/b
place den>=b
R, 30 octets
Évalue la fonction
Qui prend la première puissance supérieure ou égale à
n
, puis soustraitn
de cette valeur.Modifié
ceiling(power)
pourfloor(power+1)
garantir que sin
est une puissance deb
, nous prenons la puissance suivante.la source
JavaScript (ES6), 31 octets
Cas de test:
Afficher l'extrait de code
la source
n
etb
ou justen
), car cela vous évite d'avoir à passern
récursivement.n=>g=(b,p=b)=>p>n?p-n:g(b,p*b)
etn=>b=>(g=p=>p>n?p-n:g(p*b))(b)
.f=(n,i)=>g=(b=i)=>b>n?b-n:g(b*i)
pour 30 octets? Il devrait être appelé comme ceci:f(324,5)()
. EDIT: Ah, @Neil m'a battu.Octave , 32 octets
Essayez-le en ligne!
la source
Octave, 26 octets
Vérifiez tous les cas de test!
la source
Rubis , 38 octets
Deux approches différentes:
Essayez-le en ligne!
Essayez-le en ligne!
la source
Haskell , 31 octets
Essayez-le en ligne!
la source
Perl 6 ,
31 3029 octetsTestez-le (31)
Testez-le (30)
Testez-le (29)
Testez-le (29)
la source
PARI / GP ,
2624 octetsla source
Japt , 9 octets
Testez-le en ligne!
Explication
la source
Python ,
4241 octetsUne fonction récursive qui, en commençant par
v=1
, se multiplie de façon répétée parb
jusqu'à ce qu'elle dépasse strictementa
, puis renvoie la différence.Essayez-le en ligne!
Remarque: Le résultat ne sera jamais nul et
a>=v and f(a,b,v*b)or v-a
peut donc être remplacé par(a<v)*(v-a)or f(a,b,v*b)
sans provoquer d'erreurs de récursivité.Python 3, 37 octets?
En utilisant une idée de rici ...
qui utilise l'arithmétique à virgule flottante (les résultats peuvent donc s'écarter de leur vraie distance),
essayez ici .
la source
b-n
n'est jamais nul en même temps quen<b
c'est vrai).Brachylog , 7 octets
Essayez-le en ligne!
Prend la saisie sous forme de liste
[b, n]
.la source
PHP> = 7,1, 46 octets
PHP Sandbox Online
la source
Lua,
7473 octetsUne solution simple, j'utilise 10 octets pour garantir que les arguments sont traités comme des nombres et non comme des chaînes. Sorties vers STDIN.
Modifier: oublié de supprimer l'espace
w=1 n=n+0
, enregistre un octetA expliqué
Essayez-le en ligne!
la source
1
et est-ilend
nécessaire?1end
commenceraient à être interprétés comme le nombre1e
puis lanceraient une erreur car ce1en
n'est pas une valeur hexadécimale valide. Cela ne se produit que lorsque la lettre qui suit le nombre est[abcdef]
car les autres lettres ne peuvent pas être interprétées comme une valeur hexadécimale ->w=1while
ne génère pas d'erreur.QBIC , 23 octets
Prend d'
b
abord le paramètren
.Explication
la source
Python 2 ,
4841 octetsProgramme complet sans récursivité ni twiddling de bits:
Essayez-le en ligne!
Format d' entrée:
n, b
.la source
Python 3 ,
5048 octetsMerci à EriktheOutgolfer pour avoir économisé 2 octets!
Essayez-le en ligne!
Python n'a pas de bûches de fantaisie ni de plafonds intégrés, donc je suis juste allé avec l'approche évidente avec un peu de flair golfique.
la source
import math;lambda n,b:b**-~int(math.log(n,b))-n
enregistre deux octets et est autorisé par méta-consensus.ceil
ne fonctionnerait pas.ceil
parce que cela ne fonctionne pas pour les pouvoirs deb
, mais comme l'a souligné @Uriel, l'importation enregistre toujours un octet.import
after le lambda et d'ajouterf=
dans l'en-tête.Lisp commun, 73 octets
Essayez-le en ligne!
la source