Su tarea es escribir un programa o función que determine si un número es divisible por otro. El problema es que debe dar una respuesta lo antes posible , incluso si no se han dado todos los dígitos del número.
Su programa debe tomar un número entero D ≥ 2 y luego una serie de dígitos como entrada. Estos representan los dígitos de otro número entero N ≥ 1, comenzando en el dígito menos significativo. En el primer punto que N sea debe o no debe ser divisible por D , el programa debería devolver la respuesta apropiada y salida. Si se alcanza el final de la entrada, se debe de salida si el total N es divisible por D .
Aquí hay una lista de formatos de entrada aceptables para N (deje un comentario si cree que se debe permitir algo que no está incluido):
Entrada estándar : los dígitos se dan en líneas separadas; el final de la entrada es EOF o un valor especial; salir significa que la función regresa o el programa sale.
Entrada analógica : mediante, por ejemplo, pulsaciones de teclas o diez botones que representan cada dígito; El final de la entrada es un valor especial; salir significa que la función regresa o el programa sale.
Función con estado global : llamada repetidamente con dígitos sucesivos; El final de la entrada es un valor especial; salir significa que la función devuelve un valor no nulo. Tenga en cuenta que si usa el estado global, debe borrarse después de que se devuelve un valor o restablecerse de otra manera para que la función funcione varias veces .
Función curry : devuelve otra función que se llamará con el siguiente dígito o un valor; El final de la entrada es un valor especial o se llama a la función sin argumento; salir significa que la función devuelve una respuesta en lugar de otra función.
Solicitud de GUI o similar : se muestra repetidamente; el final de la entrada es "cancelar" o equivalente, o un valor especial; salir significa que las indicaciones dejan de aparecer.
Función de iterador : la entrada es un objeto o función con estado que devuelve el siguiente dígito cuando se llama, el final de la entrada es una excepción o un valor especial; salir significa que el iterador deja de ser llamado.
La entrada para D y la salida pueden realizarse a través de cualquier método estándar aceptable .
Casos de prueba:
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
fuente

digitsentrada con un valor especial para EOF?[]y[2]de retorno que no sea nadafalseotrue(incluyendo la propia función etc ...), mientras que[2,3],[2,3,1]y[2,3,1,EOF]de retornotrue. Me parece lo más cercano a la opción de estado global.Respuestas:
JavaScript (ES6), 70 bytes
Formato de entrada: función curry
Pruébalo en línea!
¿Cómo?
Comentado
fuente
Lote,
177169 bytesToma
dcomo parámetro de línea de comando y lee dígitos denen líneas separadas con-el marcador EOF. Salidas1para divisible,0si no. Explicación:Inicializar
na la cadena vacía.gesgcd(d, 10**len(n))Comience un ciclo de lectura de dígitos.
Lee el siguiente dígito.
Detener el procesamiento en EOF.
Anteponer el siguiente dígito a
n.Actualice
gahora quelen(n)ha aumentado y calculen%g.Si
rno es cero, entoncesddefinitivamente no se dividen, porqueg, un factor ded, no lo hace. Sires cero, entonces solo sabemos siddividensiges iguald, así que si no lo es, continúa el ciclo.Salga del ciclo de lectura de dígitos aquí en EOF.
Calcular y generar implícitamente el resultado.
fuente