Votre tâche consiste à écrire un programme ou une fonction qui détermine si un nombre est divisible par un autre. Le hic, c'est qu'il devrait donner une réponse dès que possible , même si tous les chiffres du numéro n'ont pas été donnés.
Votre programme doit prendre un entier D ≥ 2 puis une série de chiffres en entrée. Ceux-ci représentent les chiffres d'un autre entier N ≥ 1, en commençant par le chiffre le moins significatif. Au premier point que N soit doit ou ne doit pas être divisble par D , votre programme doit générer la réponse appropriée et la sortie. Si la fin de l'entrée est atteinte, il se doit de sortie si la totalité N est divisible par D .
Voici une liste des formats d'entrée acceptables pour N (laissez un commentaire si vous pensez que quelque chose qui n'est pas inclus devrait être autorisé):
Entrée standard : les chiffres sont indiqués sur des lignes distinctes; la fin de l'entrée est EOF ou une valeur spéciale; exit signifie que la fonction revient ou que le programme se ferme.
Entrée analogique : par exemple, par touches ou dix boutons représentant chaque chiffre; la fin de l'entrée est une valeur spéciale; exit signifie que la fonction revient ou que le programme se ferme.
Fonction avec état global : appelée à plusieurs reprises avec des chiffres successifs; la fin de l'entrée est une valeur spéciale; exit signifie que la fonction renvoie une valeur non nulle. Notez que si vous utilisez l'état global, il doit être effacé après qu'une valeur est retournée ou autrement réinitialisé de sorte que la fonction fonctionne plusieurs fois .
Fonction curry : renvoie soit une autre fonction à appeler avec le chiffre suivant, soit une valeur; la fin de l'entrée est une valeur spéciale ou l'appel de la fonction sans argument; exit signifie que la fonction renvoie une réponse plutôt qu'une autre fonction.
Invite GUI ou similaire : affiché à plusieurs reprises; la fin de l'entrée est "annuler" ou équivalent, ou une valeur spéciale; exit signifie que les invites cessent d'apparaître.
Fonction d'itérateur : l'entrée est un objet ou une fonction avec état qui renvoie le chiffre suivant lorsqu'il est appelé, la fin de l'entrée est une exception ou une valeur spéciale; exit signifie que l'itérateur cesse d'être appelé.
L'entrée pour D et la sortie peuvent se faire par n'importe quelle méthode standard acceptable .
Cas de test:
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
la source
digits
entrée avec une valeur spéciale pour EOF?[]
et[2]
quoi que ce soit de retour autre quefalse
outrue
(y compris la fonction elle - même , etc ...) tout[2,3]
,[2,3,1]
et[2,3,1,EOF]
retourtrue
. Cela me semble aussi proche de l'option de l'État mondial.Réponses:
JavaScript (ES6), 70 octets
Format d'entrée: fonction Curry
Essayez-le en ligne!
Comment?
Commenté
la source
Lot,
177169 octetsPrend
d
comme paramètre de ligne de commande et lit les chiffres den
sur des lignes séparées avec-
comme marqueur EOF. Sorties1
pour divisible,0
sinon. Explication:Initialisez
n
à la chaîne vide.g
estgcd(d, 10**len(n))
Commencez une lecture en boucle des chiffres.
Lisez le chiffre suivant.
Arrêtez le traitement à l'EOF.
Ajoutez le chiffre suivant à
n
.Mise à jour
g
maintenant ce quilen(n)
a augmenté et calculern%g
.Si
r
est différent de zéro, alors led
ne se divise certainement pasn
, carg
, un facteur ded
, ne le fait pas. Sir
est nul alors nous savons seulement sid
divisen
sig
égald
, donc si ce n'est pas le cas, continuez la boucle.Sortez de la boucle de lecture des chiffres ici sur EOF.
Calculez et imprimez implicitement le résultat.
la source