Recentemente, minha reputação era 25,121
. Notei que cada agrupamento de dígitos (ou seja, os números separados por vírgulas) era um quadrado perfeito.
Seu desafio é que, dado um número inteiro não negativo N e uma função booleana binária unária f : Z * → B , produza um valor verdadeiro se cada valor de f aplicado aos agrupamentos de dígitos de N for verdadeiro e, se não, falsey.
Pode-se encontrar os agrupamentos de dígitos dividindo o número em grupos de 3, começando do lado direito. O grupo mais à esquerda pode ter 1, 2 ou 3 dígitos. Alguns exemplos:
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)
Regras adicionais
- Esta função pode mapear para qualquer booleanos (por exemplo,
true
efalse
),1
S e0
S, ou qualquer valor truthy / Falsey. Especifique quais formatos são suportados pela sua resposta. - Você pode usar um número inteiro como entrada ou uma sequência inteira (ou seja, uma sequência composta de dígitos).
- Você pode escrever um programa ou uma função.
- Ao passar os grupos digitais para a função f , você deve cortar todos os zeros iniciais desnecessários. Por exemplo, f , quando aplicado a N = 123.000, deve ser executado como f (123) ef (0).
Casos de teste
A notação de função é n -> f(n)
, por exemplo n -> n == 0
,. Todos os operadores assumem aritmética inteira. (Por exemplo, 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 a 0
) aos casos de teste porque a maioria das respostas falha nele.
[0]
.