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.
["zX", "tXdsyqzSDRP02", "brFNC02bc"] => "cb"
. (ou quoi que ce soit en fait, si c'est incorrect)