Bestimmen Sie bei 3 gegebenen Ganzzahlen die niedrigstmögliche Basis für die ersten beiden Ganzzahlen, um sie mit der dritten zu multiplizieren. Wenn Sie an die Antwort auf die ultimative Frage des Lebens denken, ist das Universum und alles, 6 * 9 == 42, in der Basis 13 wahr.
Die Eingaben können beliebige Zahlen enthalten, deren Ziffern die Zeichen 0-9, az und AZ enthalten a
in Basis 10 10 und Z
in Basis 10 61 gleich sind.
Die Eingaben sollten nach Belieben eingegeben werden (mit Ausnahme der Hardcodierung), und Sie können entweder eine einzelne Funktion oder ein gesamtes Programm schreiben.
Die maximale Basis, die berücksichtigt werden muss, ist Basis 62 und die minimale Basis ist Basis 2.
Sie können davon ausgehen, dass die ersten beiden Werte kleiner als der dritte sind. Sie können auch den Schluss ziehen, dass die minimale Basis eine Stelle größer ist als die höchste Ziffer / das höchste Zeichen der Eingaben (wenn die Eingaben beispielsweise sind 3 1a 55
, wäre die minimale Basis die Basis 11, weila
es sich um die höchste Ziffer handelt).
Wenn es keine solche Basis gibt, geben Sie einen Junk-Wert Ihrer Wahl zurück.
Dies ist Codegolf, also gewinnt der kürzeste Code.
Testfälle
6 9 42 --> 13
a a 64 --> 16
aA bB 36jk --> 41
2 3 20 --> <junk value>
10 10 100 --> 2
quelle
b
auf eine allgemeine Art und Weise wiea_0 b^0 + a_1 b^1 + a_2 b^2 + ...
(woa_0
ist die niedrigstwertige Ziffer) definiere, ist Basis 1 definitiv sinnvoll. Darüber hinaus würde die Schlussfolgerung des OP auch die Basis 1 in die Suche einbeziehen, wenn die größte derzeitige Ziffer 0 ist.Antworten:
CJam,
525148 BytesTeste es hier. Der Online-Tester unterstützt keine Eingabe über ARGV. Die
6 9 42
naheliegendste Alternative besteht darin, die Eingabe wie in STDIN zu setzen und Folgendes zu verwenden:Dies wird gedruckt,
-1
wenn keine gültige Basis bis zu 62 gefunden werden kann.Vielen Dank an Peter für den Ziffern-Parsing-Code!
Ich habe viele Probleme behoben, durch die die Anzahl um 14 Bytes erhöht wurde. Die folgende Erklärung gilt immer noch für meine ursprüngliche Einreichung und ich werde sie morgen einige Zeit aktualisieren.
Der Index wird am Ende des Programms automatisch ausgedruckt.
quelle
32base~\[-16.35 9]=+
. Ich weiß, dass CJam eine kürzere Basiskonvertierung hat.APL (Dyalog Unicode) , 30 Byte SBCS
Probieren Sie es online!
Vielen Dank an Adám für die Hilfe.
Erläuterung:
Wir verwenden eine Hilfsfunktion,
In
um die Eingabe in ein schmackhafteres Format zu bringen. Ansonsten erhält die Eingabe eine Matrix aus 3 Spalten.'3 9 42'
würde zum Beispiel geben (von oben nach unten und dann von links nach rechts lesen):Und für
'aA bB 36jk'
(dasselbe hier.a
Ist 10,b
ist 11,A
ist 36, usw.)quelle
Python 2 -
197213Was für ein Monster ... (im Vergleich zu CJam)
Leider kann
int
die Basiskonvertierung nur Basen bis zu 36 verarbeiten. Daher musste ich sie selbst implementieren. (Siehe diese wunderbare Lösung .)quelle
CJam, 53 Bytes
Nimmt die drei Eingaben von STDIN gerne entgegen
Druckt
0
wenn das Produkt in einer beliebigen Basis nicht möglich istIch werde versuchen, weiter Golf zu spielen.
Probieren Sie es hier aus
quelle
JavaScript (E6) 129
139Versuchen Sie rekursiv alle Basen von 2 bis 62 und geben Sie -1 zurück, wenn kein Wert in Ordnung ist.
Die JavaScript-Funktion parseInt arbeitet mit einer Basis von bis zu 36, daher ist für größere Basen eine kleine Hilfe erforderlich.
Achtung, die Parameter x, y, z sind Strings, keine Zahlen.
Es ist schwieriger als es scheint. Vielen Dank an Martin für den Hinweis auf einen grundlegenden Fehler in der ersten Version.
Weniger golfen
Test In FireFox / Firebug - Konsole.
Der Test versucht 1000 Nummern mit verschiedenen Basen (bis zu 36, nicht 62). Es ist erwähnenswert, dass die gefundene Basis korrekt sein könnte, aber weniger als die Basis, die den Testfall generiert hat.
quelle
Kohle , 28 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Gibt aus,
None
ob keine gültige Basis gefunden werden kann. Erläuterung:quelle
⍘
istAny
aus irgendeinem Grunde ...Erlang (escript) - 200
Fügen Sie zwei führende Zeilen hinzu, die vorhanden sein müssen.
In lesbarem:
Aufruf:
quelle
if Digit < Base -> … end
Teil kümmert sich darum. Wenn einif
Block keine echte Verzweigung hat, wird eine Ausnahme ausgelöst, die abgefangen wirdtry … catch _:_ -> … end
.Haskell 216 char (177?)
Ich habe versucht, so viel wie möglich Golf zu spielen. Wenn Importe gezählt werden, ist dies mein kürzester Code (216)
Wurden die Importe jedoch nicht gezählt, so ist dies meine beste Version (177):
Dies behandelt jede Zahl als ein Polynom P (x), wobei x die Basis ist, unter der Bedingung, dass kein Koeffizient größer als x ist; Ich bewerte dann die Polynome über jede mögliche Basis und höre auf, wenn ich eines erreiche, das die Gleichheit P (x) * Q (x) = R (x) erfüllt. Die Regel "Basis ist größer als die größte Ziffer" wird mit dem letzten Wächter in der Musterübereinstimmung durchgesetzt, nämlich
n>(m.map(m.f)$k)
. Ich weiß, dass unterschiedliche Golfherausforderungen und unterschiedliche Herausforderer unterschiedliche Richtlinien in Bezug auf den Import in Bezug auf die Wertung haben. Nehmen Sie also die zweite mit einem Körnchen Salz.quelle
Prolog - 195 Bytes
Grundsätzlich die gleiche Idee wie meine Erlang-Antwort:
In lesbarem:
Aufruf:
quelle