Sua tarefa é escrever um programa ou função que determine se um número é divisível por outro. O problema é que ele deve dar uma resposta o mais rápido possível , mesmo que nem todos os dígitos do número tenham sido fornecidos.
Seu programa deve ter um número inteiro D ≥ 2 e depois uma série de dígitos como entrada. Eles representam os dígitos de outro número inteiro N ≥ 1, iniciando no dígito menos significativo. No primeiro ponto que N quer deve ou não deve ser divisble por D , seu programa deve saída a resposta adequada e sair. Se a extremidade da entrada é alcançado, deve debitar se o completo N é divisível por D .
Aqui está uma lista de formatos de entrada aceitáveis para N (deixe um comentário se você acha que algo que não está incluído deve ser permitido):
Entrada padrão : os dígitos são dados em linhas separadas; final da entrada é EOF ou um valor especial; exit significa que a função retorna ou o programa sai.
Entrada analógica : através, por exemplo, de teclas ou dez botões representando cada dígito; fim da entrada é um valor especial; exit significa que a função retorna ou o programa sai.
Função com estado global : chamada repetidamente com dígitos sucessivos; fim da entrada é um valor especial; exit significa que a função retorna um valor não nulo. Observe que, se você usar o estado global, ele deverá ser limpo depois que um valor for retornado ou redefinido para que a função funcione várias vezes .
Função ao curry : retorna outra função a ser chamada com o próximo dígito ou um valor; fim da entrada é um valor especial ou chama a função sem argumento; exit significa que a função retorna uma resposta em vez de outra função.
Prompt da GUI ou similar : exibido repetidamente; final da entrada é "cancel" ou equivalente, ou um valor especial; exit significa que os avisos param de aparecer.
Função Iterator : input é um objeto ou função com estado que retorna o próximo dígito quando chamado; o final da entrada é uma exceção ou valor especial; exit significa que o iterador para de ser chamado.
A entrada para D e a saída podem ser feitas por qualquer método padrão aceitável .
Casos de teste:
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
digits
entrada com um valor especial para EOF?
[]
e [2]
retorno outra coisa senão false
ou true
(incluindo a própria função etc ...) enquanto [2,3]
, [2,3,1]
e [2,3,1,EOF]
retorno true
. Parece-me tão próximo da opção de estado global.