Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die bestimmt, ob eine Zahl durch eine andere teilbar ist. Der Haken ist, dass es so schnell wie möglich eine Antwort geben sollte , auch wenn nicht alle Ziffern der Nummer angegeben wurden.
Ihr Programm sollte eine ganze Zahl D ≥ 2 und dann eine Reihe von Ziffern als Eingabe annehmen . Diese repräsentieren die Ziffern einer anderen ganzen Zahl N ≥ 1, beginnend mit der niedrigstwertigen Ziffer. Beim ersten Punkt, an dem N durch D teilbar sein muss oder nicht , sollte Ihr Programm die entsprechende Antwort ausgeben und beenden . Wenn das Ende der Eingabe erreicht ist, sollte ausgegeben werden, ob das volle N durch D teilbar ist .
Hier ist eine Liste akzeptabler Eingabeformate für N (hinterlassen Sie einen Kommentar, wenn Sie der Meinung sind, dass etwas, das nicht enthalten ist, zulässig sein sollte):
Standardeingabe : Ziffern werden in separaten Zeilen angegeben; Ende der Eingabe ist EOF oder ein spezieller Wert; exit bedeutet, dass die Funktion zurückkehrt oder das Programm beendet wird.
Analogeingang : über z. B. Tastenanschläge oder zehn Tasten, die jede Ziffer darstellen; Das Eingabeende ist ein spezieller Wert. exit bedeutet, dass die Funktion zurückkehrt oder das Programm beendet wird.
Funktion mit globalem Status : wiederholt mit aufeinanderfolgenden Ziffern aufgerufen; Das Eingabeende ist ein spezieller Wert. exit bedeutet, dass die Funktion einen Wert ungleich null zurückgibt. Beachten Sie, dass , wenn Sie globalen Zustand zu verwenden, müssen sie gelöscht werden , nachdem ein Wert zurückgegeben oder auf andere Weise zurückgesetzt , so dass die Funktion mehrmals funktioniert .
Curry-Funktion : Gibt entweder eine andere Funktion zurück, die mit der nächsten Ziffer oder einem Wert aufgerufen werden soll. Das Eingabeende ist ein spezieller Wert oder der Aufruf der Funktion ohne Argument. exit bedeutet, dass die Funktion eine Antwort und keine andere Funktion zurückgibt.
GUI-Eingabeaufforderung oder ähnliches : wird wiederholt angezeigt; Ende der Eingabe ist "Abbruch" oder Äquivalent oder ein spezieller Wert; exit bedeutet, dass keine Eingabeaufforderungen mehr angezeigt werden.
Iteratorfunktion : input ist ein statusbehaftetes Objekt oder eine Funktion, die beim Aufruf die nächste Ziffer zurückgibt, end of input ist eine Ausnahme oder ein spezieller Wert; exit bedeutet, dass der Iterator nicht mehr aufgerufen wird.
Die Eingabe für D und die Ausgabe kann über jede akzeptable Standardmethode erfolgen .
Testfälle:
2; 6 => true
5; 6 => false
20; 0 3 => false
20; 0 4 => true
100; 1 => false
100; 0 0 => true
100; 0 2 => false
4; 2 4 => false
4; 2 5 => true
4; 2 [eof] => false
4; 4 [eof] => true
625; 5 5 => false
625; 5 7 2 => false
625; 5 7 3 6 => false
625; 5 7 3 4 => true
7; 9 3 4 [eof] => false
7; 9 3 4 5 [eof] => true
140; 0 3 => false
140; 0 4 5 [eof] => false
140; 0 4 5 1 [eof] => true
14; 4 5 1 4 [eof] => false
14; 4 5 1 4 1 [eof] => true
digits
Eingabe mit einem speziellen Wert für EOF zu verwenden?[]
und[2]
Rückkehr etwas anderes alsfalse
odertrue
(einschließlich der Funktion selbst etc ...) , während[2,3]
,[2,3,1]
und[2,3,1,EOF]
Rückkehrtrue
. Es kommt mir der globalen Staatsoption sehr nahe.Antworten:
JavaScript (ES6), 70 Byte
Eingabeformat: Curry-Funktion
Probieren Sie es online!
Wie?
Kommentiert
quelle
Batch,
177169 BytesWird
d
als Befehlszeilenparameter verwendet und liest Ziffernn
in separaten Zeilen mit-
dem EOF-Marker. Ausgänge1
für teilbare,0
wenn nicht. Erläuterung:Initialisieren Sie
n
auf die leere Zeichenfolge.g
istgcd(d, 10**len(n))
Beginnen Sie mit dem Lesen einer Schleife.
Lesen Sie die nächste Ziffer.
Stoppen Sie die Verarbeitung bei EOF.
Stellen Sie die nächste Ziffer vor
n
.g
Jetzt aktualisieren , daslen(n)
hat zugenommen und kalkuliertn%g
.Wenn
r
nicht Null ist, dannd
teilt sich das definitiv nichtn
, weilg
ein Faktor vond
dies nicht tut. Wennr
Null ist, wissen wir nur, obd
dividiert wird,n
wenn diesg
gleichd
ist. Wenn dies nicht der Fall ist, setzen Sie die Schleife fort.Brechen Sie hier auf EOF aus der Ziffernleseschleife aus.
Berechnen Sie das Ergebnis und geben Sie es implizit aus.
quelle