Author |
Message |
|
ztrumpet
Active Member
Joined: 06 May 2009 Posts: 555
|
Posted: 18 Oct 2009 09:57:40 am Post subject: |
|
|
Simplify a radical with an input in Ans and an output in Ans.
For example:
{1,8}
prgmR
{2,2}
Read:
One square root of eight is simplified to two square roots of two.
I've got 151 bytes in the Memory Managment Menu with a one letter program name. Who can beat it?
Last edited by Guest on 05 Jul 2010 07:49:16 am; edited 1 time in total |
|
Back to top |
|
|
thornahawk μολών λαβέ
Active Member
Joined: 27 Mar 2005 Posts: 569
|
Posted: 18 Oct 2009 11:05:00 am Post subject: |
|
|
Quote:
Ans→A
∟A(1→M:∟A(2→N
int(√(N→K
While fPart(N/K²
K-1→K
End
{MK,N/K²
Maybe somebody has a better idea? :)
A stiffer challenge might be to write a program that processes general radicals, and not just square roots...
thornahawk |
|
Back to top |
|
|
DarkerLine ceci n'est pas une |
Super Elite (Last Title)
Joined: 04 Nov 2003 Posts: 8328
|
Posted: 18 Oct 2009 11:47:17 am Post subject: |
|
|
Here's a cheap way to simplify square roots that can be generalized, though you wouldn't want to:
Quote:
For(A,1,max(Ans
For(B,1,max(Ans
If A2B=prod(Ans^{2,1
{A,B
End
End
Ans
Last edited by Guest on 05 Jul 2010 07:49:30 am; edited 1 time in total |
|
Back to top |
|
|
ztrumpet
Active Member
Joined: 06 May 2009 Posts: 555
|
Posted: 18 Oct 2009 12:00:04 pm Post subject: |
|
|
For some reason I can't get either of yours to work right. It's probably my fault though. :/ |
|
Back to top |
|
|
bfr
Member
Joined: 13 Feb 2006 Posts: 108
|
Posted: 18 Oct 2009 12:05:06 pm Post subject: |
|
|
Quote:
For(A,2,Ans(2
If not(fPart(A-12Ans(2
{AAns(1),A-12Ans(2
End
44 bytes with 1 character name, a relatively straightforward approach that I guess works if you're going for reasonably small size with decent efficiency for smaller numbers. Otherwise, thornahawk's is probably nicer for larger numbers, especially if the number can't be simplified much.
Last edited by Guest on 18 Oct 2009 12:13:09 pm; edited 1 time in total |
|
Back to top |
|
|
Weregoose Authentic INTJ
Super Elite (Last Title)
Joined: 25 Nov 2004 Posts: 3976
|
Posted: 18 Oct 2009 06:48:23 pm Post subject: |
|
|
Here's a fun way: type √(845→X on the home screen, press enter, and then write XAns/R►Pr(X,Ans.
Now, hit enter repeatedly.
The first answer to not have a fractional part (be careful with rounding issues here) is the new coefficient to your radical.
Last edited by Guest on 05 Jul 2010 07:49:49 am; edited 1 time in total |
|
Back to top |
|
|
ztrumpet
Active Member
Joined: 06 May 2009 Posts: 555
|
Posted: 18 Oct 2009 06:57:23 pm Post subject: |
|
|
That's pretty cool. How did you figure this out? |
|
Back to top |
|
|
thornahawk μολών λαβέ
Active Member
Joined: 27 Mar 2005 Posts: 569
|
Posted: 18 Oct 2009 07:07:21 pm Post subject: |
|
|
For Goose's approach, one plus the number of times to repeat that line is the number inside the square root. :)
thornahawk |
|
Back to top |
|
|
GloryMXE7 Puzzleman 3000
Active Member
Joined: 02 Nov 2008 Posts: 604
|
Posted: 18 Oct 2009 07:51:05 pm Post subject: |
|
|
if you put it in a while loop such as while fpart(ans =/= 0
would it work the same with out having to repeatedly hit the enter button although its not really a burden. |
|
Back to top |
|
|
Weregoose Authentic INTJ
Super Elite (Last Title)
Joined: 25 Nov 2004 Posts: 3976
|
Posted: 18 Oct 2009 08:24:40 pm Post subject: |
|
|
ztrumpet wrote: That's pretty cool. How did you figure this out?
Normally, one might do the following (note that X is already the result of the radical):
For(N,1,X
Pause √(X[font="verdana"]²/N)
End
The idea is getting to the next N not from the loop, but from the expression.
That is, we're going to take the last answer that the expression gave us, and then compute "N" using that.
A little elementary algebra:
Ans=√(X[font="verdana"]²/N)
Ans[font="verdana"]²=X[font="verdana"]²/N
X[font="verdana"]²/Ans[font="verdana"]²=N
We'll now add 1 to "step" the variable...
X[font="verdana"]²/Ans[font="verdana"]²+1
...and then bundle it up to form a recursion:
√(X[font="verdana"]²/(X[font="verdana"]²/Ans[font="verdana"]²+1))
This is what the program looks like so far:
√(X[font="verdana"]²/1)
While 1
Pause √(X[font="verdana"]²/(X[font="verdana"]²/Ans[font="verdana"]²+1))
End
Basically, the expression breaks itself back down to the "N", increments it, and then uses the original expression on itself to compute the next answer.
It'd be a shame to leave something like that unsimplified. :)
X[font="verdana"]²/Ans[font="verdana"]²+1 can be factored like so:
X[font="verdana"]²/Ans[font="verdana"]² + 1
X[font="verdana"]²/Ans[font="verdana"]² + (Ans[font="verdana"]²/Ans[font="verdana"]²)
(X[font="verdana"]² + Ans[font="verdana"]²)/Ans[font="verdana"]²
X[font="verdana"]² over that gives us X[font="verdana"]²/((X[font="verdana"]²+Ans[font="verdana"]²)/Ans[font="verdana"]²) = X[font="verdana"]²Ans[font="verdana"]²/(X[font="verdana"]²+Ans[font="verdana"]²).
Let's extract the perfect squares from inside the square root, shall we?
√(X[font="verdana"]²Ans[font="verdana"]²/(X[font="verdana"]²+Ans[font="verdana"]²)) = XAns√(1/(X[font="verdana"]²+Ans[font="verdana"]²))
...which of course translates to XAns√(1)/√(X[font="verdana"]²+Ans[font="verdana"]²) = XAns/√(X[font="verdana"]²+Ans[font="verdana"]²).
Now for the fun part. See √(X[font="verdana"]²+Ans[font="verdana"]²)? That's how you find the hypotenuse using the Pythagorean theorem!
But, if you put the triangle in a circle like so:
...you can use the relevant angle function on your calculator to find the length in radians given X and Ans, bringing our program down to:
√(X[font="verdana"]²/1)
While 1
Pause XAns/R►Pr(X,Ans
End
Anyway, my submission is 41 bytes:
Spoiler wrote: Ans(1)prod(Ans→A
For(B,1,Ans
√(A/B
If fPart(Ans
End
{Ans,B
Last edited by Guest on 05 Jul 2010 07:48:46 am; edited 1 time in total |
|
Back to top |
|
|
|