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!
1-4 9-2
?149 150 151 152 153 154 155 156 157 178 159 160
?19-9
für19,20,...,29
und nicht,19-29
wie der Text impliziert. Also was ist richtig?Antworten:
LabVIEW, 97 * 0,8 * 0,75 * 0,5 = 29,1 LabVIEW-Grundelemente
Dies funktioniert, indem aufwärts gezählt wird, wenn aufeinanderfolgende Elemente 1 voneinander entfernt sind, und dann eine Zeichenfolge aus der Zahl und dem Zahlenmodul 10 erstellt wird, und einige Multiplikationsursachen, bei denen Negative eine Hündin sind.
Das GIF zeigt eine Eingabe von
8,9,10,11
und Ausgaben8-1
. Zur Eingabe-5,-4,-3,1,3,4,5
-5--3,1,3-5
kommt raus.quelle
C ++ 11, 451 × 80% × 75% × 50% = 135,3 Byte
9 Bytes dank @ kirbyfan64sos gespeichert.
19 Bytes dank @JosephMalle und @cat eingespart.
11 Bytes dank @ pinkfloydx33 gespart.
Dies qualifiziert sich für alle Boni.
Beispielparametertest und Ergebnis:
quelle
int
statt verwendenunsigned int
? Spart 9 Bytes.gcc
gaben:a.cpp: In function ‘std::string f(std::vector<int>)’: a.cpp:8:83: error: ‘to_string’ was not declared in this scope
-std=c++11
; > = 5.0 hat es standardmäßig aktiviert (eigentlich ist es-std=gnu11
, aber nah genug).Ruby,
120118 * 0,8 * 0,75 * 0,5 = 35,4 BytesÜbernimmt Befehlszeilenargumente als Eingabe (Kommas sind in Ordnung); druckt einen Bereich pro Zeile zur Standardausgabe.
Mit Leerzeichen / Kommentaren:
Testfälle
Funktionen, die von Testfällen nicht abgedeckt werden
Ungeordnete Eingabe- und Einzelelementbereiche:
Negative Bereiche (die größere Zahl kann damit nicht abgekürzt werden):
Abkürzung für eine beliebige Anzahl von Ziffern (gewöhnliche Bash-Erweiterung, die hier für die Eingabe verwendet wird):
quelle
((n=c.shift-1)>m)
mitm<n=c.shift-1
Javascript ES6, 229 * 80% * 75% * 50% = 68,7 Byte
Testeingang
Ich verwende folgende Testdaten:
Grundlegend: 229 Bytes
Diese Version erfüllt die Anforderungen der Frage (a) mit allen Boni (c, d, e), hängt aber an einzelnen Seiten. Es kann auch Duplikate verarbeiten (f). Negative Seiten können bis zu -10.000 Seiten verarbeitet werden, was sich bei (großen) Geschwindigkeitsverlusten leicht erhöhen lässt.
(Die Ausgabe oben zeigt der Kürze halber Leerzeichen anstelle von tatsächlichen Zeilenumbrüchen.)
Einzelseiten: 233 Bytes
Diese etwas längere Version erfüllt zusätzlich (e) und zeigt einzelne Seiten als einen Bereich mit gleichen unteren und oberen Grenzen an
quelle
GAP , 355 Bytes * 0,8 * 0,75 * 0,5 = 106,5
Dies erfüllt alle Boni. Es hat mich fast 100 zusätzliche Bytes gekostet, damit alles gut funktioniert. Diese Funktion lässt führende Ziffern nur dann aus, wenn die Lücke die Einerstelle nicht überschreitet. Zum Beispiel
9 10 11
Ausgänge,9-1
aber9 10 11 12 .. 20 21
Ausgänge9-21
.Wenn GAP ein bisschen weniger ausführlich gewesen wäre, hätte ich das ziemlich kurz bekommen können (hätte auch viele Bytes gespart, wenn ich nicht die exakte Syntax befolgt hätte.) Ich werde wahrscheinlich versuchen, dies morgen ein bisschen härter zu spielen. Testfälle siehe unten.
ungolfed:
Beachten Sie, dass in der GAP-Syntax
[a..b]
entspricht[a,a+1,...,b]
. Ich glaube, dass diese Testfälle zeigen, dass dieses Programm alle Anforderungen erfüllt. Wenn etwas nicht stimmt, lass es mich wissen.quelle
Lua, 322 × 80% × 75% × 50% = 96,6 Bytes
Endlich mit den 3 Herausforderungen fertig, Scores unter 100 Bytes: D
Golf gespielt
Ungolfed
Sie können lua online testen , um zu sehen, wie es sich gegen die Testfälle verhält. Kopieren Sie die Funktion, und fügen Sie den folgenden Code ein:
quelle
Java, 252 * 80% * 75% * 50% = 75,6 Byte
Ich habe mich für eine Methode entschieden (ist in Java viel kleiner), hier ist die Golfversion:
Golf gespielt
Und hier ist die lesbare Version:
Im Test sind dies die Ergebnisse:
Ausgabe:
Aktualisieren:
Jetzt können auch negative Zahlen verarbeitet werden, was den Bonus erhöht.
quelle
p=s=c=0;c--;
zup=s=0;c=-1;
?c=~(p=s=0)
für Stilpunkte tun .Japt, 127 Bytes * 80% * 75% * 50% = 38,1
Wow, das war eine echte Herausforderung, alle Boni einzuschließen. Es könnte wahrscheinlich kürzer gemacht werden.
Probieren Sie es online!
Wie es funktioniert
Die Erklärung ist sehr grob; Zögern Sie nicht, Fragen zu stellen.
quelle
R, 167 Bytes × 80% × 75% × 50% -> 50,1
Mit neuen Zeilen eingerückt:
Testfälle:
Es funktioniert für den -50% Bonus:
Es akzeptiert unsortierte Eingaben:
Es akzeptiert negative Zahlen:
quelle
sh, 135 × 8 × 75 × 5 = 40,5
Shell-Skript
awk script
Dabei
s
ist der Beginn der aktuellen Sequenz undo
der vorherige Eingabewert.quelle
-31, -30, -29, -28
sich an der Stelle der 10 von-3
bis-2
und soll daher auf verdichtet werden-31-8
. Ich sehe auch die Mehrdeutigkeit, die es schafft, aber das ist es, was gefragt ist.