Mon ami et moi travaillions sur un laboratoire dans notre classe AP Computer Science et avons décidé de coder le golf comme l’un des problèmes étant donné que nous avions encore la moitié de la classe libre après avoir terminé. Voici la question:
Soit un nombre n, n est-il divisible par chacun de ses chiffres?
Par exemple, 128 réussira ce test - il est divisible par 1,2 et 8. Tout nombre avec un zéro le disqualifie automatiquement. Bien que vous puissiez utiliser d'autres langages et proposer des solutions avec eux si vous le souhaitez, nous sommes particulièrement intéressés par la capacité des personnes compactes à créer le programme en Java, car c'est le langage que nous utilisons dans la classe. Jusqu'ici, nous avons tous les deux 51. Voici mon code actuel:
public boolean dividesSelf(int n){for(int p=n;n%10>0;)n/=p%(n%10)>0?.1:10;return n<1;}
// 51 characters
// Breakdown:
// for(int p=n; Saves one semicolon to put declaration into for loop
// n%10>0;) Basic check-for-zero
// n/= Pretty simple, discarding one number off of n at a time
// p%(n%10)>0? If p (the given value) is not divisible by n%10 (the current digit)...
// .1:10; Divide by .1 (multiply by 10) so it fails the check next iteration. If it is divisible, divide by 10 to truncate the last digit
// return n<1 If the number was fully divisible, every digit would be truncated, and n would be 0. Else, there would still be non-zero digits.
Exigences
La signature de la méthode peut être celle que vous souhaitiez. Il suffit de compter le corps de la fonction. Assurez-vous cependant que la méthode retourne une valeur booléenne et ne transmet qu'un paramètre numérique (pas une chaîne).
Le code doit pouvoir passer tous ces cas (pour rester conforme aux indications de la question d'origine, seules les valeurs booléennes vraies et fausses sont prises en compte si la langue prend en charge les valeurs booléennes. Si et seulement si votre langue n'a pas de variables booléennes peut représenter faux avec 0 et vrai avec n'importe quel entier non nul (de préférence 1 ou -1):
128 -> true
12 -> true
120 -> false
122 -> true
13 -> false
32 -> false
22 -> true
42 -> false
212 -> true
213 -> false
162 -> true
204 -> false
De plus, nous ne comptons pas les espaces, alors n'hésitez pas à faire de même, à moins que les espaces ne soient essentiels au fonctionnement du programme (les nouvelles lignes en Java ne comptent pas, mais un seul espace sépare int
et x=1
compte.) Bonne chance !
0
chiffres qui soit un multiple de chacun d'eux), j'imagine que la plupart des réponses s'allongeraient simplement d'une manière inintéressante pour inclure un chèque. J'aime donc mieux le problème posé par le titre (divisible par ses chiffres, plutôt que d'être un multiple de ses chiffres, ce qui exclut 0).
true
et / ou les valeurs vérité / falsificationfalse
sont- elles également acceptables? 3. Lajava
balise ne s'applique pas vraiment ici, car le défi lui-même n'est pas lié à Java.