Найти ответы in Java

User avatar
SUPER
Уже с Приветом
Posts: 604
Joined: 23 Jun 2016 19:49
Location: SFBA

Найти ответы in Java

Post by SUPER »

Добрый день. Как найти ответы in Java на эту задачу https://www.coursehero.com/tutors-probl ... nates-lis/ ? Что-то у меня не получается гуглить..
KinDzaDza
Уже с Приветом
Posts: 2311
Joined: 29 Jul 2005 17:39
Location: Калифорнийский Мухосранск

Re: Найти ответы in Java

Post by KinDzaDza »

Если я правильно прочитал задачу - есть набор из 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. Если точек миллион, то можно квадратный корень не вычислять, один хрен что сравнивать - что само расстояние, что его квадрат.
8K
Уже с Приветом
Posts: 5540
Joined: 20 Mar 2001 10:01
Location: SFBA

Re: Найти ответы in Java

Post by 8K »

KinDzaDza wrote: 26 Nov 2019 02:17 Так в чем проблема-то? Как в Java JSON прочитать из файла или как лучше отсортировать по вычисляемому критерию?
Каждый математик должен знать меру, норму и предел. А вот CS engineers лажают.

Из моего опыта, треть кандидатов на tech screen не могут посчитать расстояние между двумя точками на плоскости.
Увидев друга, Портос вскрикнул от радости...
tessob
Уже с Приветом
Posts: 576
Joined: 07 Jan 2016 13:04

Re: Найти ответы in Java

Post by tessob »

8K wrote: 26 Nov 2019 19:44Из моего опыта, треть кандидатов на tech screen не могут посчитать расстояние между двумя точками на плоскости.
Это еще что. Две трети интервьюеров не могут потом ответить какое именно расстояние они хотят видеть -- евклидово или манхэттенское. :D
User avatar
brrdrr
Уже с Приветом
Posts: 9560
Joined: 26 Mar 2011 23:02
Location: Russia -> Orlando, FL

Re: Найти ответы in Java

Post by brrdrr »

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)));

	}
}
Человек никогда не бывает так несчастен, как ему кажется, или так счастлив, как ему хочется. (Франсуа де Ларошфуко)
User avatar
ALV00
Уже с Приветом
Posts: 1491
Joined: 08 Mar 2002 10:01
Location: NJ

Re: Найти ответы in Java

Post by ALV00 »

OMFG. Java is evil
User avatar
brrdrr
Уже с Приветом
Posts: 9560
Joined: 26 Mar 2011 23:02
Location: Russia -> Orlando, FL

Re: Найти ответы in Java

Post by brrdrr »

забыл 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
Человек никогда не бывает так несчастен, как ему кажется, или так счастлив, как ему хочется. (Франсуа де Ларошфуко)
8K
Уже с Приветом
Posts: 5540
Joined: 20 Mar 2001 10:01
Location: SFBA

Re: Найти ответы in Java

Post by 8K »

Я не понял, а где IPointFactory, IDistanceMeasurer, и т.д., и т.п., вкупе с getXCoorditate, getYCoordinate и иже с ними ?
Увидев друга, Портос вскрикнул от радости...
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Найти ответы in Java

Post by Komissar »

8K wrote: 27 Nov 2019 22:03 Я не понял, а где IPointFactory, IDistanceMeasurer, и т.д., и т.п., вкупе с getXCoorditate, getYCoordinate и иже с ними ?
В Фортране расчудесно без них жили.
8K
Уже с Приветом
Posts: 5540
Joined: 20 Mar 2001 10:01
Location: SFBA

Re: Найти ответы in Java

Post by 8K »

Komissar wrote: 27 Nov 2019 22:07В Фортране
Чудесно общались через unnamed common block и стреляли триплетом при помощи if statement.
Увидев друга, Портос вскрикнул от радости...
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Найти ответы in Java

Post by Komissar »

8K wrote: 27 Nov 2019 22:09
Komissar wrote: 27 Nov 2019 22:07В Фортране
Чудесно общались через unnamed common block и стреляли триплетом при помощи if statement.
золотое время! :radio%:
8K
Уже с Приветом
Posts: 5540
Joined: 20 Mar 2001 10:01
Location: SFBA

Re: Найти ответы in Java

Post by 8K »

Угумс, а нонеча единственный приемлемый вид синглетона - это виски.
Увидев друга, Портос вскрикнул от радости...
User avatar
M. Ridcully
Уже с Приветом
Posts: 12003
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: Найти ответы in Java

Post by M. Ridcully »

ALV00 wrote: 27 Nov 2019 20:40 OMFG. Java is evil
Да пи"№% какой-то.
Надеюсь, что это какой-то прикол?
User avatar
M. Ridcully
Уже с Приветом
Posts: 12003
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: Найти ответы in Java

Post by M. Ridcully »

8K wrote: 27 Nov 2019 22:03 Я не понял, а где IPointFactory, IDistanceMeasurer, и т.д., и т.п., вкупе с getXCoorditate, getYCoordinate и иже с ними ?
I* - это из другой оперы.

