Les pouvoirs en place veulent pouvoir convertir rapidement n'importe quel nombre qu'ils ont en leur propre base numérique en utilisant le format qu'ils souhaitent.
Contribution
Votre programme doit accepter 3 paramètres.
- Number: numéro de chaîne à convertir
- InputFormat: la chaîne de base dans laquelle le numéro est actuellement
- OutputFormat: la chaîne de base dans laquelle le nombre doit être converti.
Sortie
Votre programme doit convertir la base Number
de l'ancien numéro InputFormat
en la nouvelle base de numéroOutputFormat
Exemples
("1","0123456789","9876543210") = "8"
("985724","9876543210","0123456789ABCDEF") = "37C3"
("FF","0123456789ABCDEF","0123456789") = "255"
("FF","0123456789ABCDEF","01234567") = "377"
("18457184548971248772157", "0123456789","Aa0Bb1Cc2Dd3Ee4Ff5Gg6Hh7Ii8Jj9Kk,Ll.Mm[Nn]Oo@Pp#Qq}Rr{Ss-Tt+Uu=Vv_Ww!Xx%Yy*Zz") = ",sekYFg_fdXb"
Additionnel
Le nouveau test de base 77 n'est pas un accessoire nécessaire s'il fonctionne bien
- si vous êtes dans une langue où vous devez d'abord convertir en nombre et êtes verrouillé dans 32 bits, vous pouvez l'ignorer.
- car c'est un test supplémentaire.
Tous les exemples ont été générés par PHP 7.2 avec l'extension bcmath en utilisant le code suivant (vars mins mais formaté en code). il y aura probablement un moyen plus court, c'est juste la façon dont j'ai trouvé le système avec lequel je devais le faire serait bien de voir si quelqu'un pourrait proposer une version plus courte.
PHP 7.2 (bcmath - extension) 614 octets
<?php
function f($a, $b, $c)
{
$d= str_split($b,1);
$e= str_split($c,1);
$f= str_split($a,1);
$g=strlen($b);
$h=strlen($c);
$k=strlen($a);
$r='';
if ($c== '0123456789')
{
$r=0;
for ($i = 1;$i <= $k; $i++)
$retval = bcadd($retval, bcmul(array_search($f[$i-1], $d),bcpow($g,$k-$i)));
return $r;
}
if ($b!= '0123456789')
$l=f($a, $b, '0123456789');
else
$l= $a;
if ($l<strlen($c))
return $e[$l];
while($l!= '0')
{
$r= $e[bcmod($l,$h)].$r;
$l= bcdiv($l,$h,0);
}
return $r;
}
Notation
C'est le golf de code; le code le plus court gagne. Des échappatoires standard s'appliquent.
la source
["zX", "tXdsyqzSDRP02", "brFNC02bc"] => "cb"
. (ou quoi que ce soit en fait, si c'est incorrect)Réponses:
MATL , 2 octets
Essayez-le en ligne!
Tous les cas de test.
Pour le seigneur Za !
la source
Za
conversion de base a été effectuée, mais les documents sur matl.suever ne savaient pas clairement qu'elle acceptait les caractères de la base, donc je ne l'ai pas essayé. Déchirez-moi!R , 124 octets
Essayez-le en ligne!
Ugh, c'était un doozy. J'utilise les astuces de conversion de base typiques pour R, mais les manipulations de chaînes dans R sont toujours en désordre!
la source
log(N+1,T)
mais en provoquant parfois un zéro de tête, par exemple lorsque vous convertissez 31 de la base 10 en base 2 :(log(N+!N,T)
sûr utiliser!
avec le sens originalAPL (Dyalog Unicode) , 22 octets
Infixe anonyme lambda. Prend
InputFormat
comme argument de gauche etOutputFormat
comme argument de droite, et demande àNumber
partir de stdin. Suppose que⎕IO
( I ndex O rigin) est0
, ce qui est le cas par défaut sur de nombreux systèmes.Essayez-le en ligne!
{
…}
"Dfn";⍺
est l'argument gauche,⍵
est l'argument droit(mnémonique: extrémités gauche et droite de l'alphabet grec)
⍵[
…]
Indexez le format de sortie comme suit:⎕
demande de saisie⍺⍳
ɩ ndices de ces caractères dans le format d'entrée(
…)⊥
Évaluer comme étant dans la base suivante:≢⍺
la longueur du format d'entrée⊢
rendement qui (se sépare¯1
de(≢⍺)
)(
…)⊥⍣¯1
Convertir à la base suivante:≢⍺
la longueur du format de sortiela source
Japt, 5 octets
Retour au golf après une pause de 2 semaines
Essayez-le
Explication
la source
C (gcc), 79 + 46 = 125 octets
Cela doit être compilé avec le
drapeau. (Oui, c'est incroyablement sommaire, c'est pourquoi je garde mon ancienne réponse ci-dessous.) Cela définit une macro
f
qui renvoie la réponse à STDOUT.Essayez-le en ligne!
C (gcc),
133131 octetsEssayez-le en ligne!
Ceci définit une fonction
f
qui renvoie la réponse à STDOUT.la source
putchar
lieu dewrite
et changer la boucle de décodage légèrement: Essayez en ligne!index
fonction m'a également sauvé un octet avec mon approche, je ne le savais pas;)05AB1E , 5 octets
Essayez-le en ligne!
Cela ne fonctionne pas dans la version héritée de 05AB1E. Il ne fonctionne que sur la nouvelle version, la réécriture Elixir.
Comment ça marche
la source
MATL , 5 octets
sundar a trouvé le véritable module intégré pour ce faire! Allez voter cette réponse au lieu de ma stupide :-(
Essayez-le en ligne!
la source
Fusain , 5 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
La
BaseString
fonction convertit automatiquement entre nombre et chaîne selon le type du premier paramètre.la source
Python 2 ,
132129122 122121 octetsEssayez-le en ligne!
Une fonction anonyme (merci, Erik the Outgolfer !) Qui convertit le nombre d'origine en un entier de base 10, puis transmet l'entier et la nouvelle chaîne de base à la fonction g (), qui convertit récursivement en la nouvelle base. Transmet maintenant la longueur du OutputFormat en tant que paramètre à g ().
Mise à jour de g () pour un nombre d'octets inférieur. (merci Dennis !)
Index () remplacé par find (). (merci, M. Xcoder !)
Explication non golfée:
la source
f=
, les fonctions anonymes sont autorisées par défaut.g=lambda n,c:c[n:n+1]or g(n/len(c),c)+c[n%len(c)]
.lambda n,a,b:g(sum(len(a)**i*a.find(j)for i,j in enumerate(n[::-1])),b,len(b))
.Gelée , 11 octets
Essayez-le en ligne!
Ordre des arguments: InputFormat, Number, OutputFormat. Assurez-vous de citer les arguments avec un échappement approprié!
la source
Pyth, 21 octets
Suite de tests
Explication:la source
Haskell , 119 octets
Essayez-le en ligne!
la source
Perl 6 ,
10097 octetsEssayez-le en ligne!
Bloc de code anonyme qui prend 3 chaînes dans l'ordre, entrée, format d'entrée et format de sortie, puis retourne une chaîne
Explication:
la source
VBA, 182 octets
Un sous-programme déclaré qui prend des entrées,
n
dans la languey
et les projette dans la languez
.la source
JavaScript (ES6),
9086 octetsPrend l'entrée comme
(input_format)(output_format)(number)
.Essayez-le en ligne!
la source
C (gcc) ,
130129 octetsEssayez-le en ligne!
-1 octet utilisant
index
au lieu destrchr
.Il s'agit d'une approche itérative simple, réutilisant certaines variables (et donc abusant
sizeof(int) == sizeof(char *)
sur TIO) pour économiser des octets.Contribution:
i
numéro d'entrées
caractères de base sourcet
personnages de base ciblesSortie:
r
numéro de résultat (pointeur vers un tampon)Explication:
la source
bcopy(r,r+1,++i)
place dememmove(r+1,r,++i)
Python 2 ,
9795 octetsMerci à Chas Brown pour -2 octets.
Essayez-le en ligne!
la source
Java 10, 131 octets
Un lambda prenant les paramètres dans l'ordre sous forme de chaînes et renvoyant une chaîne.
Essayez-le en ligne
Non golfé
la source