iBug hat kürzlich eine lange Stange aus zusammengesetzten, aber wertvollen Materialien bekommen. Die Bar ist so lang, dass iBug sie nicht ohne Weiteres für Credits verkaufen kann, also möchte er sie kürzen. Die Stange besteht aus so zerbrechlichen und magischen Materialien, dass bei Bruch eines Teils auch alle Teile der Stange aus demselben Material brechen, was ein willkürliches Schneiden erschwert.
iBug möchte die Leiste in so viele Stücke wie möglich schneiden. Er liebt auch sehr kurze Programme und Code-Golfen, deshalb machte er eine abstrakte Analyse seines Problems.
Die magische Leiste von iBug wird wie folgt als Zeichenfolge dargestellt (oder als Array oder Zeichenfolge, wenn Sie dies bevorzugen):
aaabbccccccbbbaaacccccaabbbaaaaa
Jeder Buchstabe in der Zeichenfolge steht für ein magisches Material. Die Leiste entspricht immer der RegEx ^\w*$
, sodass sich möglicherweise bis zu 63 Materialien in der Leiste befinden. Ein "Teil" ist eine fortlaufende Folge von Zeichen, die nicht durch Leerzeichen getrennt sind.
iBug möchte, dass Sie ein Programm schreiben, das die maximale Anzahl der Teile berechnet, die er erhalten kann, wenn null oder mehr Zeichensätze vollständig entfernt (durch Leerzeichen ersetzt) werden, und iBug diese Zahl mitteilen.
Beispiel 1:
In: aaabbccccccbbbaaacccccaabbbaaaaa
Out: 4
Beschreibung: Wenn b
es vollständig von der Leiste entfernt wird, könnte iBug 4 Teile bekommen. Er kann auch 4 Teile durch Entfernen von b
und erhalten c
, wie unten gezeigt
aaabbccccccbbbaaacccccaabbbaaaaa # Original string
aaa cccccc aaacccccaa aaaaa # Remove 'b'
aaa aaa aa aaaaa # Remove 'b' and 'c'
Und das ist die maximale Anzahl von Teilen, die iBug von dieser Leiste erhalten kann
Beispiel 2:
In: 111aa___9999____aaa99111__11_a_aa999
Result: 111aa 9999 aaa99111 11 a aa999
Out: 6
Beschreibung: Durch Entfernen nur des Unterstrichs kann iBug 6 Teile aus der Leiste entfernen, und das ist das Maximum.
Beispiel 3:
In: __________
Out: 1
Beschreibung: Was? Willst du das schneiden? Es ist nur möglich, 1 Teil zu bekommen, wenn Sie es überhaupt nicht schneiden.
Beispiel 4:
In:
Out: 0
Beschreibung: Es gibt nichts zu schneiden, also null.
Es gibt auch einige Regeln, denen iBug folgen soll:
iBug mag keine Standardlücken und sie sind verboten.
Solange es funktioniert, muss es kein vollständiges Programm sein. Eine Funktion, die Eingaben von einem Parameter entgegennimmt und über den Rückgabewert ausgibt, wird ebenfalls akzeptiert.
Flexible Ein- und Ausgabe sind erlaubt. Ihr Programm oder Ihre Funktion kann eine Zeichenfolge oder ein Array von Zeichen enthalten oder alles, was Sie am einfachsten zu handhaben finden. Sie können die Ausgabe geben, indem Sie die Nummer ausdrucken oder zurücksenden.
Beispiel-Testfälle (aber nicht darauf beschränkt)
aaabbbaaa = 2
123456789 = 5
AaAaAaAa = 4
aaabcccdedaaabefda = 6
________ = 1
(empty) = 0
Da dies ein Code-Golf ist , gewinnt das kürzeste Programm (in Bytes) in jeder Sprache!
Extra
iBug ist sehr dankbar, wenn Sie eine Erklärung für Ihr Programm angeben können, auch wenn dies keinen Einfluss auf Ihre Bewertung hat (es ist immer noch eine Länge in Byte).
123456789
5? Und wie ergibt sichaaabcccdedaaabefda
6? Für diese beiden Testfälle bekomme ich jeweils 2 und 4.2468
, für das zweite entfernenbd
.2,4,6,8
von der ersten undb,d,f
von der zweiten.Antworten:
Haskell ,
73 7170 BytesDanke an Laikoni für das Speichern von 1 Byte!
Probieren Sie es online!
quelle
maximum$(length$words x):
kann auf gekürzt werdenmaximum$length(words x):
.JavaScript (ES6),
109 bis90 ByteEtwas langsam im
123456789
Testfall. Die vorherige 109-Byte-Antwort war nicht beschränkt auf!/\s/
:quelle
Python 2 ,
1119372 Bytes-21 Bytes danke Kirill L.
Probieren Sie es online!
quelle
Jelly ,
1311 BytesZu viele 2-Byte-Anweisungen-2 dank Zgarb (benutze das äußere Produkt schnell
þ
>. <)Ein monadischer Link, der eine Liste von Zeichen akzeptiert und eine nicht negative Ganzzahl zurückgibt.
Probieren Sie es online!
Wie?
Für jede Untersequenz der Eingabe (die Mengen, die wir entfernen können, plus redundante Äquivalente) wird eine Existenzliste erstellt, um zu identifizieren, welche entfernt werden, und dann wird effektiv ermittelt, wie viele Nullenläufe übrig sind, und das Maximum erhalten. Der letzte Teil funktioniert auf etwas seltsame Weise, da ich fand, dass es mehr Golf als naive Alternativen gibt - es findet die Läufe als
[element, count]
Paare, negiert, um Nullen als Einsen zu identifizieren, summiert, findet das Maximum und nimmt dann den Kopf (die Summe der Elemente statt der Zählungen) ).quelle
€Đ€
kann seinþ
.Ruby ,
98 89 75 6461 BytesProbieren Sie es online!
kleiner und langsamer als zuvor!
Grundsätzlich eine Portierung von @ Neils Javascript-Antwort
Ungolfed und kommentiert
Probieren Sie es online!
quelle
Schale ,
1211 BytesProbieren Sie es online! Dies funktioniert mit roher Gewalt und ist ziemlich langsam. Ergänzen Sie
u
das rechte Ende, um die Ausführung zu beschleunigen, ohne die Semantik zu ändern.Erläuterung
quelle
Perl 5 (ältere Versionen)
-p -I.
,524943 BytesOld style Zählung:
+3
für-p
:46
Bytes (weil es muss in einem Programm sein, es kann nicht ausgeführt werden , unter Verwendung von-e
)barsplit.pl
:Führen Sie mit der Zeichenfolge auf STDIN aus:
Probieren Sie es online!
Die
-I.
Option ist da, damit dies auch auf neueren Perls funktioniert, in denen standardmäßig.
nicht mehr vorhanden ist@INC
. In älteren Versionen von Perl wird diese Option nicht benötigt. Ich habe das auf einer älteren Maschine getestet, die es noch gabperl 5.20
, also basiert die Punktzahl darauf (ansonsten sollte ich auch das.
Argument dazu zählen-I
).Schnelle Version (
49
Bytes):quelle
Wolfram Language (Mathematica) , 77 Byte
Probieren Sie es online!
quelle