Étant donné un nombre n
, écrivez une fonction qui trouve la plus petite base b ≥ 2
telle qu'un n
palindrome en base b
. Par exemple, une entrée de 28
devrait renvoyer la base 3
puisque la représentation ternaire de 28 est 1001. Bien qu'il s'agisse d' 93
un palindrome à la fois en base 2 et en base 5, la sortie doit être 2
depuis 2 <5.
Contribution
Un entier positif n < 2^31
.
Production
Renvoie la plus petite base b ≥ 2
telle que la b
représentation de la base de n
est un palindrome. Ne supposez pas de zéros non significatifs.
Échantillons (entrée => sortie):
11 => 10
32 => 7
59 => 4
111 => 6
Règles
Le code le plus court gagne.
code-golf
palindrome
base-conversion
ntomlin1996
la source
la source
n
peut être 1 et 2 n'est pas un palindrome de base 1. Cependant, chaque positifn
est unn + 1
palindrome de base .Réponses:
CJam , 19 octets / GolfScript, 23 octets
ou
Essayez-le en ligne:
Exemples
Comment ça fonctionne
Pour GolfScript,
q~
est~
,_
est.
,b
estbase
,W
est-1
etg
estdo
.la source
GolfScript, 20 caractères
Une approche différente avec GolfScript autre que Dennis '. Cela évite la boucle explicite coûteuse en faveur d'un opérateur de recherche . Essayez en ligne .
la source
x = 1
oux = 2
. Les deux sont desx + 1
palindromes de base à un seul chiffre , ilx))
faut donc y remédier.Mathematica,
6766 octetsJe ne peux pas vraiment rivaliser avec GolfScript ici en termes de taille de code, mais le résultat pour 2 32 est retourné instantanément.
la source
PalindromeQ
pour la vérification inverse?)Japt ,
129 octetsSauf si j'ai raté une astuce (il est tard!), Cela devrait fonctionner pour tous les numéros jusqu'à et y compris au moins
2**53-1
.Dans mes tests (certes limités et entièrement aléatoires), j'ai jusqu'à présent obtenu des résultats à la base (!). Pas trop mal si l' on considère JavaScript ne supporte nativement les bases pour .
11601
310,515
2
36
Essayez-le
Explication
Saisie implicite d'entier
U
.En commençant par
2
, retourne le premier nombre qui renvoie vrai lorsqu'il est passé par la fonction suivante, avecX
étant le nombre actuelConvertissez
U
en un tableau deX
chiffres de base .Testez si ce tableau est un palindrome.
la source
N.ì(n)
pouvait gérer des bases supérieures à36
. Merci pour ça.N.ì(n)
car nous utilisons des entiers bruts ;-)Python 2 (83)
Je ne sais pas quel format d'entrée / sortie la question voulait. J'ai écrit une fonction. Le code utilise une entrée facultative
b
pour suivre la base actuelle qu'il teste. Leswhile
boucles convertissent le nombre en une liste de chiffres en baseb
.La dernière ligne renvoie
b
ifl
est un palindrome et essaie récursivement la suivanteb
sinon. L'astuce d'indexation par booléen ne fonctionne pas ici car elle entraînerait l'évaluation des deux options indépendamment du booléen, et la récursivité ne serait jamais au plus bas.la source
JavaScript, 88 octets
Non golfé:
la source
Javascript, 105 octets
JSFiddle: http://jsfiddle.net/wR4Wf/1/
Notez que cette implémentation fonctionne également correctement pour les grandes bases. Par exemple,
f(10014)
renvoie 1668 (10014 est 66 en base 1668).la source
s/var b=2,c,d/b=d=2/
gagner 6 octets supplémentaires;)Bash + coreutils, 100 octets
Utilise
dc
pour faire le formatage de base. La chose délicate est quedc
le format est différent pour n> 16.Testcases:
la source
J - 28 caractères
Expliqué:
#.inv~
- Développez l'argument de gauche à la base dans l'argument de droite.(-.@-:|.@)
- Retourne 0 si l'expansion est palindromique, et 1 sinon.(1+]^:)
- Incrémentez le bon argument de un si nous avons renvoyé 1, sinon ne prenez aucune mesure.^:_
- Répétez l'incrémentation ci-dessus jusqu'à ce qu'il ne fasse rien.&2
- Préparez le bon argument en 2, ce qui en fait une fonction d'un seul argument.Exemples:
la source
2+1 i.~[#.inv"*(-:|.@)~2+i.
pour 27 octets. (Je ne veux pas le poster séparément. Je vais le laisser ici.)R,
12295 octetsSolution vieille de trois ans à 122 octets:
Avec quelques explications:
la source
Husk ,
119 octetsMerci @Zgarb pour -2!
Essayez-le en ligne!
Explication
la source
Remarque: Pyth est plus récent que cette question, donc cette réponse n'est pas éligible pour gagner.
Pyth, 10 octets
Essayez-le ici.
la source
Scala, 83 octets
la source
05AB1E , 8 octets
Essayez-le en ligne!
la source
Perl 5 , 84 + 1 (-p) = 85 octets
Essayez-le en ligne!
la source
JavaScript 72 octets
la source
Mathematica 42 octets
Une variation de l'entrée de Martin Ender. Utilise
IntegerReverse
(mis à disposition dans la version 10.3) qui dispense deIntegerDigits
.la source
Java 8, 103 octets
Explication:
Essayez-le ici.
la source