Letzten Monat habe ich viele Bücher aus der Bibliothek ausgeliehen. Sie alle waren gute Bücher, voller Emotionen und Wendungen. Leider wurde ich an einigen Stellen sehr wütend / traurig / enttäuscht und riss einige Seiten heraus.
Jetzt möchte die Bibliothek wissen, wie viele Seiten ich für jedes Buch herausgerissen habe.
Ihr Ziel ist es, ein Programm zu schreiben, das eine sortierte, durch Kommas getrennte Liste von Zahlen als Eingabe verwendet und die minimal und maximal mögliche Seitenzahl ausgibt, die ich herausgerissen haben könnte. Jede Zeile repräsentiert ein Buch, jede Zahl repräsentiert eine fehlende Seite aus dem Buch.
Beispiel Eingabe:
7,8,100,101,222,223
2,3,88,89,90,103,177
2,3,6,7,10,11
1
1,2
Beispielausgabe:
4/5
5/6
3/6
1/1
1/2
4/5
Das bedeutet, dass ich möglicherweise 4 oder 5 Seiten herausgerissen habe, je nachdem, auf welcher Seite die Seitennummerierung des Buches beginnt. Man hätte Seite 6/7, Seite 8/9, Seite 100/101 und Seite 222/223 (4 Seiten) herausreißen können. Alternativ könnte man Seite 7/8, Seite 99/100, Seite 101/102, Seite 221/222 und Seite 223/224 (5 Seiten) herausgerissen haben.
Denken Sie daran, dass eine Buchseite immer eine Vorder- und eine Rückseite hat. Auch die Seitennummerierung unterscheidet sich von Buch zu Buch. Einige Bücher haben auf der linken Seite gerade Seitenzahlen. einige auf der rechten Seite. Alle Bücher werden von links nach rechts gelesen.
Kürzester Code in Bytes gewinnen. Ein striktes E / A-Format ist nicht erforderlich. Ihre Programme müssen in der Lage sein, ein oder mehrere Bücher als Eingabe zu verwenden. Habe Spaß.
4/5
und5/4
)min/max
oder alle konsistent sein mussmax/min
. (Obwohl ich persönlich es vorziehen würde, dass das nicht Teil der Spezifikation ist!)programs must be able to take one or more books as input
herrschen? Die meisten (wenn nicht alle) wickeln den Code einfach ein, um ein einzelnes Buch in eine Schleife oder so etwas zu verifizieren. IMHO fügt es nur einen Overhead zu der Antwort hinzu, mit wenig bis gar keinem Gewinn für die Herausforderung. Diese Fragen haben bereits viele Antworten erhalten, daher ist es besser, diese so zu belassen, wie sie sind, dies jedoch für zukünftige Herausforderungen im Auge zu behalten.1,3,5,7,9,11,13,15,17,18
- Für Sprachen, deren integriertesort
Methode standardmäßig lexikografisch sortiert ist (vorausgesetzt , der Spezifikation wird die Anforderung einer konsistent sortierten Ausgabe hinzugefügt).Antworten:
05AB1E , 13 Bytes
Probieren Sie es online!
Vielen Dank an Emigna für das Heads-up zu Spezifikationsänderungen.
Erläuterung
quelle
Python 2 ,
72566867 BytesProbieren Sie es online!
quelle
JavaScript,
104939285807974 BytesWären 57 Bytes, wenn nicht die unnötige (meiner Meinung nach) Anforderung besteht, dass jedes Zahlenpaar in der Ausgabe konsistent sortiert wird, oder 47 Bytes, wenn wir nur ein Buch als Eingabe benötigen.
Eingabe und Ausgabe sind jeweils ein Array von Arrays.
Testfälle
Testfälle werden zur besseren Lesbarkeit in einzelne Bücher aufgeteilt, wobei der letzte Fall (einschließlich des
[1,2]
Kantenfalls) dazu dient, zu veranschaulichen, dass diese Lösung mehrere Bücher in der Eingabe unterstützt.Geschichte
Code-Snippet anzeigen
quelle
[1,3,5,7,9,11,13,15,17,18]
.[0,.5]
anstatt es zu verwenden,g
als ich Ihren Kommentar entdeckte. Ich weiß nicht, warum ich bei bitweisen Operatoren so eine mentale Blockade habe! Ich hatte gehofft, dass die Ausgabesortierung nicht zu einer Anforderung wird und dasssort()
in der Zwischenzeit niemand merkt, dass ich kaputt bin .y/2
? Was ist der Grund dafür, die Seitenzahl für diesen Algorithmus in zwei Hälften zu teilen?Retina 0.8.2 , 60 Bytes
Probieren Sie es online! Erläuterung:
Wandeln Sie die Seitenzahlen in unäre um.
Duplizieren Sie die Liste, indem Sie a einfügen
/
.Erhöhen Sie die Seitenzahlen in einer Kopie der Liste.
Zählen Sie die Anzahl der Seiten, aber fortlaufende gerade und ungerade Zahlen zählen nur als eine Seite.
Sortieren Sie die Zählungen in der Reihenfolge.
Rechne die Zählungen in Dezimalzahlen um.
quelle
,(?=.*/)¶1,
so etwas sein,.*/¶1$&
?Haskell , 62 Bytes
Probieren Sie es online!
quelle
Your goal is to write a program, which takes a sorted, comma-delimmited list of numbers as input
)Java (OpenJDK 9) , 163 Byte
Probieren Sie es online!
Erklärungen
Hinweis: Da dies nicht erforderlich ist, werden die minimalen und maximalen Seitenzahlen nicht bestellt.
quelle
size
mitadd
in Java , um vielleicht ein paar Bytes zu speichern? zBs.add(p/2).size
.APL (Dyalog Unicode) , 37 Byte
Probieren Sie es online!
Dies kann für weniger als die Hälfte der Bytezahl durchgeführt werden, wenn die Ausgabereihenfolge der Seiten keine Rolle spielt:
Wie?
quelle
Perl 5 , 95 + 1 (
-a
) = 96 BytesProbieren Sie es online!
quelle
Wolfram-Sprache (Mathematica) , 37 Byte
Danke @MartinEnder für 8 Bytes!
Probieren Sie es online!
Erläuterung
Im:
{3, 4, 5}
Nehmen Sie (Eingabe) und (Eingabe + 1).
{{3, 4, 5}, {4, 5, 6}}
Nehmen Sie für jede Zahl von oben die größte gerade Zahl abzüglich der Zahl.
{{2, 4, 4}, {4, 4, 6}}
Teilen Sie die Liste für jede Liste von oben nach denselben Elementen auf
{{{2}, {4, 4}}, {{4, 4}, {6}}}
und nimm die Länge von jedem:
{2, 2}
Sortieren Sie die Ausgabe.
quelle
SplitBy
:Length@Split@⌊#/2⌋&/@{#,#+1}&
funktioniert. Aber dann ist es noch kürzer den Bodenbelag vor der Karte zu tun:Length@*Split/@⌊{#,#+1}/2⌋&
. Und wenn Sie möchten, können Sie die gleiche Byteanzahl auch ohne Unicode erhalten:Length@*Split/@{#,#+1}~Floor~2&
Sauber ,
222210204196 BytesProbieren Sie es online!
Vollständige Programmvoraussetzungen bringen die Wettbewerbsfähigkeit von Clean absolut zum Erliegen.
Für diejenigen, die auf meine Antworten in Clean geachtet haben, werden Sie feststellen
import qualified
, dass es ein hässlicher Hack ist, Module zu verwenden, die nicht zusammen verwendet werden sollten - was nur hier erforderlich ist, weil ein weiterer hässlicher Hack durchgeführt werden muss mitGenLib
abhängig vonData.Maybe
stattStdMaybe
, was das Ergebnis eines weiteren hässlichen Hacks in den von Haskell übersetzten Bibliotheken istData
, um Funktionalität zu erhalten, bevor die eigenen Bibliotheken von Clean gleichermaßen vollständig sind.Übernimmt die Eingabe über Befehlszeilenargumente.
quelle
Perl, 40 Bytes
Enthält
+1
füra
Ausgang ist nicht bestellt.
Nimmt positive Seitenzahlen an (insbesondere keine Seite
0
). Angenommen, fehlende Seiten werden nur einmal erwähnt. Es ist egal, ob der Eingang bestellt ist oder nicht.Durch die Verarbeitung von nur einem Buch pro Lauf werden
3
Byte gespart für37
:quelle