Écrivez un programme qui visualise une longue division avec l'art ASCII. L'entrée se compose de deux entiers, un numérateur et un dénominateur, en utilisant le format d'entrée de votre choix.
Exemples:
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
Règles:
- L'utilisation de l'opérateur de division du langage de programmation est autorisée.
- L'utilisation de la prise en charge des grands nombres entiers est également autorisée.
- Pour la cohérence:
- Si le quotient est zéro, imprimez un seul zéro à la fin du plongeoir.
- Si le reste est nul, ne l'imprimez pas.
- N'imprimez pas de zéros non significatifs sur aucun nombre.
- Les sauts de ligne à la fin et les espaces de fin à droite sont autorisés.
- La solution avec le moins de personnages gagne.
Limites:
- 0 <= numérateur <= 10 72 - 1
- 1 <= dénominateur <= 9999999
Cela implique que la sortie ne dépassera jamais 80 colonnes.
Suite de tests et exemple d'implémentation:
Vous pouvez utiliser long-division.c ( gist ) pour tester votre programme. Il s'agit en fait d'un script bash avec un programme C à l'intérieur. Ajustez-le pour appeler votre programme dans la suite de tests. Regardez le code C en bas pour voir l'implémentation de référence. Veuillez me faire savoir s'il y a des problèmes avec l'exemple de programme ou la suite de tests.
$ ./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: Sur demande, je mets l' entrée de la suite de tests et la sortie attendue dans des fichiers texte ( gist ). Exemple d'utilisation (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
Les commandes sed étranges filtrent les nouvelles lignes et les espaces en fin de sortie du programme.
la source
Réponses:
Python 3,
284257 caractèresdiv.py
Utilisation:
python3 div.py
entrée: à partir du clavier
test.py
correspond à la sortie attendue
Versions:
1. 284
2. 257 :
s,z,f=0,0,0
→s=z=f=0
;z and f
→z*f
; meilleure boucle; supprimé quelques nouvelles lignes.la source
Haskell, 320 caractères
Réussit tous les tests. Bien que ce soit assez golfé - je pense qu'il reste encore beaucoup à faire ici ...
read
appels, ce qui réduit le besoin d'appelershow
, suffisamment d'abréviationshow
car celas
ne vaut pas la peine.la source
-XUnicodeSyntax
).JavaScript (400
394418)REMARQUE: Aussi tentant que cela puisse paraître de raser quelques caractères en les remplaçant
c=(c==0)?
parc=!c?
, il n'est pas utilisable car il provoque des bogues liés aux virgules flottantes.http://jsfiddle.net/nLzYW/9/
Exemple d'exécution:
Edit 1 : corrections de bugs mineurs, nombreuses optimisations de code.
Edit 2 : Correction d'un bug avec 1/7 générant une sortie supplémentaire.
la source
d(1,7)
(et tests similaires) répéter le dénominateur plutôt que de ne rien imprimer. C'est faux car ce nombre doit être le chiffre du quotient multiplié par le dénominateur, qui est zéro.Javascript: (372)
Appelez en utilisant i (diviseur, nombre). CodeGolfed JS: http://jsfiddle.net/puckipedia/EP464/ Ungolfed (néerlandais) JS: http://jsfiddle.net/puckipedia/M82VM/
Renvoie la division longue (au format néerlandais tel que je l'ai appris):
Cas de test:
la source