Es kann gezeigt werden, dass einige positive Ganzzahlen eine Eigenschaft namens Chain divisibility haben. Damit eine Zahl durch n durch eine Kette teilbar ist , muss sie drei Anforderungen erfüllen:
Jede Ziffer teilt die Zahl durch die n darauf folgenden Ziffern.
Beispielsweise ist die Zahl 7143 durch 2 teilbar, weil 7 14 und 1 43 teilt. Sie ist nicht durch 3 teilbar, weil 7 143 nicht teilt.
Jede für die Teilbarkeit berücksichtigte Teilfolge darf keine führenden Nullen haben.
Beispielsweise ist die Zahl 14208 nicht durch 2 teilbar, da 08 eine führende Null hat. Es ist jedoch durch 3 teilbar, da 208 keine führende Null hat.
Alle Ziffern in der Nummer müssen eindeutig sein.
Zum Beispiel ist die Zahl 14280 durch 2, 3 und 4 teilbar. Wenn meine Erklärung der Teilbarkeit der Kette unklar ist, stellen Sie bitte Fragen in den Kommentaren.
Eingang
Die Eingabe für das Programm besteht aus einer einzelnen Ganzzahl n
, gefolgt von einem Leerzeichen und einer Zahl, bei der bestimmte Ziffern durch Unterstriche ersetzt wurden. Folgendes ist beispielsweise eine mögliche Eingabe:
3 6__2__4508
n ist größer als 1. Die Zahl wird niemals vollständig unterstrichen. Es kann nicht garantiert werden, dass die erste Ziffer kein Unterstrich ist. Die erste Ziffer wird niemals 0 sein. N wird niemals größer oder gleich der Anzahl der Ziffern in der Zahl sein.
Ausgabe
Geben Sie die Zahl aus, wobei die Ziffern durch Ganzzahlen ersetzt werden, sodass die resultierende Zahl durch n teilbar ist . Wenn mehr als eine Möglichkeit zur Vervollständigung der durch Ketten teilbaren Zahl vorhanden ist, kann jede als Ausgabe verwendet werden. Wenn es keine Zahlen gibt, die es vervollständigen können, wird ausgegeben no answer
. Die Ausgabe der Beispieleingabe könnte beispielsweise sein:
6132794508
Das ist Codegolf, also gewinnt der kürzeste Code.
n
größer oder gleich der Anzahl der Ziffern in dieser Nummer ist, die Anzahl der Ketten teilbar ist?Antworten:
Bash + Coreutils, 197 Bytes
Ausgabe:
Erläuterung
${2//_/{0..9\}}
ersetzt alle Unterstriche durch{0..9}
.eval
bearbeitet, um alle diese Klammerausdrücke zu erweitern.grep
Unkraut beseitigt alle Möglichkeiten, bei denen sich Ziffern wiederholen.quelle
Python -
239267Langsam, aber kurz. Vergleichen Sie einfach jede mögliche N-stellige Permutation mit dem angegebenen Muster und überprüfen Sie alle Anforderungen. Ich habe es nur mit 7 oder 8 Ziffern getestet. Sollte auch für 9 oder 10 funktionieren, wird aber eine Weile dauern.
Bearbeiten: Ich habe die fehlende Standardausgabe "keine Antwort" hinzugefügt.
quelle
MathematicaRuby,349224229 BytesDies ist eine sehr naive Implementierung. Ich zähle die Anzahl der Unterstriche und erstelle dann einfach eine Liste aller Ziffernpermutationen dieser Länge, um jede mögliche Kombination zu erzwingen. Dies wird für eine größere Anzahl von Unterstrichen eine schreckliche Leistung erbringen, aber dies ist Codegolf und nicht der schnellste Code. :)
Edit: Portiert dies aus Mathematica. Die Originalversion finden Sie im Bearbeitungsverlauf.
Bearbeiten: Führende Unterstriche korrigiert.
quelle
Tuples
legt diese Einschränkung nicht auf.Permutations
wird, sofern der Eingabesatz keine wiederholten Ziffern enthält. Und Sie können nur die Ziffern permutieren, die noch nicht verwendet wurden. (Auch dies kann Ihren Code verlängern.)Tuples
weil es kürzer ist.Java, 421
Weniger Golf mit Erklärung:
quelle