Реализуйте алгоритм деления на вашем любимом языке, который обрабатывает целочисленное деление. Он должен обрабатывать только положительные числа - но бонусные баллы, если он обрабатывает также отрицательное и смешанное деление. Результаты округляются для получения дробных результатов.
Программа не может содержать /
, \
, div
или аналогичные оператор. Это должна быть процедура, которая не использует родные возможности разделения языка.
Вам нужно только обрабатывать до 32-битного деления. Использование повторного вычитания не допускается.
вход
Возьмите два ввода в stdin, разделенных новыми строками или пробелами (на ваш выбор)
740
2
Выход
В этом случае вывод будет 370
.
Решение, которое является самым коротким, выигрывает.
code-golf
arithmetic
division
Томас О
источник
источник
740,2
также разрешено для входа? то есть запятая?Ответы:
Python - 73 символа
Принимает ввод через запятую, например
740,2
источник
JavaScript, 61
Это делает строку длиной делимого
,,,,,,
(6) и разделяется на делитель,,,
(3), в результате чего получается массив длиной 3:, из['', '', '']
которого я затем вычитаю единицу длины. Определенно не самый быстрый, но, тем не менее, интересный!источник
A=Array,P=prompt,P((''+A(+P())).split(','+A(+P())).length)
JavaScript - 36 символов
источник
alert
наp
вас принесет вам несколько дополнительных символов. :)Mathematica: 34 символа
Символически решает уравнение (xa == b)
источник
Solve[x#==#2]&@@Input[]
Питон - 72 символа
Принимает ввод через запятую, например, 740,2
источник
Python, 37
Шаг 1. Конвертировать в одинарный.
Шаг 2. Унарный алгоритм деления.
источник
Питон - 41 символ
Принимает ввод через запятую, например
740,2
источник
Python, 70
Что-то сумасшедшее, что я только что подумал (используя ввод через запятую):
Если вы принимаете небольшие ошибки точности с плавающей точкой,
round
функция может быть отброшена.источник
Ябасич - 17 персонажей
источник
PHP - 82 символа (глючит)
Однако это очень простое решение - оно не обрабатывает дроби или другие знаки (может попасть в бесконечный цикл). Я не буду вдаваться в детали в этом, это довольно просто.
Ввод в стандартный ввод, разделенный новой строкой.
PHP - 141 символ (полный)
Вход и выход такие же, как и предыдущий.
Да, это почти в два раза больше предыдущего, но это:
Переформатировать и объяснить:
источник
Ruby 1.9, 28 символов
Остальная часть дивизии, 21 персонаж
Образец:
Для Ruby 1.8:
источник
('a'*a+'b').split('a'*b).size-1
3 символа больше.APL (6)
/
здесь не деление, ноfoldr
. то есть,F/a b c
естьa F (b F c)
. Если я не могу использовать,foldr
потому что это называется/
, это может быть сделано в 9 символов:Объяснение:
⎕
:input()
⍟⎕
:map(log, input())
-/⍟⎕
:foldr1(sub, map(log, input()))
*-/⍟⎕
:exp(foldr1(sub, map(log, input())))
⌊*-/⍟⎕
:floor(exp(foldr1(sub, map(log, input()))))
источник
PHP, 55 символов
Выход (740/2): http://codepad.viper-7.com/ucTlcq
источник
<?$a=fgetcsv(STDIN);echo$a[0]*pow($a[1],-1);
просто используйте запятую вместо пробела для разделения чисел.Scala 77
источник
Haskell, 96 знаков
Ввод в одной строке.
Код просто ищет ответ, беря делитель
d
и умножая его на все целые числаn >= 0
. Позвольтеm
быть дивидендом. Самый большойn
такой, которыйn * d <= m
выбран, чтобы быть ответом. Код на самом деле выбирает наименьшееn
, чтоn * d > m
вычитает из него 1, потому что я могу взять первый элемент из такого списка. В другом случае мне пришлось бы взять последнее, но тяжело достать последний элемент из бесконечного списка. Ну, можно доказать, что список конечен, но Хаскелл не знает лучше при выполнении фильтра, поэтому он продолжает фильтровать неопределенно долго.источник
Common Lisp, 42 персонажа
Принимает пробел или ввод через строку
источник
Bash,
7264 персонажаВыведите бесконечное число новых строк, возьмите первые x, поместите их все в файл с именем f, затем получите размер f в блоках размером y. Принял совет Манатворка, чтобы сбрить восемь персонажей.
источник
read x y
. С удалением еще нескольких пробелов можно сократить до 64 символов: pastebin.com/Y3SfSXWkПитон - 45 символов
Принимает ввод через запятую, например, 740,2
источник
Python, 94 символа
Рекурсивный бинарный поиск:
источник
Питон, 148
Другие решения могут быть короткими, но масштабированы ли они ?
Вот элегантное решение с постоянным временем , использующее возможности CLOUD.
Я упоминал, что он также использует Haskell?
источник
Python, 46 байт
Никто не опубликовал скучное решение по вычитанию, поэтому я не удержался.
источник
Smalltalk , Squeak 4.x вкус
определить это двоичное сообщение в Integer:
После игры в гольф этот коэффициент все еще длинный (88 символов):
Но это достаточно быстро:
-> 127 мс на моем скромном Mac mini (8 моп / с)
По сравнению с обычным делением:
-> 31 мс, это всего в 4 раза медленнее
Я не считаю символы для чтения stdin или записи stdout, Squeak не был разработан для сценариев.
Конечно, глупее повторять вычитание
или просто тупое перечисление
может работать, но не очень интересно
источник
источник
DC: 26 символов
Я признаю, что это не самое быстрое решение.
источник
Python 54
Принимает ввод через запятую.
Слова, потому что уценка умирает со списком, за которым следует код ?:
источник
Q, 46
,
источник
Ссылка: http://www.forums.hscripts.com/viewtopic.php?f=13&t=1358
источник
Python, 40 символов
источник
Python, 37
Создает строку length
x
('0'*x
) и использует расширенные срезы для выбора каждогоy
символа, начиная с индексаy-1
. Печатает длину полученной строки.Как и Gnibbler, для этого требуется ввод через запятую. Удаление это стоит
9
символов:источник
Сетчатка 0.7.3, 33 байта (не конкурирует)
Язык новее, чем вызов. Сначала вводится разделенный пробелами разделитель. Деление на ноль не определено.
Попробуйте онлайн
источник