#!/usr/bin/ruby class Circle(x,y,r) { method to_s { "Circle(#{x}, #{y}, #{r})" }; } func solve_apollonius(Array c, Array s) -> Circle { var ð‘£11 = (2*c[1].x - 2*c[0].x); var ð‘£12 = (2*c[1].y - 2*c[0].y); var ð‘£13 = (c[0].x**2 - c[1].x**2 + c[0].y**2 - c[1].y**2 - c[0].r**2 + c[1].r**2); var ð‘£14 = (2*s[1]*c[1].r - 2*s[0]*c[0].r); var ð‘£21 = (2*c[2].x - 2*c[1].x); var ð‘£22 = (2*c[2].y - 2*c[1].y); var ð‘£23 = (c[1].x**2 - c[2].x**2 + c[1].y**2 - c[2].y**2 - c[1].r**2 + c[2].r**2); var ð‘£24 = (2*s[2]*c[2].r - 2*s[1]*c[1].r); var ð‘¤12 = (ð‘£12 / ð‘£11); var ð‘¤13 = (ð‘£13 / ð‘£11); var ð‘¤14 = (ð‘£14 / ð‘£11); var ð‘¤22 = (ð‘£22/ð‘£21 - ð‘¤12); var ð‘¤23 = (ð‘£23/ð‘£21 - ð‘¤13); var ð‘¤24 = (ð‘£24/ð‘£21 - ð‘¤14); var 𑃠= (-ð‘¤23 / ð‘¤22); var ð‘„ = (ð‘¤24 / ð‘¤22); var ð‘€ = ((-ð‘¤12)*𑃠- ð‘¤13); var ð‘ = (ð‘¤14 - ð‘¤12*ð‘„); var ð‘Ž = (ð‘**2 + ð‘„**2 - 1); var ð‘ = (2*ð‘€*ð‘ - 2*ð‘*c[0].x + 2*ð‘ƒ*ð‘„ - 2*ð‘„*c[0].y + 2*s[0]*c[0].r); var ð‘ = (c[0].x**2 + ð‘€**2 - 2*ð‘€*c[0].x + ð‘ƒ**2 + c[0].y**2 - 2*ð‘ƒ*c[0].y - c[0].r**2); var ð· = (ð‘**2 - 4*ð‘Ž*ð‘); var rs = ((-ð‘ - ð·.sqrt) / 2*ð‘Ž); var xs = (ð‘€ + ð‘*rs); var ys = (𑃠+ ð‘„*rs); Circle(xs, ys, rs); } var c = [Circle(0, 0, 1), Circle(4, 0, 1), Circle(2, 4, 2)]; var a = solve_apollonius(c, %n<1 1 1>); var b = solve_apollonius(c, %n<-1 -1 -1>); say a; say b; assert_eq("#{a.x}", "2") assert_eq("#{a.y}", "2.1") assert_eq("#{a.r}", "3.9") assert_eq("#{b.x}", "2") assert("#{b.r}" =~ /^1\.16666666666666666666666666666666666/)