Wir haben eine streng zunehmende Folge von nicht negativen ganzen Zahlen, wie:
12 11 10
Warten! Diese Reihenfolge nimmt nicht unbedingt zu, oder? Nun, die Zahlen sind in verschiedenen Basen geschrieben. Die kleinstmögliche Basis ist 2, die größte ist 10.
Die Aufgabe besteht darin, zu erraten, dass jede Zahl so geschrieben ist, dass:
- die Reihenfolge nimmt strikt zu,
- Die Summe der Basen wird maximiert.
Die Lösung für die Stichprobe lautet beispielsweise:
6 8 10
weil unter diesen Basen die Sequenz 8 9 10
dezimal wird - eine streng ansteigende Sequenz, und wir sind nicht in der Lage, Basen zu finden, für die die Sequenz streng ansteigt und deren Summe größer als ist 6+8+10
.
Aufgrund der zweiten Einschränkung ist eine Lösung 3 5 7
nicht zufriedenstellend: Trotz der Tatsache, dass die Sequenz 5 6 7
unter diesen Basen liegt, müssen wir die Basensumme maximieren und 3+5+7 < 6+8+10
.
Wenn es unter keinen 2<=b<=10
Umständen möglich ist, dass die Reihe streng ansteigt, zum Beispiel:
102 10000 10
Single
0
sollte ausgegeben werden.
Die Eingabesequenz kann so übergeben werden, wie es für Ihre Lösung am bequemsten ist (Standardeingabe / Befehlszeilenparameter / Funktionsargumente ...).
quelle
1 3 5
eine aufsteigende Sequenz? Was ist1 7 22
? (in der Basis 10)1 3 5
und1 7 22
beide steigen unter die Basis 10. Die Lösung für beide Fälle ist also10 10 10
, dass wir die Summe der Basen maximieren müssen, während wir sicherstellen, dass die Sequenz steigt, wenn die n-te Zahl so interpretiert wird, dass sie in die Basis gleich n geschrieben wird -ter Begriff der Lösung.1 1 1
oder3 3 4
steigen nicht.Antworten:
Pyth,
313029 Bytes1 Byte danke an @Jakube.
Demonstration. Testgeschirr.
Die Eingabe erfolgt auf STDIN, durch Leerzeichen getrennt. Wenn eine durch Zeilenumbrüche getrennte Eingabe erlaubt ist, kann ich das Programm um 2 Bytes kürzen.
Erläuterung:
Die Aufnahme
1
in die Liste möglicher Basen ist sicher, dai
Pythonsint
Built-in1
als Basis nicht zulässig ist und daher immer einen Fehler auslöst , der abgefangen und herausgefiltert wird.quelle
CJam, 43 Bytes
Liest Befehlszeilenargumente und druckt ein Array.
Probieren Sie es online im CJam-Interpreter aus .
Beispiele
Wie es funktioniert
quelle
Julia,
1761561451181099997 BytesUngolfed:
Wird mit einem 1d-Array-Eingang verwendet. Wenn die Funktion zugewiesen ist
c
, würden Sie aufrufenc([12,11,10])
und es würde ausgeben[6,8,10]
.Hinweis: Ich habe
dec(i)
den Befehl parseint verwendet. Da es sich jedochi
um einen aus einem Zeichen bestehenden Variablennamen handelt und ich nicht auf eine Komponente zugreifen muss"$i"
, wurde das gleiche Ergebnis erzielt .quelle
c
, dannc([12,11,10])
Ausgaben[6,8,10]
, die die benötigten Basen sind.[12 11 10]
stattdessen einen Zeilenvektor verwendet[12,11,10]
, was den unerwünschten Effekt ergab.Julia,
259204183 BytesHabe mit Hilfe von Glen O einen Haufen gerettet.
Ungolfed + Erklärung:
quelle
for i=M(A[1]):10,j=M(A[2]):10,k=M(A[3]):10 <code here>end;
und speichern Sie acht für die abgelegten zweiend;
s und acht für das Ersetzen von `for` durch,
.s=map(parseint,x,[i,j,k])
, um 18 Byte im Vergleich zu Ihrer ursprünglichen Lösung und 10 Byte im Vergleich zu meinen vorherigen Verbesserungsvorschlägen zu sparen. Und anstatts==sort(unique(s))
, verwenden Sieall(diff(s).>0)
weitere 3 Bytes zu speichern.CJam (39 Bytes)
Dies ist eine anonyme Funktion, die die Eingabe als Array von Dezimalzahlen auf dem Stapel verwendet und die Ausgabe als Array oder Ganzzahl
0
auf dem Stapel belässt . Online-Demo .quelle
19
kann keine Basis 9 sein).Python 2 (147 Bytes)
Rufen Sie die Funktion
x
mit einer Liste der Ints auf.Beispiel:
druckt
quelle