Haftungsausschluss: Ich bin zwar schon eine Weile zu Unterhaltungszwecken auf dieser Website, aber dies ist meine erste Frage. Bitte verzeihen Sie kleinere Fehler.
Hintergrund
Mein Lehrer ist sehr nervig, wenn er uns die Hausaufgaben zuweist und schreibt alle Probleme auf, die wir individuell lösen müssen. Als solches brauche ich ewig, um herauszufinden, welche Probleme ich zu lösen habe. Ich dachte, um mein Leben zu erleichtern, würde ich ihm ein Programm schicken, mit dem die Liste der Probleme weniger Platz beanspruchen könnte.
Während wir eine Liste mit Seiten- oder Problemnummern aufschreiben, verwenden wir einen Bindestrich, um einen Bereich zu kennzeichnen. Zum Beispiel 19-21
wird 19, 20, 21
. Wenn dazwischen eine Lücke besteht, werden zwei durch Kommas getrennte Bereiche verwendet: 19-21, 27-31
wird 19, 20, 21, 27, 28, 29, 30, 31
.
Im Moment denken Sie wahrscheinlich: "Das scheint ziemlich trivial zu sein". Tatsächlich wurde dies hier und hier bereits beantwortet .
Es gibt jedoch einen Haken. Wenn wir einen Bereich mit gleichen aufeinanderfolgenden Ziffern haben, können die wiederholten Ziffern weggelassen werden. Zum Beispiel: 15, 16, 17
wird 15-7
und 107, 108, 109
wird 107-9
. Wenn die letzte aufeinanderfolgende gleiche Ziffer um 1 größer und die letzte Ziffer der oberen Grenze kleiner oder gleich der unteren ist, kann als Bonus das Folgende weggelassen werden (sorry, wenn das verwirrend klang; vielleicht klären es einige Beispiele) . 109-113
wird 109-3
, da eine niedrigere letzte Ziffer bedeutet, dass der 10er Platz erhöht wird.
Herausforderung
Ihr Programm sollte eine Liste von ganzen Zahlen über die Eingabe erhalten (was auch immer für Ihre Sprache oder eine Funktion Standard ist). Sie können entscheiden, ob diese Liste durch Kommas, Leerzeichen oder als tatsächliche Liste / Array getrennt sein soll.
Geben Sie den kürzesten Weg aus (zuerst sortiert nach Anzahl der Bereiche, dann die Summe der Zeichen in den Bereichen), um diese Liste mit dieser Notation darzustellen. Jeder gestrichelte Bereich muss sich in derselben Zeile befinden, die Bereiche können jedoch durch Kommas oder Zeilenumbrüche getrennt werden (nachfolgende Zeilenumbrüche oder Kommas sind zulässig). Diese Bereiche müssen in Ordnung sein.
Da unser Schul-WLAN schrecklich ist , muss ich die Datei so klein wie möglich machen, um sie ihm zu senden. Der kürzeste Code (in Bytes) gewinnt.
Boni
Mein Lehrer ist schlampig, also gibt es ein paar Dinge, die ihm helfen könnten. Mehrere Boni stapeln sich durch Multiplikation, z. B. ein Bonus von -10% (x 90%) und ein Bonus von -25% (x 75%) = 90% * 75% = x 67,5% (-32,5% Bonus).
- Manchmal bringt er sie in die falsche Reihenfolge (er ist kein Mathematiklehrer). Holen Sie sich einen Bonus von -20%, wenn Ihr Programm Ganzzahlen akzeptiert, die nicht vom kleinsten zum größten sortiert sind.
- Unser Buch ist komisch und in jedem Abschnitt werden die Probleme bei -10 gezählt. Wenn Ihr Programm negative Zahlen akzeptiert, nehmen Sie -25%.
- Akzeptiert es den Bonus einer niedrigeren letzten Ziffer, erhöht sich die Zehnerstelle, z. B.
25-32
reduziert sich der Bonus auf25-2
, erhalten Sie einen Bonus von -50%.
Testfälle
In: 1, 2, 3, 4, 5
Out: 1-5
In: 3, 4, 5, 9, 10, 11, 12
Out: 3-5, 9-12
In: 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
Out: 149-60
In: 1 2 3 4
Out: 1-4
For bonuses:
In: 109, 110, 111, 112, 113
Out: 109-3
In: 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
Out: 19-9
In: -3, -2, -1, 0, 1, 2
Out: -3-2
In: -3, -2, -1
Out: -3--1
Eine Antwort wird am Samstag, den 19. Dezember 2015, akzeptiert.
VIEL GLÜCK UND VIEL SPASS!
149 150 151 152 153 154 155 156 157 178 159 160
?
19-9
für 19,20,...,29
und nicht, 19-29
wie der Text impliziert. Also was ist richtig?
1-4 9-2
?