2
\$\begingroup\$

Given integers a and b in the format a√b (a on the square root of b), make a program that will reduce b and increase a until the radical statement is fully simplified.

Example

input  
a = 1
b = 16

output
4 root 1

In this instance, 1√16 = 4√1

Bonus - 25 chars for the ability to simplify radicals other than square root using another variable, c.

\$\endgroup\$
1

1 Answer 1

0
\$\begingroup\$

Python, 71-25=46 63-25=38 chars

f=lambda a,b:max((a*i,b/i/i)for i in range(1,b)if b%(i*i)==0)

g=lambda a,b,c:max((a*i,b/i**c)for i in range(1,b)if b%i**c==0)

f is 61, chars. g is 63 but gets a 25 char bonus.

\$\endgroup\$
1
  • \$\begingroup\$ You can make it a lot shorter by using the ** operator and getting rid of unnecessary parens: f=lambda a,b,c:max((a*i,b/i**c)for i in range(1,b)if b%i**c==0) \$\endgroup\$
    – Josh
    Jan 30, 2014 at 18:01

Not the answer you're looking for? Browse other questions tagged or ask your own question.