Ziel dieser Herausforderung ist es, ein Programm zu schreiben, mit dem eine eingegebene Zeichenfolge, von der angenommen werden kann, dass sie nur Buchstaben und Zahlen aus möglichst vielen Basen zwischen 2 und 36 enthält, konvertiert und die Summe der Ergebnisse zur Basis 10 ermittelt wird.
Die Eingabezeichenfolge wird an alle Basen überführt werden , in dem die Nummer für bis zu 36 Basen nach dem Standard Alphabet definiert wäre: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Beispielsweise 2T
wäre die Eingabe nur in den Basen 30 und höher gültig. Das Programm würde 2T von den Basen 30 bis 36 in Dezimalzahlen konvertieren und die Ergebnisse summieren.
Sie können davon ausgehen, dass die Eingabezeichenfolge nur Buchstaben und Zahlen enthält. Ihr Programm verwendet möglicherweise Groß- oder Kleinbuchstaben. es kann, muss aber nicht beides unterstützen.
Testfälle
Beispieleingabe: 2T
Tabelle möglicher Basen
Base Value
30 89
31 91
32 93
33 95
34 97
35 99
36 101
Ausgabe: 665
Beispieleingabe: 1012
Tabelle möglicher Basen:
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
Ausgabe: 444278
Beispieleingabe: HELLOworld
Tabelle möglicher Basen
Base Value
33 809608041709942
34 1058326557132355
35 1372783151310948
36 1767707668033969
Ausgabe: 5008425418187214
Eine Eingabe von 0
würde wie 0
in allen Basen zwischen 2 und einschließlich 36 gelesen werden . Es gibt keine Basis 1.
Das ist Code Golf. Es gelten Standardregeln. Kürzester Code in Bytes gewinnt.
quelle
0
0
ein Testfall wichtig?0
ist0
in jeder Basis, und es gibt keine Basis 1.Antworten:
Python 3,
727169 BytesVielen Dank an FryAmTheEggman für das Speichern eines Bytes!
Danke an DSM für das Speichern von 2 Bytes!
quelle
try
except
wirst du tun lassenrange(37)
. Zwei Bytes!Pyth,
20 -19 -11 BytesOffensichtlich stahl Adnans Idee aus seiner Python-Antwort.
Probieren Sie es hier aus
quelle
S
Zeichen1012
.Pure Bash (keine Dienstprogramme), 38
Vorausgesetzt, integrierte Basisumwandlungen sind zulässig:
Dies gibt einen Fehler an STDERR aus. Ich gehe davon aus, dass dies gemäß dieser Meta-Antwort in Ordnung ist .
Testausgang:
quelle
Mathematica, 57 Bytes
quelle
FromDigits
.Im Ernst, 65 Bytes
Enthält nicht druckbare Hexdumps:
Leider habe ich keine gute Möglichkeit, anhand von Typen aus einer Liste zu filtern. Notiz an mich selbst: füge das hinzu.
Nimmt Eingaben wie
"2T"
Probieren Sie es online aus (Sie müssen die Eingabe manuell eingeben)
Erläuterung:
quelle
Matlab, 98 Bytes
quelle
Octave,
7573 BytesErläuterung:
polyval
hat den Vorteil,base2dec
dass es vektorisiert ist, so dass keinefor
Schleife erforderlich ist.Als Eingabe werden nur '0' .. '9' und Großbuchstaben 'A' .. 'Z' unterstützt.
quelle
polyval
zu vektorisieren!Japt , 26 Bytes
Probieren Sie es online!
Ungolfed und Erklärung
quelle
Pyth, 16 Bytes
Probieren Sie es online aus
Erklärung:
quelle
CJam,
2827 BytesVielen Dank an Reto Koradi für das Speichern von 1 Byte.
Das ist irgendwie schrecklich ...
Erfordert Großbuchstaben.
Teste es hier.
CJam verfügt nicht über eine integrierte Base-36-Konvertierung von Strings, daher müssen wir die Strings selbst ausbuchstabieren. Ich habe alle möglichen Divmod-Spielereien ausprobiert, aber es scheint am kürzesten zu sein, eine Zeichenfolge mit allen 36 Ziffern zu erstellen und einfach den Index jedes Zeichens in dieser Zeichenfolge zu finden.
quelle
q{'0-_9>7*-}%
ist genauso kurz.C-Funktion, 93 (nur 32-Bit-Integer-Ausgabe)
Angenommen, es ist OK, damit die Ausgabe nur bis zu INT_MAX geht, dann können wir dies tun:
Der letzte Testfall impliziert, dass dies wahrscheinlich nicht ausreicht. Wenn ja, dann haben wir mit 64-Bit-Ganzzahlen:
C-Funktion, 122
Leider
#include <stdlib.h>
ist das erforderlich, damit der Rückgabetypstrtoll()
korrekt ist. Wir müssen verwendenlong long
, um denHELLOworld
Testfall zu behandeln . Ansonsten könnte dies etwas kürzer sein.Testfahrer:
Testausgang:
quelle
#include <stdlib.h>
Können Sie in C den Raum entfernen, wie Sie es in C ++ können?Python 3, 142 Bytes
Adnan hat mich mit ihrer Lösung klar geschlagen, aber ich wollte meinen eigenen Versuch hinzufügen.
Diese Funktion verarbeitet nur Eingaben in Großbuchstaben. Add
.upper()
tofor i in s
, und es wird sowohl Groß- als auch Kleinbuchstaben verarbeiten.quelle
Scala 2.11, 93 Bytes
Dies wird auf der Scala-Konsole ausgeführt.
quelle
Haskell, 97 Bytes
Unterstützt nur Kleinbuchstaben. Anwendungsbeispiel:
Es ist so gewaltig, weil ich sowohl Char-to-ASCII- als auch Base-Konvertierung selbst implementieren muss. Die entsprechenden vordefinierten Funktionen befinden sich in Modulen, die noch teurere Importe erfordern.
So funktioniert es:
i
Wandelt ein Zeichenc
in seinen Ziffernwert um (zBi 't'
->29
).f
berechnet den Wert der Eingabezeichenfolge für jede mögliche Basis und summiert ihn. Eine nicht-punktfreie Version der inneren Schleife istmap (\base -> foldl1 (\value digit -> value*base + digit) (map i s)) [ ...bases... ]
.quelle
JavaScript (ES6), 86 Byte
Erläuterung
Prüfung
Code-Snippet anzeigen
quelle
&&b=v
Spart 1 Byte mehr?b=v:0
.Perl 6 , 35 Bytes
Verwendung:
quelle
Ceylon,
10096 BytesIch hatte zuerst diese einfachere Version mit nur 69 Bytes:
Dies schlägt jedoch mit dem ersten Testfall fehl und wird
2000000000665
stattdessen zurückgegeben665
. ( Der Grund ist, dass dasT
in2T
als Tera analysiert wird, dh die 2 mit 10 ^ 12 multipliziert wird, wenn der Radix 10 ist. ) Daher müssen wir diesen Fall separat erfassen. Vielen Dank an Neil , der eine andere Methode vorgeschlagen hat, mit der 4 Byte eingespart wurden.Formatiert:
quelle