Étant donné un entier N, procédez comme suit: (en utilisant 9 comme exemple).
- Recevoir l'entrée N. (
9
) - Convertissez N de base10 en base2. (
1001
) - Augmentez chaque bit de 1. (
2112
) - Traitez le résultat comme base3 et reconvertissez-le en base10. (
68
) - Retour / Sortie du résultat.
Contribution
Peut être reçu dans n'importe quel format de nombre raisonnable.
Il vous suffit de gérer les cas où N> 0.
Sortie
Soit retourner sous forme de nombre ou de chaîne, soit imprimer sur stdout
.
Règles
- C'est le code-golf , le code le plus court en octets gagne.
- Les failles par défaut sont interdites.
Cas de test
1 -> 2
2 -> 7
5 -> 23
9 -> 68
10 -> 70
20 -> 211
1235 -> 150623
93825 -> 114252161
code-golf
number
base-conversion
Ian H.
la source
la source
+n%2+1
ajoute le bit binaire le plus à droite plus 1 à la valeur de retour,n/2
décale vers la droiten
de 1 bit binaire,3*f(n/2)
ajoute récursivement 3 fois ce calcul sur ces bits décalés vers la droite etn and
termine la récursion quandn
est 0JavaScript (Node.js) , 23 octets
Essayez-le en ligne!
la source
x>>1
est le même quex/2
non?Infinity
dans JS .. Essayez-le en ligne. (Vous voudrez peut-être ajouter un lien TIO à votre réponse, I4m2 )1>>1=0
while1/2=0.5
n/2
fonctionne, et la raison pour laquelle je l'ai suggéré ici.Java (JDK 10) , 44 octets
Essayez-le en ligne!
la source
-~
- être aidera-t - il?long
? :) Et ici, je pensais que mon approche séquentielle était intelligente .. Vous l'avez fait sauter du parc en moins de 5 minutes ..>.>: '(Gelée , 4 octets
Essayez-le en ligne!
la source
J , 7 octets
Essayez-le en ligne!
Merci Galen Ivanov pour -4 octets! J'ai vraiment besoin d'améliorer mes compétences en golf J ...
la source
3#.1+#:
TIO: 0
.R ,
5543 octetsEssayez-le en ligne!
Utilise l'astuce de conversion de base standard dans R, par incréments, puis utilise un produit scalaire avec les pouvoirs de
3
pour se reconvertir en entier.Merci à @ user2390246 d'avoir perdu 12 octets!
la source
05AB1E , 5 octets
Essayez-le en ligne!
05AB1E , 5 octets
Essayez-le en ligne!
la source
S
fonctionne€
aussi.Java 10,
8152 octets (conversion de base)Essayez-le en ligne.
-29 octets grâce à @Holger .
Explication:
Java 10,
171167151 151150149 octets (séquence)-16 octets grâce à @ musicman523 , passant
(int)Math.pow(2,t)
à(1<<t)
.-1 octet grâce à @Holger , en changeant
(int)(Math.log(n)/Math.log(2))
en31-n.numberOfLeadingZeros(n)
.Essayez-le en ligne.
Explication:
Quand on regarde la séquence:
Nous pouvons voir plusieurs sous-séquences:
La séquence demandée est donc:
Je crains de trouver des modèles, donc je suis fier de ce que j'ai trouvé ci-dessus .. Cela dit, @ user202729 a trouvé une approche meilleure et plus courte en Java en quelques minutes ..: '(
la source
n.toString(n,2).getBytes()
... Je pense que la conversion manuelle peut être plus courte.long
et nonint
?(int)Math.pow(2,t)
pour1<<t
... puis insérez cette expression et supprimez la variable i ( 152 octets )31-Integer.numberOfLeadingZeros(n)
plutôt(int)(Math.log(n)/Math.log(2))
, mais ce n'est pas plus court. Sauf si vous utilisezimport static
dans l'en-tête, ce qui pourrait étirer les règles trop loin.n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
APL (Dyalog) , 10 octets
Essayez-le en ligne!
la source
Brachylog , 7 octets
Essayez-le en ligne!
Explication
Pas que vous en ayez vraiment besoin, mais…
la source
Rubis , 27 octets
Essayez-le en ligne!
la source
Python 2 ,
5655 octetsEssayez-le en ligne!
la source
Attaché , 19 octets
Essayez-le en ligne!
Il s'agit d'une composition de trois fonctions:
FromBase&3
1&`+
Bin
Cela convertit d'abord en binaire (
Bin
), l'incrémente (1&`+
), puis convertit en ternaire (FromBase&3
).Alternatives
Non-pointfree, 21 octets:
{FromBase[Bin!_+1,3]}
Sans builtins, 57 octets:
Sum@{_*3^(#_-Iota!_-1)}@{If[_>0,$[_/2|Floor]'(1+_%2),[]]}
la source
Retina 0.8.2 , 36 octets
Essayez-le en ligne! Explication:
Convertissez de décimal en unaire.
Divmod à plusieurs reprises par 2, et ajoutez 1 au résultat du modulo.
Ajoutez également 1 au premier chiffre.
Conversion de la base codée unaire 3 en base unaire.
Convertissez en décimal.
la source
Japt , 6 octets
Prend l'entrée comme un nombre, sort un nombre.
Essayez-le en ligne!
la source
MATL ,
1276 octetsEssayez-le en ligne!
5 octets enregistrés grâce à Giuseppe et un autre grâce à Luis Mendo.
Ancienne réponse de 7 octets:
Essayez-le en ligne!
Explication:
Ancien pour 12 octets:
Essayez-le en ligne!
Oh mon Dieu, c'était désordonné ... Voici donc: `BQ3GBn: q ^! Y *.
Explication:
la source
C # (Visual C # Compiler) , 128 octets
Essayez-le en ligne!
Je compte
System
car j'utiliseConvert
etMath
.la source
z
variable. De plus dans le corps d'expression , vous pouvez vous débarrasser des{
,}
et desreturn
déclarations. Donc quelque chose comme çan=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
Python 2 ,
5654 octetsEssayez-le en ligne!
la source
C,
3227 octetsBasé sur la réponse Java de user202729 . Essayez-le en ligne ici . Merci à Kevin Cruijssen d' avoir joué au golf 5 octets.
Version non golfée:
la source
return
avecx=
et en inversant le ternaire afin que ce!
ne soit plus nécessaire:n(x){x=x?x%2+1+3*n(x/2):0;}
Husk , 5 octets
Essayez-le en ligne!
Explication
la source
Octave avec la boîte à outils de communication,
3332 octetsEssayez-le en ligne!
Convertit l'entrée en un vecteur binaire en utilisant
de2bi
et en incrémentant tous les nombres. Est-ce que la multiplication matricielle avec un vecteur vertical de 3 élevé aux puissances appropriées:,1, 3, 9, ...
obtenant ainsi la somme sans appel explicite àsum
.la source
@(x)base2dec(de2bi(x)+49,3)
pour 27 (une rare occasion où MATLAB est plus indulgent qu'Octave)PHP,
8464 octetsEssayez-le en ligne !!
Code ORIGINAL
Essayez-le en ligne !!
Merci à Cristoph , moins d'octets s'il est exécuté avec php -R
Explication
la source
strtr
<?="Will do!!"
CJam , 8 octets
Essayez-le en ligne!
Explication
la source
:)
..Espace , 117 octets
Lettres
S
(espace),T
(tabulation) etN
(nouvelle ligne) ajoutées uniquement en surbrillance.[..._some_action]
ajouté à titre d'explication uniquement.Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).
Explication en pseudo-code:
J'ai d'abord converti la fonction récursive
int f(int n){return n<1?0:n%2+1+3*f(n/2);}
en sa forme itérative (en pseudo-code):Et j'ai ensuite implémenté cette approche itérative dans l'espace de langage basé sur la pile, en utilisant sa pile par défaut.
L'exemple s'exécute:
Contribution:
1
Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).
Arrête avec erreur: sortie non définie.
Contribution:
4
Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).
Arrête avec erreur: sortie non définie.
la source
n < 1
vérification en poussant les valeurs jusqu'à ce que n soit 0, puis en les sautant jusqu'à ce que vous atteigniez votre valeur limite (0). La profondeur de la pile n'a pas besoin d'être stockée explicitement et il ne devrait même pas avoir besoin d'être échangé (si vous voulez échanger les deux premières valeurs comme dans lisp)n < 1
(oun == 0
) IS pousser les valeurs jusqu'à ce quen
soit 0 .. Ou suis-je en train de mal interpréter quelque chose ici ..: S " La profondeur de la pile n'a pas besoin d'être stockée explicitement " En Java, c'est le cas, sinon je ne peux pas créer le tableau. J'aurais pu utiliser un à lajava.util.Stack
place, mais j'ai juste utilisé un tableau pour le rendre moins verbeux. Dans les espaces blancs, la pile est de taille indéfinie.Brain-Flak , 74 octets
Essayez-le en ligne!
Version "lisible"
la source
Ajouter ++ , 14 octets
Essayez-le en ligne!
la source
Japt , 7 octets
Essayez-le ici
la source
Haskell , 32 octets
Essayez-le en ligne!
la source
Perl 5 , 36 octets
Essayez-le en ligne!
la source
Pyth, 8
Comment éliminer l'espace et rendre l'
Q
implicite?Pyth en ligne .
la source
Q
implicite? Je ne pense pas que vous puissiez.