Die Befugnisse, die in der Lage sein möchten, jede Zahl, die sie haben, schnell in ihre eigene Zahlenbasis umzuwandeln, und zwar in jedem gewünschten Format.
Eingang
Ihr Programm muss 3 Parameter akzeptieren.
- Number: Die zu konvertierende Zeichenfolgennummer
- InputFormat: Die Basiszeichenfolge, in der sich die Nummer derzeit befindet
- OutputFormat: Die Basiszeichenfolge, in die die Zahl konvertiert werden soll.
Ausgabe
Ihr Programm muss Number
die alte InputFormat
in die neue Nummernbasis konvertierenOutputFormat
Beispiele
("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"
Zusätzlich
Der neue Base 77-Test ist keine Requisite, wenn er funktioniert
- Wenn Sie in einer Sprache sind, in der Sie zuerst in eine Zahl konvertieren müssen und die innerhalb von 32 Bit gesperrt ist, können Sie sie überspringen.
- da es ein zusätzlicher test ist.
Alle Beispiele wurden von PHP 7.2 mit der Erweiterung bcmath unter Verwendung des folgenden Codes generiert (vars mins, aber code formatiert). Es wird wahrscheinlich einen kürzeren Weg geben. Dies ist genau der Weg, den ich für das System gefunden habe, mit dem ich dies tun musste. Es wäre schön zu sehen, ob jemand eine kürzere Version finden könnte.
PHP 7.2 (Bcmath - Erweiterung) 614 Bytes
<?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;
}
Wertung
Das ist Code Golf; kürzester Code gewinnt. Es gelten Standardlücken.
quelle
["zX", "tXdsyqzSDRP02", "brFNC02bc"] => "cb"
. (oder was auch immer das eigentlich sein sollte, wenn das nicht stimmt)Antworten:
MATL , 2 Bytes
Probieren Sie es online!
Alle Testfälle.
Für den Za-Lord !
quelle
Za
die Base konvertiert wurde, aber die Dokumente auf matl.suever waren nicht klar, dass sie die Zeichen der Base akzeptierten. also habe ich es nicht ausprobiert. Zerreiße mich!R , 124 Bytes
Probieren Sie es online!
Ugh, das war ein Trottel. Ich verwende die typischen Tricks zur Basiskonvertierung für R, aber String-Manipulationen in R sind immer noch chaotisch!
quelle
log(N+1,T)
aber manchmal eine führende Null verursachen, zB wenn Sie 31 von Basis 10 nach Basis 2 konvertieren :(log(N+!N,T)
natürlich!
mit der ursprünglichen BedeutungAPL (Dyalog Unicode) , 22 Byte
Anonymes Infix Lambda. Nimmt
InputFormat
als linkes Argument undOutputFormat
als rechtes Argument und fordert zur EingabeNumber
von stdin auf. Nimmt an⎕IO
( I ndex O rigin) zu sein0
, was auf vielen Systemen Standard ist.Probieren Sie es online!
{
...}
"dfn";⍺
ist linkes Argument,⍵
ist rechtes Argument(Mnemonik: linkes und rechtes Ende des griechischen Alphabets)
⍵[
…]
Indizieren das Ausgabeformat wie folgt:⎕
Eingabeaufforderung⍺⍳
ɩ Indexe dieser Zeichen im Eingabeformat(
…)⊥
Bewerten als in der folgenden Basis:≢⍺
die Länge des Eingabeformats⊢
ergibt das (trennt sich¯1
von(≢⍺)
)(
…)⊥⍣¯1
Konvertiere zu folgender Basis:≢⍺
die Länge des Ausgabeformatsquelle
Japt, 5 Bytes
Nach einer zweiwöchigen Pause können Sie wieder Golf spielen
Versuch es
Erläuterung
quelle
C (gcc), 79 + 46 = 125 Bytes
Dies muss mit dem kompiliert werden
Flagge. (Ja, das ist unglaublich lückenhaft, weshalb ich meine alte Antwort unten
f
behalte. ) Dies definiert ein Makro , das die Antwort an STDOUT ausgibt.Probieren Sie es online!
C (gcc)
133131 BytesProbieren Sie es online!
Dies definiert eine Funktion
f
, die die Antwort an STDOUT ausgibt.quelle
putchar
stattwrite
und die Änderung der Decodierung Schleife leicht: Versuchen Sie es online!index
Funktion ersparte mir ein Byte bei meiner Annäherung, wusste nichts davon;)05AB1E , 5 Bytes
Probieren Sie es online!
Dies gilt nicht arbeitet in der alten Version von 05AB1E. Es funktioniert nur mit der neuen Version, dem Elixir Rewrite.
Wie es funktioniert
quelle
MATL , 5 Bytes
sundar hat das wirklich eingebaute dafür gefunden! Gehen Sie diese Antwort anstelle meiner dummen upvote :-(
Probieren Sie es online!
quelle
Kohle , 5 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Die
BaseString
Funktion konvertiert abhängig vom Typ des ersten Parameters automatisch zwischen Zahl und Zeichenfolge.quelle
Python 2 ,
132129122121 BytesProbieren Sie es online!
Eine anonyme Funktion (danke, Erik the Outgolfer !), Die die ursprüngliche Zahl in eine Ganzzahl zur Basis 10 umwandelt, dann die Ganzzahl und die neue Basiszeichenfolge an die Funktion g () übergibt, die rekursiv in die neue Basis umwandelt. Übergibt nun die Länge des OutputFormat als Parameter an g ().
Aktualisierte g () für einen niedrigeren bytecount. (Danke, Dennis !)
Ersetzte index () durch find (). (Danke, Mr. Xcoder !)
Ungolfed Erklärung:
quelle
f=
, anonyme Funktionen sind standardmäßig erlaubt.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))
.Jelly , 11 Bytes
Probieren Sie es online!
Argumentreihenfolge: InputFormat, Number, OutputFormat. Stellen Sie sicher, dass Sie die Argumente mit korrekter Flucht angeben!
quelle
Pyth, 21 Bytes
Testsuite
Erläuterung:quelle
Haskell , 119 Bytes
Probieren Sie es online!
quelle
Perl 6 ,
10097 BytesProbieren Sie es online!
Anonymer Codeblock, der 3 Zeichenfolgen in der Reihenfolge, Eingabe, Eingabeformat und Ausgabeformat verwendet und anschließend eine Zeichenfolge zurückgibt
Erläuterung:
quelle
VBA, 182 Bytes
Eine deklarierte Subroutine, die Eingaben
n
in der Sprache entgegennimmty
und diese in die Sprache projiziertz
.quelle
JavaScript (ES6),
9086 BytesÜbernimmt die Eingabe als
(input_format)(output_format)(number)
.Probieren Sie es online!
quelle
C (gcc),
130129 bytesTry it online!
-1 byte using
index
instead ofstrchr
.This is a simple iterative approach, reusing some variables (and thereby abusing
sizeof(int) == sizeof(char *)
on TIO) to save bytes.Input:
i
input numbers
source base characterst
target base charactersOutput:
r
result number (pointer to a buffer)Explanation:
quelle
bcopy(r,r+1,++i)
instead ofmemmove(r+1,r,++i)
Python 2,
9795 bytesThanks to Chas Brown for -2 bytes.
Try it online!
quelle
Java 10, 131 bytes
A lambda taking the parameters in order as strings and returning a string.
Try It Online
Ungolfed
quelle