L'objectif de ce défi est d'écrire un programme pour convertir une chaîne entrée de ce qui peut être supposé ne contenir que des lettres et des chiffres provenant d'autant de bases entre 2 et 36 que possible, et trouver la somme de base 10 des résultats.
La chaîne d'entrée sera convertie à toutes les bases dans lesquelles le nombre sera défini en fonction de l'alphabet standard pour les bases pouvant aller jusqu'à 36: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Par exemple, l'entrée 2T
ne serait valide que dans les bases 30 et supérieures. Le programme convertirait 2T des bases 30 à 36 en décimales et additionnerait les résultats.
Vous pouvez supposer que la chaîne d'entrée ne contient que des lettres et des chiffres. Votre programme peut utiliser des majuscules ou des minuscules; il peut, mais n'a pas besoin, prendre en charge les deux.
Cas de test
Exemple d'entrée: 2T
Tableau des bases possibles
Base Value
30 89
31 91
32 93
33 95
34 97
35 99
36 101
Sortie: 665
Exemple d'entrée: 1012
Tableau des bases possibles:
Base Value
3 32
4 70
5 132
6 224
7 352
8 522
9 740
10 1012
11 1344
12 1742
13 2212
14 2760
15 3392
16 4114
17 4932
18 5852
19 6880
20 8022
21 9284
22 10672
23 12192
24 13850
25 15652
26 17604
27 19712
28 21982
29 24420
30 27032
31 29824
32 32802
33 35972
34 39340
35 42912
36 46694
Production: 444278
Exemple d'entrée: HELLOworld
Tableau des bases possibles
Base Value
33 809608041709942
34 1058326557132355
35 1372783151310948
36 1767707668033969
Production: 5008425418187214
Une entrée de 0
serait lue comme 0
dans toutes les bases entre 2 et 36 inclus. La base 1 n'existe pas.
C'est le golf de code. Des règles standard s'appliquent. Le code le plus court en octets gagne.
la source
0
0
un test élémentaire important?0
est0
dans chaque base, et il n'y a rien de tel que la base 1.Réponses:
Python 3,
727169 octetsMerci à FryAmTheEggman d'avoir enregistré un octet!
Merci à DSM pour avoir économisé 2 octets!
la source
try
except
vous laissera fairerange(37)
. Deux octets!Pyth,
201911 octetsVola ouvertement l'idée d'Adnan dans sa réponse Python.
Essayez-le ici
la source
S
charbon1012
.Pure Bash (pas d'utilitaires), 38
En supposant que les conversions de base intégrées sont autorisées:
Cela générera une erreur dans STDERR. Je suppose que c'est OK selon cette méta-réponse .
Sortie de test:
la source
Mathematica, 57 octets
la source
FromDigits
.Sérieusement, 65 octets
Contient non imprimable, hexdump:
Malheureusement, je n'ai pas un bon moyen de filtrer à partir d'une liste basée sur les types. Note à soi: ajoute ça.
Prend l'entrée comme
"2T"
Essayez-le en ligne (vous devrez saisir manuellement la saisie)
Explication:
la source
Matlab, 98 octets
la source
Octave,
7573 octetsExplication:
polyval
a un avantage sur lebase2dec
fait qu'il est vectorisé, donc aucunefor
boucle n'est requise.Seuls «0» .. «9» et les majuscules «A» .. «Z» sont pris en charge en entrée.
la source
polyval
vectoriser!Japt , 26 octets
Essayez-le en ligne!
Non golfé et explication
la source
Pyth, 16 octets
Essayez-le en ligne
Explication:
la source
CJam,
2827 octetsMerci à Reto Koradi pour avoir économisé 1 octet.
C'est un peu horrible ...
Nécessite des lettres majuscules.
Testez-le ici.
CJam n'a pas de conversion de base-36 intégrée à partir de chaînes, nous devons donc écrire les chaînes nous-mêmes. J'ai essayé toutes sortes de manigances divmod, mais cela semble être le plus court pour construire une chaîne de 36 chiffres et trouver juste l'index de chaque caractère dans cette chaîne.
la source
q{'0-_9>7*-}%
est tout aussi court.Fonction C, 93 (sortie entière 32 bits uniquement)
En supposant que son OK pour que la sortie monte jusqu'à INT_MAX, alors nous pouvons le faire:
Le dernier cas de test implique que ce n'est probablement pas suffisant. Si c'est le cas, alors avec des entiers 64 bits, nous avons:
Fonction C, 122
Malheureusement, le
#include <stdlib.h>
est requis donc le type de retourstrtoll()
est correct. Nous devons utiliserlong long
pour gérer leHELLOworld
boîtier de test. Sinon, cela pourrait être un peu plus court.Pilote de test:
Sortie de test:
la source
#include <stdlib.h>
comme vous le pouvez en C ++?Python 3, 142 octets
Adnan m'a bien battu avec leur solution, mais je voulais ajouter ma propre tentative.
Cette fonction ne gère que les entrées en majuscules. Ajoutez
.upper()
àfor i in s
, et il gérera les majuscules et les minuscules.la source
Scala 2.11, 93 octets
Il est exécuté sur la console scala.
la source
Haskell, 97 octets
Ne prend en charge que les caractères minuscules. Exemple d'utilisation:
C'est tellement énorme, car je dois implémenter moi-même la conversion de char en ASCII et la base. Les fonctions prédéfinies correspondantes se trouvent dans des modules qui nécessitent des importations encore plus coûteuses.
Comment ça marche:
i
convertit un caractèrec
en sa valeur numérique (par exemplei 't'
->29
).f
calcule la valeur de la chaîne d'entrée pour chaque base possible et la somme. Une version non ponctuelle de la boucle interne estmap (\base -> foldl1 (\value digit -> value*base + digit) (map i s)) [ ...bases... ]
.la source
JavaScript (ES6), 86 octets
Explication
Tester
Afficher l'extrait de code
la source
&&b=v
enregistre 1 octet de plus?b=v:0
.Perl 6 , 35 octets
usage:
la source
Ceylan,
10096 octetsJ'ai d'abord eu cette version plus simple ne prenant que 69 octets:
Mais cela échoue avec le premier cas de test, retournant à la
2000000000665
place de665
. ( La raison en est que leT
in2T
est analysé comme Tera, c'est-à-dire multiplie le 2 par 10 ^ 12, lorsque le radix est 10. ) Par conséquent, nous devons attraper ce cas séparément. Merci à Neil d' avoir suggéré une autre façon de faire qui a permis d'économiser 4 octets.Formaté:
la source