Nennen wir eine nicht leere Liste von Zeichenfolgen eine Mesa, wenn die folgenden Bedingungen erfüllt sind:
- Jede aufgelistete Zeichenfolge ist nicht leer und verwendet nur Zeichen, die in der ersten Zeichenfolge vorkommen.
- Jede aufeinanderfolgende Zeichenfolge ist genau ein Zeichen länger als die vorhergehende Zeichenfolge.
- Keine Zeichenfolge in der Liste ist eine Teilsequenz einer anderen Zeichenfolge in der Liste.
Der Begriff "Mesa" stammt aus der folgenden Visualisierung (wobei die x
s verschiedene Zeichen sein sollen):
xx..x
xx..xx
xx..xxx
.
.
.
xx..xxx..x
NB: Es ist eine mathematische Tatsache, dass nur endlich viele Mesas mit einer bestimmten Zeichenfolge beginnen. Beachten Sie die Unterscheidung zwischen Teilfolge vs. String ; zB ist 'anna' eine Teilsequenz (aber keine Teilzeichenfolge) von 'banana'.
Herausforderung:
- Schreiben Sie das kürzeste Programm, das eine beliebige nicht leere alphanumerische Eingabezeichenfolge verwendet und die Anzahl der Mesas ausgibt, die mit dieser Zeichenfolge beginnen.
Eingabe (stdin):
- Jede nicht leere alphanumerische Zeichenfolge.
Ausgabe (stdout):
- Die Anzahl der Mesas, die mit der Eingabezeichenfolge beginnen.
Wertung:
- Der Gewinner ist das Programm mit der geringsten Anzahl von Bytes.
Beispiel mesas
Nur eine Mesa beginnt mit a
:
a
Nur eine Mesa beginnt mit aa
:
aa
Viele Mesas beginnen mit ab
:
ab ab ab ab (and so on)
baa aaa bbb
bbba bbaa
baaaa
aaaaaa
ab
,bbb
als Mesa nur durch am zweiten Begriff zu stoppen. Ist das gültig? Oder müssen sie immer so lange wie möglich gemacht werden? Wenn es auch sind mehrere möglichen Umlagerungen desnth
Begriffs (wiebaa
,aba
,aab
), tun sie alle zählen als getrenntes Mesas sowie (vorausgesetzt natürlich alles , was sie an den Regeln)?ab
,ab/baa
,ab/bbb
,ab/bbb/bbaa
,ab/bbb/bbaa/baaaa
,ab/bbb/bbaa/baaaa/aaaaaa
sind verschiedene Mesas.Antworten:
GolfScript (
106103 Zeichen)Irgendwo im Herzen ist natürlich ein Code aus Ist String X eine Teilfolge von String Y?
quelle
Ruby, 142 Zeichen
Dieser Algorithmus ist konstruktiv, dh er erstellt alle möglichen Mesas für die Eingabezeichenfolge und zählt sie. Es macht das Programm wirklich sehr, sehr langsam - aber hey, es ist Codegolf.
Beispielläufe:
quelle
aab
) beginnen, eine realisierbare Länge haben, aber ich bin mir nicht sicher - Ihr Programm wurde für dieses Beispiel ungefähr eine Stunde lang ausgeführt. NB: Für Eingaben mit mehr als zwei unterschiedlichen Buchstaben ist keine Ausgabe möglich. Beispielsweise haben einige der Mesas, die mit beginnen,abc
eine Länge, die größer als die 7000. Ackermann-Zahl ist .300,000
Einträge mit generiert hatte, sahaab
ich immer noch, dass die ersten 10 Begriffe alle identisch waren. Daher denke ich, dass es für etwas, das größer als zwei Zeichen ist, möglicherweise nicht machbar ist. Zumindest nicht ohne Intelligenz und heuristische Berechnungen.