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
digits
entrada con un valor especial para EOF?[]
y[2]
de retorno que no sea nadafalse
otrue
(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
d
como parámetro de línea de comando y lee dígitos den
en líneas separadas con-
el marcador EOF. Salidas1
para divisible,0
si no. Explicación:Inicializar
n
a la cadena vacía.g
esgcd(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
g
ahora quelen(n)
ha aumentado y calculen%g
.Si
r
no es cero, entoncesd
definitivamente no se dividen
, porqueg
, un factor ded
, no lo hace. Sir
es cero, entonces solo sabemos sid
dividen
sig
es 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