Gegeben ist eine ganze Zahl x> 0 und eine beliebige Basis y> 3.
- Summiere alle Ziffern von x (falls in der eingestellten Basis geschrieben).
- Multiplizieren Sie dies mit der höchstmöglichen Ziffer (ist immer
base -1
). - Wiederholen, bis dieser Wert ist
(y - 1) ^ 2
Gesucht wird die Anzahl der Iterationen und die Schritte.
Beispiel 1:
x= 739
y= 7
searched: (7 - 1) ^ 2 = 36
based: (b7)2104
sum: (dec)7
mul: (dec)42
based: (b7)60
sum: (dec)6
mul: (dec)36
2 steps needed -> answer is [2, 739, 42, 36] or [739, 42, 36, 2]
Beispiel 2:
x = 1712
y = 19
s: 324
step1: 1712 -> 360
step2: 360 -> 648
step3: 648 -> 324
3 steps needed -> answer is [3, 1712, 360, 648, 324] or [1712, 360, 648, 324, 3]
Special:
In einigen Fällen (einige Kombinationen mit einer Basis von 3) Sie werden nicht in der Lage sein zu bekommen (y - 1) ^ 2
wie für x = 53
und y = 3
. Aus diesem Grund y
muss größer als 3 sein und Sie können dies ignorieren.
Die Anzahl der Iterationen muss der erste oder der letzte Wert sein
Dies ist Code-Golf mit der niedrigsten Anzahl an Bytes.
code-golf
combinatorics
base-conversion
Dirk Reichel
quelle
quelle
Antworten:
Gelee ,
1413 Bytes-1 Byte durch Drucken während der Schleife (
Ṅ
Ersetzen einer Kettenseparationµ
und Verkettung;
)TryItOnline!
Wie?
Der alternative 13-Byter druckt jede Eingabe in die Schleife plus einen Zeilenvorschub (
Ṅ
) und druckt schließlich implizit die dekrementierte Anzahl der gesammelten Ergebnisse, wodurch die Notwendigkeit einer monadischen Kettentrennung (µ
) und Verkettung (;
) entfällt .quelle
Perl 6 , 60 Bytes
Erweitert:
Verwendung:
quelle
C
116113 Bytes-3 Bytes für die Neuberechnung des Quadrats jedes Mal
Ungolfed und Verwendung:
quelle
JavaScript (ES6),
97918482 ByteTestfälle
Code-Snippet anzeigen
quelle
Gelee , 16 Bytes
Ich denke, ich werde das trotzdem posten, obwohl es während des Schreibens geschlagen wurde, weil es ein deutlich anderer Algorithmus ist und es interessant zu schreiben war. (Ich konnte nicht herausfinden, wie
ÐĿ
aus den Dokumenten analysiert wurde, und musste darauf verzichten, obwohl ich wusste, dass dies wahrscheinlich zu einer kürzeren Lösung als dieser führen würde.)Probieren Sie es online aus!
Erläuterung:
Die Verwendung von
<’¥
ist im Grunde eine kurze Möglichkeit, eine Dyade (Verknüpfung mit zwei Argumenten) zu schreiben, die immer -1 zurückgibt (weil wir wissen, dass die Antwort niemals kleiner als die Basis sein wird). Wenn Sie zwischen einer rekursiven Ausführung und einer rekursiven Ausführung des gesamten Programms wählen, können Sie bestimmen, wann die Schleife beendet werden soll. Wenn sich der Stapel am Ende der Rekursion abwickelt, erhöhen wir die -1 weiter, um zu bestimmen, wie viele Schritte vorhanden waren.quelle
MATL,
2521 Bytes4 Bytes dank @Luis gespeichert
Probieren Sie es online aus!
Erläuterung
quelle
Mathematica, 80 Bytes
ist das ZeichenU+F4A1
für den privaten Gebrauch, das zur Darstellung verwendet wird\[Function]
. Wenn die Anzahl der Schritte in der Antwort nicht erforderlich wäre, könnte dies in 60 Bytes erfolgen:quelle