PS: коллега рассказывал, ему кошмар приснился - заблудился в незнакомом городе. Пытается у прохожих дорогу спросить, а никто из них не то что IDispatch - IUnknown не поддерживает! Говорит, в холодном поту проснулся.
8K
Уже с Приветом
Posts: 5540
Joined: 20 Mar 2001 10:01
Location: SFBA

Re: Найти ответы in Java

Post by 8K »

M. Ridcully wrote: 27 Nov 2019 23:07
8K wrote: 27 Nov 2019 22:03 Я не понял, а где IPointFactory, IDistanceMeasurer, и т.д., и т.п.?
I* - это из другой оперы.
Ну, как же из другой, когда из той же самой. Джависты любят обложиться интерфейсами и конкретными имплементациями, завести factory, controller, manager, что там еще бывает? Я через их код с большим трудом продираюсь. Может, конечно, нехватка опыта сказывается. Они-то, небось, всего этого и не замечают, на автомате делают.

ЗЫ: это не в адрес brrdrr, он-то явно прикололся.
Увидев друга, Портос вскрикнул от радости...
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Найти ответы in Java

Post by Komissar »

8K wrote: 27 Nov 2019 23:20
Ну, как же из другой, когда из той же самой. Джависты любят обложиться интерфейсами и конкретными имплементациями, завести factory, controller, manager, что там еще бывает? Я через их код с большим трудом продираюсь. Может, конечно, нехватка опыта сказывается. Они-то, небось, всего этого и не замечают, на автомате делают.
а какие современные языки проще читаются?
8K
Уже с Приветом
Posts: 5540
Joined: 20 Mar 2001 10:01
Location: SFBA

Re: Найти ответы in Java

Post by 8K »

Komissar wrote: 27 Nov 2019 23:59 а какие современные языки проще читаются?
Ну, это не столько от языка зависит, сколько от конкретного человека. Мой фортран был без особых излишеств и вполне себе структурированный и понятный. Соответственно, в отличие от других сотрудников, мне не приходилось тратить кучу времени на отладку.

А с джавой сами понимаете, кто там в первую очередь присутствует.
Увидев друга, Портос вскрикнул от радости...
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Найти ответы in Java

Post by Komissar »

8K wrote: 28 Nov 2019 00:09
Komissar wrote: 27 Nov 2019 23:59 а какие современные языки проще читаются?
Ну, это не столько от языка зависит, сколько от конкретного человека. Мой фортран был без особых излишеств и вполне себе структурированный и понятный.
и мой, и мой! "чистый, как слеза младенца" (с)
8K
Уже с Приветом
Posts: 5540
Joined: 20 Mar 2001 10:01
Location: SFBA

Re: Найти ответы in Java

Post by 8K »

Я сам не так чтобы много языков знаю. Основная проблема во всем этом программировании, что мы не умеем аккуратно описывать динамические процессы и их взаимодействие. Статическая программа (ну, те самые распечатки с АЦПУ) волшебным образом моделирует меняющийся мир.

Возможно, Go немного дальше продвинулся в этом смысле. Ну, типа expressive power.
Увидев друга, Портос вскрикнул от радости...
fleshold
Уже с Приветом
Posts: 145
Joined: 29 Apr 2014 12:22

Re: Найти ответы in Java

Post by fleshold »

M. Ridcully wrote: 27 Nov 2019 23:05
ALV00 wrote: 27 Nov 2019 20:40 OMFG. Java is evil
Да пи"№% какой-то.
Надеюсь, что это какой-то прикол?
Приобщение к прекрасному миру джабы "студента". Как бы на примере, brrdrr показывает, что погромирование не только гугление и копипаст, но и нечто большее. Что то типа "добро пожаловать" в сей прекрасный мир. Деньги, тачки, яхты, выкупленный домик в долине, всё это будет, главное удачно жениться, а пока - добро пожаловать в мир ректального программирования.
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Найти ответы in Java

Post by Komissar »

я так и не понял, в чем прикол brrdrr? Можно на джаве проще написать?
tessob
Уже с Приветом
Posts: 576
Joined: 07 Jan 2016 13:04

Re: Найти ответы in Java

Post by tessob »

Можно еще так (после жабы №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);
    }

}
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Найти ответы in Java

Post by Komissar »

Плюс за знание библиотек, но с учетом того, что у brrdrr были комментарии и дебаггинг распечатки в коде, у вас ненамного короче получилось, ну и на сортировку вы забили.
tessob
Уже с Приветом
Posts: 576
Joined: 07 Jan 2016 13:04

Re: Найти ответы in Java

Post by tessob »

Komissar wrote: 28 Nov 2019 13:50 Плюс за знание библиотек, но с учетом того, что у brrdrr были комментарии и дебаггинг распечатки в коде, у вас ненамного короче получилось, ну и на сортировку вы забили.
С сортировкой код будет на одну строчку длиннее:

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);
    }
Какой практический смысл несут коменты в коде у brrdrr? Дают автору возможность самореализоваться в эпистолярном жанре?
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Найти ответы in Java

Post by Komissar »

Я к тому, что код brrdrr не намного длиннее вашего, если убрать комментарии. После рассказов о невероятной технической крутости вас и вашей команды я, честно, ожидал большего.

Return to “Вопросы и новости IT”