Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6984039
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 27, 20262026-05-27T18:29:54+00:00 2026-05-27T18:29:54+00:00

What is the best way to construct a program in Ruby that solves for

  • 0

What is the best way to construct a program in Ruby that solves for the different types of triangles: specifically AAS, ASA, SAS, SSA, and SSS triangles.

There are only three different solutions: using the law of sines, law of cosines and all angles add up to 180.

I’ve been playing around with different implementations of this, but I can’t find a good clean way to make this nice and DRY.

I’m currently doing something like this:

def solve
      #AA
      !self.A && self.B && self.C ? self.A = 180 - (self.B + self.C) : false
      !self.B && self.A && self.C ? self.B = 180 - (self.A + self.C) : false
      !self.C && self.B && self.A ? self.C = 180 - (self.B + self.A) : false

      #AAS

      !self.a && self.A && self.C && self.c ? self.a = (self.c * Math.sin(self.A.degrees))/Math.sin(self.C.degrees) : false
      !self.b && self.B && self.C && self.c ? self.b = (self.c * Math.sin(self.B.degrees))/Math.sin(self.C.degrees) : false
end

Essentially what I end up doing is having a list of all possible ways to solve it, loop through them and grab the first one that is solvable. Then loop through again and take a second stab at it until no solutions can be found. But it isn’t DRY at all.

How would you attack this?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-27T18:29:54+00:00Added an answer on May 27, 2026 at 6:29 pm

    Okay, here is a more complete solution – no looping though:

    class Triangle
      def initialize( options )
        @angles = [options[:alpha], options[:beta], options[:gamma]]
        @sides = [options[:a], options[:b], options[:c]]
      end
    
      def solve
        # AA
        if @angles.one?( &:nil? )
          @angles[@angles.index( nil )] = 180 - @angles.compact.inject( &:+ )
        end
    
        # AAS
        (0..2).each do |i|
          if !@sides[i] && @angles[i]
            (0..2).each do |j|
              if @angles[j] && @sides[j]
                @sides[i] = ( @sides[j] * Math.sin( @angles[i] ).abs ) / Math.sin( @angles[j] ).abs
              end
            end
          end
        end
    
        # ...
    
        puts @angles.to_s
        puts @sides.to_s
      end
    end
    

    t = Triangle.new :alpha => 62, :beta => 35, :a => 7

    t.solve

    [62, 35, 83]

    [7, 4.054866015928188, 9.170357476093628]

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

What is the best way to construct a audio player that can communicate with
What is the best way to construct a bit mask in C with m
What is the best way to verify/test that a text string is serialized to
I'd like to know how best to program three different editions of my C#
What is the best way to get a Unique ID from an ENUM that
I have a polygon soup of triangles that I would like to construct a
I am a bit puzzled about the best way to construct a stored procedure
I am trying to understand what is the best way to construct a query
What is the best way to construct an #ask query using semantic properties from
How to treat exception in best way in construct? option1 - catch exception where

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.