Escreva um programa que visualize divisão longa com arte ASCII. A entrada consiste em dois números inteiros, um numerador e um denominador, usando o formato de entrada de sua escolha.
Exemplos:
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
Regras:
- Uso de operador de divisão da linguagem de programação é permitido.
- O uso de grande número inteiro de suporte também é permitido.
- Para consistência:
- Se o quociente for zero, imprima um único zero no final da prancha de mergulho.
- Se o restante for zero, não imprima.
- Não imprima zeros à esquerda em nenhum número.
- Excesso de novas linhas no final e espaços à direita são permitidos.
- Solução com o menor número de caracteres ganha.
Limites:
- 0 <= numerador <= 10 72 - 1
- 1 <= denominador <= 9999999
Isso implica que a saída nunca será maior que 80 colunas.
Conjunto de teste e implementação de amostra:
Você pode usar long-division.c ( gist ) para testar seu programa. Na verdade, é um script bash com um programa C dentro. Ajuste-o para chamar seu programa no conjunto de testes. Veja o código C na parte inferior para ver a implementação de referência. Informe-me se houver algum problema com o programa de amostra ou o conjunto de testes.
$ ./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!
Edit: Por solicitação, eu coloquei a entrada do conjunto de testes e a saída esperada em arquivos de texto ( essência ). Uso de amostra (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
Os comandos sed estranhos filtram novas linhas e espaços à direita da saída do programa.
fonte
Respostas:
Python 3,
284257caracteresdiv.py
Uso:
python3 div.py
Entrada: do teclado
test.py
saída corresponde ao esperado
Versões:
1. 284
2. 257 :
s,z,f=0,0,0
→s=z=f=0
;z and f
→z*f
; melhor loop; removeu algumas novas linhas.fonte
Haskell, 320 caracteres
Passa em todos os testes. Enquanto isso é bonito - acho que ainda há mais a ser feito aqui ...
read
chamadas, o que reduz a necessidade de chamadasshow
, o suficiente para abreviarshow
comos
não vale a pena.fonte
-XUnicodeSyntax
).JavaScript (400
394418)OBSERVAÇÃO: Por mais tentador que pareça eliminar alguns caracteres substituindo
c=(c==0)?
porc=!c?
, não é utilizável porque causa bugs relacionados a pontos flutuantes.http://jsfiddle.net/nLzYW/9/
Execução de amostra:
Edit 1 : Pequenas correções de bugs, inúmeras otimizações de código.
Editar 2 : Corrija o erro com 1/7 gerando saída extra.
fonte
d(1,7)
(e testes similares) repetem o denominador em vez de imprimir nada. Isso está errado porque esse número deve ser o dígito quociente vezes o denominador, que é zero.Javascript: (372)
Invoque usando i (divisor, número). JS codegolfed: http://jsfiddle.net/puckipedia/EP464/ Ungolfed (holandês) JS: http://jsfiddle.net/puckipedia/M82VM/
Retorna a divisão longa (no formato holandês, como eu aprendi):
Caso de teste:
fonte