Récemment, ma réputation était 25,121
. J'ai remarqué que chaque groupe de chiffres (c'est-à-dire les nombres séparés par des virgules) était un carré parfait.
Votre défi est, étant donné un entier non négatif N et une fonction de boîte noire unaire booléenne f : Z * → B , de produire une valeur véridique si chaque valeur de f appliquée aux groupes de chiffres de N est véridique, et Falsey sinon.
On peut trouver les groupes de chiffres en divisant le nombre en groupes de 3, en commençant par le côté droit. Le groupe le plus à gauche peut avoir 1, 2 ou 3 chiffres. Quelques exemples:
12398123 -> 12,398,123 (3 digit groupings)
10 -> 10 (1 digit grouping)
23045 -> 23,045 (2 digit groupings)
100000001 -> 100,000,001 (3 digit groupings)
1337 -> 1,337 (2 digit groupings)
0 -> 0 (1 digit grouping)
Règles supplémentaires
- Cette fonction peut correspondre à des booléens (par exemple,
true
etfalse
),1
s et0
s, ou à toute valeur truey / falsey. Veuillez spécifier le ou les formats pris en charge par votre réponse. - Vous pouvez prendre un entier en entrée ou une chaîne entière (c'est-à-dire une chaîne composée de chiffres).
- Vous pouvez écrire un programme ou une fonction.
- Lorsque vous passez les groupes numériques à la fonction f , vous devez supprimer tous les zéros de tête inutiles. Par exemple, f , lorsqu'il est appliqué à N = 123 000, doit être exécuté comme f (123) et f (0).
Cas de test
La notation fonctionnelle est n -> f(n)
, par exemple, n -> n == 0
. Tous les opérateurs supposent une arithmétique entière. (Par exemple, sqrt(3) == 1
)
function f
integer N
boolean result
n -> n == n
1230192
true
n -> n != n
42
false
n -> n > 400
420000
false
n -> n > 0
0
false
n -> n -> 0
1
true
n -> sqrt(n) ** 2 == n
25121
true
n -> sqrt(n) ** 2 == n
4101
false
n -> mod(n, 2) == 0
2902414
true
n -> n % 10 > max(digits(n / 10))
10239120
false
n -> n % 10 > max(digits(n / 10))
123456789
true
n -> n > 0
appliqué à 0
) aux cas de test car la plupart des réponses échouent.
[0]
.