Найти ответы in Java
-
- Уже с Приветом
- Posts: 590
- Joined: 23 Jun 2016 19:49
- Location: SFBA
Найти ответы in Java
Добрый день. Как найти ответы in Java на эту задачу https://www.coursehero.com/tutors-probl ... nates-lis/ ? Что-то у меня не получается гуглить..
-
- Уже с Приветом
- Posts: 2272
- Joined: 29 Jul 2005 17:39
- Location: Калифорнийский Мухосранск
Re: Найти ответы in Java
Если я правильно прочитал задачу - есть набор из 26 точек на плоскости каждая из которых имеeт две координаты (X,Y). Есть еше одна "опорная" точка с координатами (A,B). Надо посчитать расстояние от этой "опорной" точки до каждой из этих 26 и вывести эти 26 точек в порядке возрастания расстояния от "опорной" точки. Расстояне = длинна отрезка с вершинами в (A,B) и (X,Y). Это расстояние R вычисляется как R = sqrt((A-X)^2 + (B-Y)^2), ну если конечно старина Пифагор нам не врет.
Так в чем проблема-то? Как в Java JSON прочитать из файла или как лучше отсортировать по вычисляемому критерию?
P.S. Если точек миллион, то можно квадратный корень не вычислять, один хрен что сравнивать - что само расстояние, что его квадрат.
Так в чем проблема-то? Как в Java JSON прочитать из файла или как лучше отсортировать по вычисляемому критерию?
P.S. Если точек миллион, то можно квадратный корень не вычислять, один хрен что сравнивать - что само расстояние, что его квадрат.
-
- Уже с Приветом
- Posts: 5552
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Найти ответы in Java
Каждый математик должен знать меру, норму и предел. А вот CS engineers лажают.
Из моего опыта, треть кандидатов на tech screen не могут посчитать расстояние между двумя точками на плоскости.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
-
- Уже с Приветом
- Posts: 9563
- Joined: 26 Mar 2011 23:02
- Location: Russia -> Orlando, FL
Re: Найти ответы in Java
Учись студент.SUPER wrote: ↑25 Nov 2019 22:14 Добрый день. Как найти ответы in Java на эту задачу https://www.coursehero.com/tutors-probl ... nates-lis/ ? Что-то у меня не получается гуглить..
Code: Select all
package json;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import org.json.simple.JSONArray;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
*
* @author Brrdrr
*for fun
*/
public class Coordinates {
public static void main(String[] args) throws Exception {
String file = "C:\\coordinates.json";
String originID = "origin";
Long originX = 6L;
Long originY = 33L;
jsonReader(file, originX, originY);
}
/**
* Read the JSON from file and compare with origin coordinates
*
* @param file
* the path to the JSON array
* @param x
* origin X Coordinate
* @param y
* origin Y Coordinate
* @throws FileNotFoundException
* @throws IOException
* @throws ParseException
*/
public static void jsonReader(String file, Long x, Long y)
throws FileNotFoundException, IOException, ParseException {
// parsing file "coordinates.json"
Object obj = new JSONParser().parse(new FileReader(file));
JSONArray ja = (JSONArray) obj;
// iterating through the record lines
Iterator<Map<String, String>> itr = ja.iterator();
Map<String, Double> distance = new HashMap<String, Double>();
while (itr.hasNext()) {
Map<String, String> element = itr.next();
String id = element.get("id").toString();
String value = element.get("value").toString();
String[] values = value.split(",");
Long coordinateX = Long.valueOf(values[0]);
Long coordinateY = Long.valueOf(values[1]);
// Debug
// System.out.println("id: " + id + " value: " + value + " X: " +
// coordinateX + " Y: " + coordinateY);
distance.put(id, distanceCal(coordinateX, coordinateY, x, y));
}
print(distance);
}
/**
* Calculating the distance between to points A and B by their coordinates
*
* @param xA
* @param yA
* @param xB
* @param yB
* @return
*/
public static double distanceCal(Long xA, Long yA, Long xB, Long yB) {
double distance = Math
.sqrt(Math.pow(xA - xB, 2) + Math.pow(yA - yB, 2));
return distance;
}
/**
* Sorting map of distances and print with 0.00 precision.
*
* @param map
*/
public static void print(Map<String, Double> map) {
Map<String, Double> sortedMap = map
.entrySet()
.stream()
.sorted(Comparator.comparing(
Map.Entry<String, Double>::getValue).thenComparing(
Map.Entry<String, Double>::getKey))
.collect(
Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue, (oldV, newV) -> oldV,
LinkedHashMap::new));
DecimalFormat df = new DecimalFormat("0.00");
System.out.println("This is the distance from Origin Point");
sortedMap.forEach((k, v) -> System.out.println("ID: " + k
+ " Distance: " + df.format(v)));
}
}
Человек никогда не бывает так несчастен, как ему кажется, или так счастлив, как ему хочется. (Франсуа де Ларошфуко)
-
- Уже с Приветом
- Posts: 1494
- Joined: 08 Mar 2002 10:01
- Location: NJ
Re: Найти ответы in Java
OMFG. Java is evil
-
- Уже с Приветом
- Posts: 9563
- Joined: 26 Mar 2011 23:02
- Location: Russia -> Orlando, FL
Re: Найти ответы in Java
забыл OUTPUT
______________________________________________
This is the distance from Origin Point
ID: a Distance: 16.76
ID: d Distance: 22.02
ID: z Distance: 26.00
ID: o Distance: 28.28
ID: t Distance: 28.43
ID: p Distance: 31.58
ID: n Distance: 33.24
ID: i Distance: 33.54
ID: w Distance: 35.11
ID: v Distance: 42.72
ID: l Distance: 43.00
ID: m Distance: 48.27
ID: k Distance: 48.37
ID: b Distance: 50.99
ID: j Distance: 52.63
ID: e Distance: 65.15
ID: q Distance: 66.85
ID: f Distance: 69.64
ID: h Distance: 69.86
ID: r Distance: 78.00
ID: g Distance: 79.21
ID: y Distance: 90.79
ID: c Distance: 91.09
ID: s Distance: 93.90
ID: u Distance: 94.89
ID: x Distance: 102.83
______________________________________________
This is the distance from Origin Point
ID: a Distance: 16.76
ID: d Distance: 22.02
ID: z Distance: 26.00
ID: o Distance: 28.28
ID: t Distance: 28.43
ID: p Distance: 31.58
ID: n Distance: 33.24
ID: i Distance: 33.54
ID: w Distance: 35.11
ID: v Distance: 42.72
ID: l Distance: 43.00
ID: m Distance: 48.27
ID: k Distance: 48.37
ID: b Distance: 50.99
ID: j Distance: 52.63
ID: e Distance: 65.15
ID: q Distance: 66.85
ID: f Distance: 69.64
ID: h Distance: 69.86
ID: r Distance: 78.00
ID: g Distance: 79.21
ID: y Distance: 90.79
ID: c Distance: 91.09
ID: s Distance: 93.90
ID: u Distance: 94.89
ID: x Distance: 102.83
Человек никогда не бывает так несчастен, как ему кажется, или так счастлив, как ему хочется. (Франсуа де Ларошфуко)
-
- Уже с Приветом
- Posts: 5552
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Найти ответы in Java
Я не понял, а где IPointFactory, IDistanceMeasurer, и т.д., и т.п., вкупе с getXCoorditate, getYCoordinate и иже с ними ?
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
-
- Уже с Приветом
- Posts: 5552
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Найти ответы in Java
Чудесно общались через unnamed common block и стреляли триплетом при помощи if statement.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
-
- Уже с Приветом
- Posts: 5552
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Найти ответы in Java
Угумс, а нонеча единственный приемлемый вид синглетона - это виски.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Найти ответы in Java
Да пи"№% какой-то.
Надеюсь, что это какой-то прикол?
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Найти ответы in Java
I* - это из другой оперы.
PS: коллега рассказывал, ему кошмар приснился - заблудился в незнакомом городе. Пытается у прохожих дорогу спросить, а никто из них не то что IDispatch - IUnknown не поддерживает! Говорит, в холодном поту проснулся.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 5552
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Найти ответы in Java
Ну, как же из другой, когда из той же самой. Джависты любят обложиться интерфейсами и конкретными имплементациями, завести factory, controller, manager, что там еще бывает? Я через их код с большим трудом продираюсь. Может, конечно, нехватка опыта сказывается. Они-то, небось, всего этого и не замечают, на автомате делают.
ЗЫ: это не в адрес brrdrr, он-то явно прикололся.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Найти ответы in Java
а какие современные языки проще читаются?8K wrote: ↑27 Nov 2019 23:20
Ну, как же из другой, когда из той же самой. Джависты любят обложиться интерфейсами и конкретными имплементациями, завести factory, controller, manager, что там еще бывает? Я через их код с большим трудом продираюсь. Может, конечно, нехватка опыта сказывается. Они-то, небось, всего этого и не замечают, на автомате делают.
-
- Уже с Приветом
- Posts: 5552
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Найти ответы in Java
Ну, это не столько от языка зависит, сколько от конкретного человека. Мой фортран был без особых излишеств и вполне себе структурированный и понятный. Соответственно, в отличие от других сотрудников, мне не приходилось тратить кучу времени на отладку.
А с джавой сами понимаете, кто там в первую очередь присутствует.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Найти ответы in Java
и мой, и мой! "чистый, как слеза младенца" (с)
-
- Уже с Приветом
- Posts: 5552
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Найти ответы in Java
Я сам не так чтобы много языков знаю. Основная проблема во всем этом программировании, что мы не умеем аккуратно описывать динамические процессы и их взаимодействие. Статическая программа (ну, те самые распечатки с АЦПУ) волшебным образом моделирует меняющийся мир.
Возможно, Go немного дальше продвинулся в этом смысле. Ну, типа expressive power.
Возможно, Go немного дальше продвинулся в этом смысле. Ну, типа expressive power.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 143
- Joined: 29 Apr 2014 12:22
Re: Найти ответы in Java
Приобщение к прекрасному миру джабы "студента". Как бы на примере, brrdrr показывает, что погромирование не только гугление и копипаст, но и нечто большее. Что то типа "добро пожаловать" в сей прекрасный мир. Деньги, тачки, яхты, выкупленный домик в долине, всё это будет, главное удачно жениться, а пока - добро пожаловать в мир ректального программирования.
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Найти ответы in Java
я так и не понял, в чем прикол brrdrr? Можно на джаве проще написать?
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Найти ответы in Java
Можно еще так (после жабы №8). Тут 2 класса. На сортировку я забил.
Code: Select all
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
public class Application {
public static void main(String[] args) {
getStreamFromFile("coordinates.json")
.map(r -> "pivot: " + r.id + ", distance: " + r.distanceTo(6,31))
.forEach(System.out::println);
}
private static Stream<Record> getStreamFromFile(String filename) {
try {
return new ObjectMapper()
.readValue(new File(filename), new TypeReference<List<Map<String, String>>>() {
})
.parallelStream()
.map(m -> new Record(m.get("id"), m.get("value")));
} catch (IOException e) {
e.printStackTrace();
return Stream.empty();
}
}
}
Code: Select all
public class Record {
final String id;
final double x, y;
Record(String id, String value) {
this.id = id;
String[] coordinates = value.split(",");
this.x = Double.parseDouble(coordinates[0]);
this.y = Double.parseDouble(coordinates[1]);
}
double distanceTo(double x, double y) {
return Math.hypot(this.x - x, this.y - y);
}
}
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Найти ответы in Java
Плюс за знание библиотек, но с учетом того, что у brrdrr были комментарии и дебаггинг распечатки в коде, у вас ненамного короче получилось, ну и на сортировку вы забили.
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Найти ответы in Java
С сортировкой код будет на одну строчку длиннее:
Code: Select all
public static void main(String[] args) {
getStreamFromFile("coordinates.json")
.sorted(Comparator.comparingDouble(r -> r.distanceTo(6, 31))) // <---------------- Тута
.map(r -> "pivot: " + r.id + ", distance: " + r.distanceTo(6,31))
.forEach(System.out::println);
}
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Найти ответы in Java
Я к тому, что код brrdrr не намного длиннее вашего, если убрать комментарии. После рассказов о невероятной технической крутости вас и вашей команды я, честно, ожидал большего.