Wir haben viele Herausforderungen basierend auf Basis 10, Basis 2, Basis 36 oder sogar Basis -10 , aber was ist mit all den anderen rationalen Basen?
Aufgabe
Geben Sie bei einer Ganzzahl in Basis 10 und einer rationalen Basis die Ganzzahl in dieser Basis zurück (als Array, Zeichenfolge usw.).
Prozess
Es ist schwierig, sich eine rationale Basis vorzustellen. Visualisieren wir sie also mit Exploding Dots :
Betrachten Sie diese Animation und drücken Sie 17 in Basis 3 aus:
Jeder Punkt stellt eine Einheit dar, und Kästchen stellen Ziffern dar: Das Feld ganz rechts ist der Platz eines Menschen, das mittlere Feld ist der Platz 3 ^ 1 und das Feld ganz links ist der Platz 3 ^ 2.
Wir können mit 17 Punkten am eigenen Platz beginnen. Dies ist jedoch Basis 3, daher muss die Einerstelle kleiner als 3 sein. Daher "explodieren" wir 3 Punkte und erstellen einen Punkt auf dem Feld links. Wir wiederholen dies, bis wir eine stabile Position ohne explodierbare Punkte haben (dh 3 Punkte in derselben Box).
17 in Basis 10 ist also 122 in Basis 3.
Eine gebrochene Basis ist analog zum Explodieren einer bestimmten Anzahl von Punkten in mehr als einen Punkt. Basis 3/2 würde 3 Punkte explodieren lassen, um 2 zu erzeugen.
17 in Basis 3/2 ausdrücken:
17 in Basis 10 ist also 21012 in Basis 3/2.
Negative Basen funktionieren ähnlich, aber wir müssen die Zeichen im Auge behalten (unter Verwendung sogenannter Anti-Punkte, gleich -1; dargestellt durch einen offenen Kreis).
17 in Basis -3 ausdrücken:
Beachten Sie, dass es zusätzliche Explosionen gibt, um das Vorzeichen aller Kästchen gleich zu machen (Nullen werden ignoriert).
Somit ist 17 in Basis 10 212 in Basis -3.
Negative rationale Grundlagen funktionieren in einer Kombination der beiden oben genannten Fälle ähnlich.
Regeln
- Keine Standardlücken.
- Das Vorzeichen jeder "Ziffer" in der Ausgabe muss gleich (oder Null) sein.
- Der Absolutwert aller Ziffern muss kleiner sein als der Absolutwert des Zählers der Basis.
- Sie können davon ausgehen, dass der Absolutwert der Basis größer als 1 ist.
- Sie können annehmen, dass eine rationale Basis in ihrer niedrigsten reduzierten Form vorliegt.
- Sie können den Zähler und den Nenner der Basis separat in der Eingabe verwenden.
- Wenn eine Zahl mehrere Darstellungen hat, können Sie eine davon ausgeben. (zB 12 in Basis 10 kann
{-2, -8}
und{1, 9, 2}
in Basis -10 sein)
Testfälle:
Format: {in, base} -> result
{7, 4/3} -> {3, 3}
{-42, -2} -> {1, 0, 1, 0, 1, 0}
{-112, -7/3} -> {-6, -5, 0, -1, 0}
{1234, 9/2} -> {2, 3, 6, 4, 1}
{60043, -37/3} -> {-33, -14, -22, -8}
Da einige Eingaben möglicherweise mehrere Darstellungen haben, empfehle ich, die Ausgabe mit diesem Mathematica-Snippet auf TIO zu testen .
Dies ist Code-Golf , also gewinnen Einsendungen mit kürzesten Bytes in jeder Sprache!
Weitere Informationen zu explodierenden Punkten finden Sie auf der Website des globalen Mathematikprojekts ! Sie haben ein paar coole Mathe-Sachen!
quelle
Antworten:
Python 2 ,
4239 BytesProbieren Sie es online aus!
Vielen Dank an @xnor für das Finden der kürzeren Form.
Veraltete Version (42 Bytes):
Probieren Sie es online aus!
Parameter: Eingabe, Zähler (mit Vorzeichen) und Nenner.
Gibt ein Array zurück, niedrigste Ziffer zuerst.
Dies funktioniert nur, weil die Division und das Modulo in Python dem Vorzeichen des Nenners folgen, sodass wir uns nicht explizit um dieselben Vorzeichen kümmern müssen.
Testfallausgabe:
quelle
Aheui (Esotop) , 91 Bytes
Probieren Sie es online aus!
Nimmt
integer
,numerator of base
unddenominator of base
.Aufgrund der Einschränkung des TIO-Interpreters muss jede Eingabe mit einer neuen Zeile enden.
Implementierung der Python 2-Antwort von @ Bubbler . Glücklicherweise ist dieser Aheui-Interpreter in Python geschrieben, sodass wir denselben Trick anwenden können.
quelle
05AB1E ,
1110 BytesProbieren Sie es online aus!
Nimmt
integer
,numerator of base
unddenominator of base
wie alle Antworten. Da der 05AB1E-Interpreter in Python (?) Geschrieben ist, kann der Python 2-Antworttrick von Bubbler auch in 05AB1E verwendet werden.Erläuterung
Das Programm funktioniert also ungefähr genauso wie dieser Python-Code:
11> 10 Danke Neil
quelle
_
anstelle von0Q
hier verwenden.