Implemente um algoritmo de divisão no seu idioma favorito que lida com a divisão inteira. Ele precisa apenas lidar com números positivos - mas pontos de bônus se ele também lidar com a divisão de sinais negativos e mistos. Os resultados são arredondados para resultados fracionários.
O programa não pode conter os /
, \
, div
ou semelhantes operadores. Deve ser uma rotina que não use os recursos de divisão nativos do idioma.
Você só precisa lidar com a divisão de até 32 bits. O uso de subtração repetida não é permitido.
Entrada
Tome duas entradas no stdin separadas por novas linhas ou espaços (sua escolha)
740
2
Resultado
Nesse caso, a saída seria 370
.
A solução que é o menor ganha.
code-golf
arithmetic
division
Thomas O
fonte
fonte
740,2
também é permitido para a entrada? ou seja, vírgula separada?Respostas:
Python - 73 caracteres
Toma entrada separada por vírgula, por exemplo
740,2
fonte
JavaScript, 61
Isso torna uma string o comprimento do dividendo
,,,,,,
(6) e se divide no divisor,,,
(3), resultando em uma matriz de comprimento 3['', '', '']
:, cujo comprimento então eu subtraí um. Definitivamente não é o mais rápido, mas espero que seja interessante!fonte
A=Array,P=prompt,P((''+A(+P())).split(','+A(+P())).length)
JavaScript - 36 caracteres
fonte
alert
porp
fornecerá alguns caracteres extras. :)Mathematica: 34 caracteres
Resolve simbolicamente a equação (xa == b)
fonte
Solve[x#==#2]&@@Input[]
Python - 72 caracteres
Toma entrada separada por vírgula, por exemplo, 740,2
fonte
Python, 37
Etapa 1. Converta para unário.
Etapa 2. Algoritmo de divisão unário.
fonte
Python - 41 chars
Takes comma separated input, eg
740,2
fonte
Python, 70
Something crazy I just thought (using comma separated input):
If you accept small float precision errors, the
round
function can be dropped.fonte
Yabasic - 17 caracteres
fonte
PHP - 82 caracteres (buggy)
Esta é uma solução muito simples, no entanto - ela não lida com frações ou sinais diferentes (poderia entrar em um loop infinito). Não vou entrar em detalhes neste, é bastante simples.
A entrada está em stdin, separada por uma nova linha.
PHP - 141 caracteres (completo)
Entrada e saída iguais à anterior.
Sim, isso é quase o dobro do tamanho do anterior, mas:
Re-formatar e explicação:
fonte
Ruby 1.9, 28 caracteres
Resto da divisão, 21 caracteres
Amostra:
Para Ruby 1.8:
fonte
('a'*a+'b').split('a'*b).size-1
, 3 characters bigger.APL (6)
/
is not division here, butfoldr
. i.e,F/a b c
isa F (b F c)
. If I can't usefoldr
because it's called/
, it can be done in 9 characters:Explanation:
⎕
:input()
⍟⎕
:map(log, input())
-/⍟⎕
:foldr1(sub, map(log, input()))
*-/⍟⎕
:exp(foldr1(sub, map(log, input())))
⌊*-/⍟⎕
:floor(exp(foldr1(sub, map(log, input()))))
fonte
PHP, 55 characters
Output (740/2): http://codepad.viper-7.com/ucTlcq
fonte
<?$a=fgetcsv(STDIN);echo$a[0]*pow($a[1],-1);
Just use a comma instead of a space to separate numbers.Scala 77
fonte
Haskell, 96 characters
Input is on a single line.
The code just searches for the answer by taking the divisor
d
and multiplying it against all integersn >= 0
. Letm
be the dividend. The largestn
such thatn * d <= m
is picked to be the answer. The code actually picks the leastn
such thatn * d > m
and subtracts 1 from it because I can take the first element from such a list. In the other case, I would have to take the last, but it's hard work to take the last element from an infinite list. Well, the list can be proven to be finite, but Haskell does not know better when performing the filter, so it continues to filter indefinitately.fonte
Common Lisp, 42 charaacters
Accepts space or line-separated input
fonte
Bash,
7264 charactersOutput an infinite number of newlines, take the first x, put them all into a file called f, then get the size of f in blocks the size of y. Took manatwork's advice to shave off eight characters.
fonte
read x y
. With a few more spaces removed can be reduced to 64 characters: pastebin.com/Y3SfSXWkPython - 45 chars
Takes comma separated input, eg 740,2
fonte
Python, 94 characters
A recursive binary search:
fonte
Python, 148
Other solutions may be short, but are they web scale?
Here's an elegant, constant-time solution that leverages the power of the CLOUD.
Did I mention it also uses Haskell?
fonte
Python, 46 bytes
Ninguém postou a solução de subtração entediante, então não pude resistir a fazê-lo.
fonte
Smalltalk , sabor Squeak 4.x
defina esta mensagem binária em Inteiro:
Depois de jogar golfe, esse quociente ainda é longo (88 caracteres):
Mas é razoavelmente rápido:
-> 127 ms no meu modesto mac mini (8 MOp / s)
Comparado à divisão regular:
-> 31 ms, é apenas 4 vezes mais lento
Não conto os caracteres para ler stdin ou escrever stdout, o Squeak não foi projetado para scripts.
Claro, subtração repetida mais estúpida
ou enumeração estúpida
poderia funcionar também, mas não é realmente interessante
fonte
fonte
DC: 26 caracteres
Admito que não é a solução mais rápida.
fonte
Python 54
Recebe entrada delimitada por vírgula.
Palavras porque a remarcação morre com uma lista seguida por código ?:
fonte
Q, 46
.
fonte
Referência: http://www.forums.hscripts.com/viewtopic.php?f=13&t=1358
fonte
Python, 40 caracteres
fonte
Python, 37
Constrói uma sequência de length
x
('0'*x
) e usa fatias estendidas para escolher todos osy
caracteres, começando no índicey-1
. Imprime o comprimento da sequência resultante.Como o Gnibbler, isso exige entrada separada por vírgula. Removê-lo custa
9
caracteres:fonte
Retina 0.7.3, 33 bytes (não competindo)
A linguagem é mais nova que o desafio. Recebe a entrada separada por espaço com o divisor primeiro. A divisão por zero é indefinida.
Experimente online
fonte