Recientemente, mi reputación fue 25,121
. Noté que cada agrupación de dígitos (es decir, los números separados por comas) era un cuadrado perfecto.
Su desafío es, dado un número entero no negativo N y una función de caja negra booleana unaria f : Z * → B , producir un valor de verdad si cada valor de f aplicado a las agrupaciones de dígitos de N es verdadero, y falsey de lo contrario.
Se pueden encontrar las agrupaciones de dígitos dividiendo el número en grupos de 3, comenzando por el lado derecho. El grupo más a la izquierda puede tener 1, 2 o 3 dígitos. Algunos ejemplos:
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)
Reglas adicionales
- Esta función se puede asignar a booleanos (por ejemplo,
true
yfalse
),1
sy0
s, o cualquier valor verdadero / falso. Especifique qué formato (s) son compatibles con su respuesta. - Puede tomar un entero como entrada o una cadena de enteros (es decir, una cadena compuesta de dígitos).
- Puedes escribir un programa o una función.
- Al pasar los grupos digitales a la función f , debe recortar todos los ceros iniciales innecesarios. Por ejemplo, f , cuando se aplica a N = 123,000 debe ejecutarse como f (123) yf (0).
Casos de prueba
Notación de función es n -> f(n)
, por ejemplo, n -> n == 0
. Todos los operadores suponen aritmética de enteros. (Ej. 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
aplicado 0
) a los casos de prueba porque la mayoría de las respuestas fallan.
[0]
.