Напишите программу, которая визуализирует длинное деление с помощью ASCII art. Ввод состоит из двух целых чисел, числителя и знаменателя, используя формат ввода по вашему выбору.
Примеры:
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
Правила:
- Использование оператора деления языка программирования в это разрешено.
- Использование поддержки больших целых также допускается.
- Для согласованности:
- Если частное равно нулю, выведите один ноль в конце трамплина.
- Если остаток равен нулю, не печатайте его.
- Не печатайте начальные нули на любых числах.
- Допускаются лишние переводы строки в конце и завершающие пробелы справа.
- Решение с наименьшим количеством символов выигрывает.
Ограничения:
- 0 <= числитель <= 10 72 - 1
- 1 <= знаменатель <= 9999999
Это означает, что выходные данные никогда не будут шире, чем 80 столбцов.
Тестовый набор и пример реализации:
Вы можете использовать long- Division.c ( gist ) для проверки вашей программы. На самом деле это bash-скрипт с программой на С внутри. Настройте его, чтобы вызвать вашу программу в наборе тестов. Посмотрите на код C внизу, чтобы увидеть справочную реализацию. Пожалуйста, дайте мне знать, если есть какие-либо проблемы с примером программы или набора тестов.
$ ./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!
Редактировать: По запросу я помещаю ввод тестового набора и ожидаемый вывод в текстовые файлы ( gist ). Пример использования (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
Странные команды sed отфильтровывают завершающие символы новой строки и пробелы из вывода программы.
источник
Ответы:
Python 3,
284257 символовdiv.py
Использование:
python3 div.py
ввод: с клавиатуры
test.py
выходные матчи ожидается
Версии:
1. 284
2. 257 :
s,z,f=0,0,0
→s=z=f=0
;z and f
→z*f
; лучше зацикливание; убрал несколько новых строк.источник
Haskell, 320 символов
Проходит все тесты. Пока этот красивый гольф - я думаю, что здесь еще многое предстоит сделать ...
read
вызовы, что уменьшает необходимость вызоваshow
, достаточно, чтобы сокращатьshow
какs
не стоит.источник
-XUnicodeSyntax
).JavaScript (400
394418)Примечание: Как заманчиво , как это выглядит сбрить несколько символов, заменив
c=(c==0)?
сc=!c?
, оно непригодно для использования, поскольку вызывает ошибки, связанные с плавающей запятой.http://jsfiddle.net/nLzYW/9/
Образец исполнения:
Редактирование 1 : мелкие исправления ошибок, многочисленные оптимизации кода.
Редактировать 2 : исправить ошибку с 1/7, генерирующую дополнительный вывод.
источник
d(1,7)
(и подобные тесты) повторяют знаменатель, а не печатают ничего. Это неправильно, потому что это число должно быть частным числом, умноженным на знаменатель, который равен нулю.Javascript: (372)
Вызовите с помощью i (делитель, число). Codegolfed JS: http://jsfiddle.net/puckipedia/EP464/ Ungolfed (голландский) JS: http://jsfiddle.net/puckipedia/M82VM/
Возвращает длинное деление (в голландском формате, как я его узнал):
Прецедент:
источник