Eine übliche Optimierung, um Platz in Binärdateien zu sparen, besteht darin, Zeichenfolgenliterale zusammenzuführen, wobei ein Literal das Suffix eines anderen ist. Zum Beispiel eine Binärdatei mit den Zeichenfolgenliteralen
a: foobar
b: bar
c: barbaz
d: foobarbaz
e: baz
enthält möglicherweise den folgenden String-Literal-Pool ( #
der den \0
-terminator darstellt):
foobar#foobarbaz#
mit den Symbolen a
, b
, c
, und d
mit den folgenden Werten in Bezug auf den Anfang des Zeichenfolge Pools:
a: 0
b: 3
c: 10
d: 7
e: 13
In dieser Aufgabe müssen Sie die minimale Größe eines Zeichenfolgenpools für einen bestimmten Satz von Eingabezeichenfolgen berechnen.
Eingang
Die Eingabe besteht aus einer Reihe von bis zu 999 Zeichenfolgen mit jeweils bis zu 80 ASCII-Zeichen (ohne Zeilenumbruch) im Bereich von 32 bis einschließlich 127 und einem einzelnen Zeilenumbruchzeichen.
Ausgabe
Suchen Sie die kürzeste Zeichenfolge, sodass jede der Eingabezeichenfolgen (einschließlich der abschließenden Zeilenumbrüche) Teilzeichenfolgen dieser Zeichenfolge sind. Die Ausgabe muss die Länge dieser kürzesten Zeichenfolge sein. Geben Sie den String nicht aus, sondern nur seine Länge.
Wertung
Diese Herausforderung ist Code Golf, es gelten Standardlücken. Die Lösung mit der geringsten Länge in Oktetten gewinnt.
Beispiele
Eingang:
foobar bar barbaz foobarbaz baz
kürzeste Zeichenfolge,
#
die Zeilenumbruch darstellt:foobar#foobarbaz#
Länge: 17
Eingang:
foobar foobaz foobarbaz barbaz
kürzeste Zeichenfolge,
#
die Zeilenumbruch darstellt:foobar#foobaz#foobarbaz#
Länge: 24
Antworten:
Pyth,
2018 BytesDemonstration.
{
kann entfernt werden, wenn Duplikate nicht zulässig sind.Erläuterung:
quelle
CJam, 22 Bytes
Probieren Sie es online aus.
Wie es funktioniert
quelle
Python 2, 132
Nur um ein Rennen zu starten:
Es klappt:
quelle
Haskell,
10185 BytesEine Funktion ohne Namen. Anwendungsbeispiel:
So funktioniert es: Eingabezeichenfolge in Zeilenumbrüchen teilen. Entfernen Sie Duplikate aus der Wortliste
l
. Behalten Sie ein Wortx
aus der verbleibenden Liste bei, wenn es nicht in der Liste aller Schwänze der Wörter von enthalten istl
. Verbinden Sie diesex
mit Zeilenumbrüchen dazwischen (und am Ende!) Zu einer einzelnen Zeichenfolge und zählen Sie deren Länge.quelle