Создайте математическую формулу для конверсий

Мне было интересно, могу ли я получить помощь, пытаясь создать простую математическую формулу. Недавно мне дали интервью для работы программистом уровня 1 и попросили написать программу. Я сделал все это прекрасно, но что заставило меня провалить собеседование, так это то, что мне нужно создать математическую формулу для преобразования разных единиц измерения в другие единицы измерения. Это легко, но что усложняло, так это то, что мне нужно было преобразовать эти разные единицы измерения на основе длины, данной мне в футах. Меня это очень беспокоит, потому что парень сказал, что я могу просто составить одно уравнение, которое можно использовать для всех преобразований в разные единицы измерения. Таким образом, текущие единицы измерения, которые были даны, содержали их первоначальные единицы измерения и их измерение в футах. Формула должна использовать различную длину в футах для выполнения этих преобразований. В противном случае я бы получил задание, просто разделив и умножив все, чтобы получить ответ. Различаются следующие единицы измерения:

inch,.083333    
fathom,6    
foot,1    
furlong,660    
kilometer,3281.5    
meter,3.2815    
mile,5280    
rod,16.5    
yard,3 

Цифры после запятой — это длина в футах для этой единицы измерения. Я смотрел на это в течение нескольких часов, но я не могу придумать уравнение, которое можно использовать для всех длин. Для тех, кто помогает мне, я действительно ценю это, я начинаю чувствовать себя побежденным с этим.

Для программирования я использовал X в качестве исходных единиц измерения, Y в качестве желаемых единиц измерения и Z для введенной длины, которую нужно было преобразовать.


person jackfrost411    schedule 18.04.2015    source источник


Ответы (2)


Вы можете сделать это следующим образом:

import java.util.HashMap;

public class ConvertLength {
  private static HashMap<String,Double> lengthInFeet
    = new HashMap<String,Double>();

  static {
    lengthInFeet.put("inch", 0.083333);
    lengthInFeet.put("inches", 0.083333);
    lengthInFeet.put("fathom", 6.0);
    lengthInFeet.put("fathoms", 6.0);
    lengthInFeet.put("foot", 1.0);
    lengthInFeet.put("feet", 1.0);
    lengthInFeet.put("furlong", 660.0);
    lengthInFeet.put("furlongs", 660.0);
    lengthInFeet.put("kilometer", 3281.5);
    lengthInFeet.put("kilometers", 3281.5);
    lengthInFeet.put("meter", 3.2815);
    lengthInFeet.put("meters", 3.2815);
    lengthInFeet.put("mile", 5280.0);
    lengthInFeet.put("miles", 5280.0);
    lengthInFeet.put("rod", 16.5);
    lengthInFeet.put("rods", 16.5);
    lengthInFeet.put("yard", 3.0);
    lengthInFeet.put("yards", 3.0);
  };

  public static double convert(double length, String from, String to) {
    return length * lengthInFeet.get(from) / lengthInFeet.get(to);
  }

  public static void main(String[] args) {
    double length = Double.parseDouble(args[0]);
    String from = args[1];
    String to = args [2];

    System.out.println(length + " " + from + " = "
               + convert(length,from,to) + " " + to);
  }
}
person Edward Doolittle    schedule 18.04.2015

Помимо практических вопросов, вы можете использовать такое уравнение:

длина = αvwᵀ

Здесь α — длина в футах, v — вектор, содержащий коэффициенты преобразования (т. е. [0,08333, 6, 1, 660, …]), а w — вектор типа [0, …, 1, …, 0] с значение единицы по индексу, которое соответствует нужной единице.

person tsnorri    schedule 18.04.2015