In einem Chatroom mit ein paar Leuten kam ein Thema zwischen mir und ihnen auf, wie viele mögliche Zeichenfolgen ein Regex haben könnte.
Ihre Aufgabe ist es, ein Programm zu erstellen, das diese Frage beantworten kann.
Ihr Programm akzeptiert als Eingabe alle regulären Ausdrücke, die in diesem Dokument als "erweiterte reguläre Ausdrücke" definiert sind, z.
^[A-Za-z0-9]{8}$
und infinity
gebe die Gesamtzahl der möglichen Strings aus, die diesem Ausdruck entsprechen, und gebe aus , wenn es unendlich viele gibt:
218340105584896
Ihr Programm wird möglicherweise auch ausgegeben, too many
wenn mehr als 2 63 -1 mögliche Zeichenfolgen für den regulären Ausdruck vorhanden sind. Es darf jedoch nur ausgegeben werden, infinity
wenn tatsächlich unendlich viele Zeichenfolgen vorhanden sind.
Das kürzeste Programm, um die oben genannten Aufgaben auszuführen, gewinnt.
^[A-Za-z0-9]{8}$
? Sonst wäre die Antwortinfinity
.Antworten:
Python 3370
Ich wollte, dass dies so gut wie möglich funktioniert, und brachte sogar Abwechslung zum Laufen (mit korrekter Überprüfung der Doppelzählung!). Soweit ich weiß, funktioniert das für alles außer für Lookarounds (weil das verrückt wäre).
Wenn Sie eine eigene Lösung schreiben, können Sie meine Methoden nach Belieben anwenden / verbessern.
Code:
Ungolfed:
Hier sind einige relevante Testfälle, die ich bestätigt habe:
* Dies ist bei Golfspielern und Nicht-Golfspielern tatsächlich anders, da es einen Unterschied von einem Zeichen bei den als gültig definierten Ascii gibt. Ich glaube, der Golfspieler ist der Richtigere.
Um zu bestätigen, dass weitere Tests durchgeführt werden konnten, teilen Sie mir bitte alle Fehler mit (ich wäre ehrlich gesagt nicht überrascht, wenn es nicht wenige gäbe).
quelle
<!-- language: lang-code -->
(für ein Codeteil) oder<!-- language-all: lang-code -->
(für alle Codes in einem Beitrag) hinzufügen , wobeilang-code
der Sprachcode Ihrer Sprache ist. Stellen Sie sicher, dass das Format identisch ist (mit Leerzeichen usw.). Die Liste der Sprachcodes finden Sie hier . (Sie müssen ein wenig nach unten scrollen.) Ich bin mir nicht sicher, ob die Verwendung von Tags funktioniert. Halten Sie sich also einfach an die Sprachcodes. :)