Étant donné 3 entiers, déterminez la base la plus basse possible pour que les deux premiers entiers se multiplient dans le troisième. Si vous pensez à la réponse à la question ultime de la vie, l'univers et tout, 6 * 9 == 42, est vrai dans la base 13.
Les entrées peuvent inclure tous les nombres dont les chiffres utilisent les caractères 0-9, az et AZ, où a
est égal à 10 en Base 10 et Z
61 en Base 10.
Les entrées doivent être entrées comme vous le souhaitez (sauf pour le codage en dur), et vous pouvez écrire soit une fonction individuelle, soit un programme entier.
La base maximale qui doit être prise en compte est la base 62 et la base minimale est la base 2.
Vous pouvez supposer que les deux premières valeurs sont inférieures à la troisième. Vous pouvez également conclure que la base minimale est supérieure au chiffre / caractère le plus élevé des entrées (par exemple, si les entrées le sont 3 1a 55
, la base minimale serait Base 11, car il a
s'agit du chiffre le plus élevé).
S'il n'y a pas une telle base, renvoyez une valeur indésirable de votre choix.
C'est le golf de code, donc le code le plus court gagne.
Cas de test
6 9 42 --> 13
a a 64 --> 16
aA bB 36jk --> 41
2 3 20 --> <junk value>
10 10 100 --> 2
la source
b
d'une manière générale commea_0 b^0 + a_1 b^1 + a_2 b^2 + ...
(oùa_0
est le chiffre le moins significatif) que la base 1 a vraiment du sens. De plus, la conclusion du PO inclurait également la base 1 dans la recherche si le plus grand chiffre actuel est 0.Réponses:
CJam,
525148 octetsTestez-le ici. Le testeur en ligne ne prend pas en charge la saisie via ARGV. L'alternative la plus proche est de mettre les entrées comme
6 9 42
dans STDIN et d'utiliser:Ceci s'imprime
-1
si aucune base valide jusqu'à 62 ne peut être trouvée.Un grand merci à Peter pour le code d'analyse des chiffres!
J'ai corrigé de nombreux problèmes qui ajoutaient 14 octets au décompte. L'explication suivante concerne toujours ma soumission d'origine, et je la mettrai à jour demain.
L'index est imprimé automatiquement à la fin du programme.
la source
32base~\[-16.35 9]=+
. Je sais que CJam a une conversion de base plus courte.APL (Dyalog Unicode) , 30 octets SBCS
Essayez-le en ligne!
Merci à Adám pour l'aide.
Explication:
Nous utilisons une fonction d'assistance,,
In
pour recevoir l'entrée dans un format plus agréable au goût. Sinon, l'entrée reçoit une matrice de 3 colonnes.'3 9 42'
donnerait, par exemple (lire de haut en bas puis de gauche à droite):Et pour
'aA bB 36jk'
(même ici.a
Est 10,b
est 11,A
est 36, etc.)la source
Python
2-197213Quel monstre ... (par rapport à CJam)
Malheureusement,
int
la conversion de base ne peut gérer que des bases jusqu'à 36. J'ai donc dû l'implémenter moi-même. (Voir cette merveilleuse solution .)la source
CJam, 53 octets
Prend les trois entrées de STDIN comme
Imprime
0
si le produit dans n'importe quelle base n'est pas possibleJe vais essayer de jouer au golf plus loin.
Essayez-le ici
la source
JavaScript (E6) 129
139Essayez récursivement toutes les bases de 2 à 62, en retournant -1 si aucune valeur n'est correcte.
La fonction JavaScript parseInt fonctionne avec une base jusqu'à 36, donc un peu d'aide est nécessaire pour de plus grandes bases.
Attention, les paramètres x, y, z sont des chaînes, pas des nombres.
C'est plus difficile qu'il n'y paraît. Merci à Martin d'avoir signalé un bug de base dans la première version.
Moins golfé
Testez dans la console FireFox / FireBug.
Le test essaie 1000 numéros avec différentes bases (jusqu'à 36, pas 62). Il convient de noter que la base trouvée peut être correcte mais inférieure à la base qui a généré le scénario de test.
la source
Fusain , 28 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Affiche
None
si aucune base valide ne peut être trouvée. Explication:la source
⍘
c'estAny
pour une raison quelconque ...Erlang (escript) - 200
Ajoutez deux nouvelles lignes principales qui doivent être présentes.
En lecture:
Invocation:
la source
if Digit < Base -> … end
partie s'en occupe. Si unif
bloc n'a pas de véritable branche, alors une exception est levée, qui se retrouve coincéetry … catch _:_ -> … end
.Haskell 216 car (177?)
J'ai essayé de jouer au golf autant que possible. Si les importations sont comptées, alors c'est mon code le plus court (216)
Cependant, si les importations n'étaient pas comptabilisées, voici ma meilleure version (177):
Ceci traite chaque nombre comme un polynôme P (x) où x est la base, à condition qu'aucun coefficient ne soit supérieur à x; J'évalue ensuite les polynômes sur chaque base possible, en m'arrêtant lorsque j'atteins celui qui satisfait à l'égalité P (x) * Q (x) = R (x). La règle «la base est plus grande que le plus grand chiffre» est appliquée avec le dernier garde dans la correspondance de modèle, à savoir
n>(m.map(m.f)$k)
. Je sais que différents défis de golf et différents fabricants de défis ont des politiques différentes concernant les importations vis-à-vis de la notation, alors prenez le deuxième avec un grain de sel.la source
Prolog - 195 octets
Fondamentalement, la même idée que ma réponse Erlang:
En lecture:
Invocation:
la source