Ethiopian multiplication: Difference between revisions
Content added Content deleted
m (→{{header|Python}}: No more list comprehension :() |
(→{{header|Python}}: Move table out of function) |
||
Line 2,391: | Line 2,391: | ||
<lang python>from itertools import izip, takewhile |
<lang python>from itertools import izip, takewhile |
||
halve = lambda x: x // 2 |
halve = lambda x: x // 2 |
||
double = lambda x: x * 2 |
double = lambda x: x * 2 |
||
even = lambda x: x % 2 == 0 |
even = lambda x: x % 2 == 0 |
||
def iterate(function, arg): |
def iterate(function, arg): |
||
while 1: |
while 1: |
||
yield arg |
yield arg |
||
arg = function(arg) |
arg = function(arg) |
||
halves = lambda x: takewhile(lambda v: v >= 1, iterate(halve, x)) |
halves = lambda x: takewhile(lambda v: v >= 1, iterate(halve, x)) |
||
doubles = lambda x: iterate(double, x) |
doubles = lambda x: iterate(double, x) |
||
table = lambda x, y: izip(halves(x), doubles(y)) |
|||
def ethiopian(multiplier, multiplicand): |
def ethiopian(multiplier, multiplicand): |
||
result = sum(q for p, q in table(multiplier, multiplicand) |
|||
if not even(p)) |
|||
return result</lang> |
return result</lang> |
||