Un chiffre est un nombre naturel qui peut être écrit uniquement en répétant le même chiffre. Par exemple, 777
est un chiffre, car il est uniquement composé du chiffre 7
répété trois fois.
Cependant, cela ne se limite pas aux nombres simplement décimaux (base 10):
- Chaque nombre de Mersenne (de la forme M n = 2 n -1 ) est un chiffre lorsqu'il est écrit en binaire (base 2).
- Chaque nombre est trivialement un chiffre lorsqu'il est écrit en unaire (base 1).
- Chaque nombre
n
peut également être trivialement écrit comme le chiffre11
de base dans la basen-1
(par exemple,17
lorsqu'il est écrit en hexadécimal (base 16)11
, et3
lorsqu'il est écrit en binaire (base 2) l'est également11
).
Le défi ici est de trouver d' autres bases où le numéro d'entrée peut être un chiffre.
Contribution
Un entier positif x > 3
, dans n'importe quel format pratique.
Production
Un entier positif b
avec (x-1) > b > 1
où la représentation de x
dans la base b
est un chiffre.
- S'il n'en
b
existe pas, sortie0
ou valeur Falsey . - S'il en
b
existe plusieurs, vous pouvez en sortir une partie ou la totalité.
Règles
- La
(x-1) > b > 1
restriction est d'empêcher les conversions triviales en unaire ou la base "soustraire une". Le numéro de sortie peut être écrit en unaire ou dans n'importe quelle base pratique, mais la base elle-même ne doit pas être l'une des conversions triviales. - L'entrée / sortie peut se faire via n'importe quelle méthode appropriée .
- Des restrictions standard contre les échappatoires s'appliquent.
Exemples
In --> Out
11 --> 0 (or other falsey value)
23 --> 0 (or other falsey value)
55 --> 10 (since 55 is 55 in base 10)
90 --> 14 (since 90 is 66 in base 14 ... 17, 29, 44 also allowed)
91 --> 9 (since 91 is 111 in base 9 ... 12 also allowed)
code-golf
base-conversion
AdmBorkBork
la source
la source
b ≤ 36
(les fonctions de conversion de base intégrées de nombreux langages ne vont pas plus haut)?b ≤ 36
considérablement la portée de ce problème et que toutes les réponses existantes gèrent correctement les bases plus grandes, je vais donc dire non, vous ne pouvez pas supposer une limite supérieure au-b
delà de ce qui est donné.Réponses:
Gelée,
119 octetsRenvoie une liste de bases, qui est vide (fausse) s'il n'y en a pas. Essayez-le en ligne!
Comment ça marche
la source
Pyth,
11dixApparemment, Pyth recherche unaire
q
une liste qui a toutes les valeurs uniques d'il y a environ 10 jours. Apparemment, enquêter sur les bugs Pyth améliore les scores de golf.Filtre la liste
[2..input-1)
si l'ensemble unique de chiffres de l'entrée dans cette base est de longueur 1.Suite de tests
Explication:
la source
Rubis,
876963 octetsJ'ai dû implémenter la conversion de base à la main, car les buildins de Ruby ne montent qu'à la base 36 ...
Renvoie
nil
pour introuvable.la source
Python, 71
7278octetsPas de récursivité, essaie simplement toutes les bases et sort un ensemble de celles qui fonctionnent.
Il est tentant de coder
b
etd
en un seul numéro, mais il faut trop d'expressions entre parenthèses pour les extraire. 77 octets:72 octets:
Sort le premier
b
qui fonctionne, ou0
si aucun ne fonctionne.Une unité
x
de répétition ded
chiffres dec
en baseb
a une valeurx==c*(b**d-1)/(b-1)
. De manière équivalente,x*(b-1)==c*(b**d-1)
.La valeur
c
doit êtrex%b
le dernier chiffre. Je ne vois cependant aucun moyen de déterminerd
arithmétiquement, donc le code essaie toutes les possibilités pour voir si l'une d'entre elles fonctionne.Enregistré 5 octets en copiant l'astuce de Dennis de donner une sortie falsey quand
b
atteintx-1
en prenant le modulo de sortiex-1
. Un autre octet sauvé de Dennis me rappelant que l'exponentiation est inexplicablement plus prioritaire~
.Une solution de longueur égale avec
in
au lieu deany
.la source
Rubis, 50 octets
Je voudrais vraiment supprimer cet espace ennuyeux, mais en tant que nouveau venu dans ruby, je ne connais pas encore bien ses bizarreries syntaxiques.
la source
b?
serait un nom de méthode valide, donc vous ne pouvez pas vous débarrasser de l'espace.Emojicode , 214 octets
(77 caractères):
Imprime les résultats en base 9.
J'avais l'intention de faire un golf de code avec emojicode depuis quelques semaines maintenant, mais le langage n'est devenu que suffisamment stable pour fonctionner avec 😉. En prime, cette question utilise le seul élément de fonctionnalité qu'emojicode est en fait vraiment bon: représenter des entiers dans d'autres bases.
Ungolfed (👴 est un commentaire de ligne en emojicode)
la source
Python 2, 79 octets
Essayez-le sur Ideone .
Idée
Tout chiffre x de la base b> 1 et du chiffre d <b satisfait aux conditions suivantes.
Puisque d <b , la carte (b, d) ↦ cb + d est injective.
De plus, puisque b, x> 1 , nous avons c <x , donc cb + d <cb + b = (c + 1) b ≤ xb .
Cela signifie que, pour trouver des valeurs appropriées pour c et d pour une base b donnée , nous pouvons parcourir tous les i dans [0,…, bx) et vérifier si (b - 1) x == (i% b) (b i / b - 1) .
Code
Le lambda f nommé teste si (b - 1) x est dans l'ensemble {(i% b) (b i / b - 1) | 0 ≤ i <bx} , en commençant par la valeur b = 2 .
Si le test a réussi, nous revenons b .
Sinon, nous appelons à nouveau f , avec les mêmes x et b incrémentés de 1 .
Puisque b peut finalement atteindre x - 1 , nous prenons le résultat final modulo x - 1 pour retourner 0 dans ce cas. Notez que cela ne se produira pas si b = 2 remplit la condition, car elle est renvoyée sans récurrence. Cependant, la question garantit que b = 2 <x - 1 dans ce cas.
la source
Perl 6,
454342 octetsExpliqué (en quelque sorte)
Pour référence, une variable
$^x
dans{ ... }
est identique à faire-> $x { ... }
Polymod (TL; DR):
$n.polymod($b xx *)
vous donne une liste inversée de chiffres / 'chiffres' pour$n
dans la base$b
Polymod (pour de vrai): La méthode polymod est presque comme une version plus puissante de la
divmod
fonction de python .$n.polymod(*@args)
divise $ n par chaque valeur dans * @ args, en ajoutant le reste ($n mod $x
) à la liste qu'il renvoie et en utilisant le quotient pour la division suivante. Je sens que je l'ai mal expliqué alors voici quelques exemples (écrits en perl 6, mais assez propres pour être compris par la plupart j'espère):la source
grep
méthode au lieu de lafirst
méthode.Dyalog APL , 28 octets
{
...⍵
...}
fonction anonyme à appliquerx
(représenté par⍵
) desb←1+⍳⍵-3
nombres entiers de 2 - ⍵-2 stockées en tant queb
⍵{
...}¨
pour chaque élément b (⍵
), appliquer la fonction{
...}
avec x comme argument de gauche⍺
⍵⊥⍣¯1⊢⍺
converti x à ladite base1=≢∪
est égal à 1 égal au décompte de chiffre unique?b/⍨
éléments de b où vrai (qu'il n'y a qu'un seul chiffre unique).Exemples de cas
Si aucune base n'existe, la sortie est vide (ce qui est falsey), comme le démontre ce programme:
Cela imprime «Faux»
la source
Pyth,
2619 octetsEssayez-le ici!
Ajoutera une explication après avoir joué au golf.Regardez cette réponse pour une implémentation et une explication plus courtes.la source
90
et91
dans mes exemples!MATL ,
1514 octetsCela fonctionne avec la version actuelle (14.0.0) du langage / compilateur.
Si aucune base n'existe, la sortie est vide (ce qui est falsey).
Essayez-le en ligne!
la source
Mathematica, 55 octets
Fonction anonyme, pas trop compliquée. Filtre simplement les bases basées sur la répétition.
la source
Python 2, 75 octets
Un port de ma réponse rubis. Imprime toutes les bases valides s'il en existe.
la source
Julia, 45 octets
Il s'agit d'une fonction anonyme qui accepte un entier et renvoie un tableau d'entiers. Pour l'appeler, affectez-le à une variable. Il renverra toutes les bases applicables ou un tableau vide. Il n'y a aucun problème avec les grandes bases.
D'abord, nous générons la plage inclusive [2, n - 2], où n est l'entrée. Nous listons ensuite
filter
uniquement les entiers b pour lesquels n dans la base b a moins de 2 chiffres uniques. Pour ce faire, pour chaque entier b de la plage, nous obtenons les chiffres de n dans la base b sous forme de tableau en utilisantdigits
, obtenons des éléments uniques en utilisant∪
et obtenons l'index du dernier élément (c'est-à-dire la longueur) en utilisantendof
.la source
Brachylog , 12 octets
Essayez-le en ligne! (comme générateur!)
Prend l'entrée via la variable d'entrée et sort une base via la variable de sortie dans le cas où cela est possible, sinon. Dans le même temps, il fonctionne également comme un générateur qui génère une liste de toutes les bases, où cette liste peut être vide.
Idéalement, cela pourrait ressembler à quelque chose
ḃ↙.=&>>
, sacrifiant peut-être la fonctionnalité du générateur sous cette forme ou une autre similaire (car cela finirait par frapper unaire), mais à partir de maintenant 12 octets est le plus court que je sais comment l'obtenir.la source
Rubis ,
4643 octetsUtilise le nombre entier # introduite dans Ruby 2.4 pour éviter d'avoir à diviser manuellement.
-3 octets grâce à @Jordan.
Essayez-le en ligne!
la source
05AB1E , 7 octets
Sort toutes les valeurs possibles, ou une liste vide comme valeur de falsey (bien que les sorties techniquement valables soient aussi falsey, car seule
1
est vraie en 05AB1E, et tout le reste est falsey).Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Perl 5
-Minteger -na
, 63 octetsEssayez-le en ligne!
Génère toutes les réponses possibles ou rien si aucune solution n'existe.
la source