Escriba un programa que visualice una división larga con el arte ASCII. La entrada consta de dos enteros, un numerador y un denominador, utilizando el formato de entrada que elija.
Ejemplos:
1234 ÷ 56:
22
----
56|1234
112
---
114
112
---
2
1002012 ÷ 12:
83501
-------
12|1002012
96
---
42
36
--
60
60
--
12
12
--
0 ÷ 35
0
-
35|0
Reglas:
- El uso del operador de división del lenguaje de programación es permitido.
- El uso de soporte de enteros grandes también está permitido.
- Por consistencia:
- Si el cociente es cero, imprima un solo cero al final del trampolín.
- Si el resto es cero, no lo imprima.
- No imprima ceros a la izquierda en ningún número.
- Se permiten líneas nuevas en exceso al final y espacios finales a la derecha.
- La solución con la menor cantidad de personajes gana.
Límites:
- 0 <= numerador <= 10 72 - 1
- 1 <= denominador <= 9999999
Esto implica que el resultado nunca será más ancho que 80 columnas.
Conjunto de pruebas e implementación de muestra:
Puede usar long-division.c ( gist ) para probar su programa. En realidad es un script bash con un programa en C dentro. Ajústelo para invocar su programa en el conjunto de pruebas. Mire el código C en la parte inferior para ver la implementación de referencia. Avíseme si hay algún problema con el programa de muestra o el conjunto de pruebas.
$ ./long-division.c 10 7
1
--
7|10
7
--
3
$ ./long-division.c
PASS 1234 ÷ 56
PASS 1002012 ÷ 12
PASS 1 ÷ 1
--- snip ---
Score: 35 / 35
All tests passed!
Editar: a pedido, pongo la entrada del conjunto de pruebas y la salida esperada en archivos de texto ( gist ). Uso de muestra (bash):
cat input | while read nd; do
./program $nd |
sed 's/\s*$//' | sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba'
done > output
diff -u expected output
Los comandos sed extraños filtran las nuevas líneas y espacios finales de la salida del programa.