Neulich ging unser Team in einen Fluchtraum. Eines der Rätsel bestand aus einer Platine mit sechs mechanischen Schaltern, bei denen Sie die richtige Kombination von Ein und Aus finden mussten, um eine Box zu entsperren.
-v-v-v-
-v-v-v-
Als Entwickler haben wir beschlossen, dass es effizienter ist, jede einzelne der 2 ^ 6 = 64-Kombinationen auszuprobieren, als das Rätsel tatsächlich zu lösen. Also haben wir einen armen Kerl beauftragt, eine Binärzählung durchzuführen:
-v-v-v-
-v-v-v-
-v-v-v-
-v-v-^-
-v-v-v-
-v-^-v-
-v-v-v-
-v-^-^-
und so weiter.
Die Herausforderung
Schreiben Sie ein Programm, das, wenn die Schalter wie oben formatiert sind, alle Kombinationen von Ein und Aus in beliebiger Reihenfolge generiert.
Sie können entweder ein vollständiges Programm oder eine Funktion schreiben. Daher kann Ihr Programm Eingaben entweder über stdin, eine Datei oder als einzelnes Zeichenfolgenargument aufnehmen und die Ausgabe entweder zurückgeben oder ausdrucken. Wenn zurückgegeben, kann die Ausgabe in einer Liste / Array / etc sein. eher als eine einzelne Zeichenfolge. Wenn es sich bei der Ausgabe um eine einzelne Zeichenfolge handelt, sollten die Boards durch Zeilenumbrüche getrennt werden (abschließende Zeilenumbrüche sind zulässig.)
Die Eingabezeichenfolgen entsprechen dem regulären Ausdruck r'((-v)+-)(\n(-v)+-)*'
und stellen eine Karte dar, bei der alle Schalter ausgeschaltet sind. Dies bedeutet, dass kein Null-Fall vorliegt und die Schalter linksbündig ausgerichtet sind. Jede Zeile verfügt möglicherweise nicht über die gleiche Anzahl von Schaltern.
Jede Ausgangskarte sollte genau dasselbe Format wie die Eingabe haben, mit der Ausnahme, dass die vs nach Bedarf durch ^ ersetzt werden können. Die Ausgangskarten können durch beliebig viele Zeilenumbrüche getrennt werden.
Da die Laufzeit in Bezug auf die Anzahl der Schalter natürlich 0 (2 ^ n) beträgt, wird Ihr Code in keiner Anordnung an mehr als 10 Schaltern getestet.
Das ist Code-Golf, also gewinnt der kürzeste Code in der Anzahl der Bytes.
Beispiel für Ein- und Ausgänge
Eingang:
-v-
Mögliche Ausgabe:
-v-
-^-
Eingang:
-v-
-v-
Mögliche Ausgabe:
-^-
-^-
-^-
-v-
-v-
-^-
-v-
-v-
Da es äußerst mühsam ist, Ihre Antwort auf eine größere Anzahl von Schaltern zu überprüfen, finden Sie hier ein Python-Skript als Tool zur Überprüfung der Integrität. (Ich habe ein aktuell auskommentiertes Snippet eingefügt, um die erwartete Ausgabe aus einer bestimmten Eingabedatei zu generieren, falls Sie mehr Testfälle wünschen.) Leider ist es in Bezug auf Eingabe und Ausgabe einiges weniger flexibel als die Spezifikation. Legen Sie die Eingabezeichenfolge in eine Datei mit dem Namen 'input' und die durch Zeilenumbrüche getrennte Ausgabe (sorry, keine Listenformatierung) in eine Datei mit dem Namen 'output' im selben Verzeichnis und führen Sie sie aus python3 sanitycheck.py
.