GreetingCard problem with CoordinatesGet Rectangle Count from Given List of Co-ordinatesRacetrack in...

How do I nest cases?

Flux received by a negative charge

How does the reference system of the Majjhima Nikaya work?

How should I respond when I lied about my education and the company finds out through background check?

Should I install hardwood flooring or cabinets first?

Global amount of publications over time

Extending the spectral theorem for bounded self adjoint operators to bounded normal operators

Do Legal Documents Require Signing In Standard Pen Colors?

Did US corporations pay demonstrators in the German demonstrations against article 13?

Why did the HMS Bounty go back to a time when whales are already rare?

Should I stop contributing to retirement accounts?

How much character growth crosses the line into breaking the character

How can I check how many times an iPhone or iPad has been charged?

Engineer refusing to file/disclose patents

Has Darkwing Duck ever met Scrooge McDuck?

Why is it that I can sometimes guess the next note?

Perfect Cadence in minor key

THT: What is a squared annular “ring”?

When were female captains banned from Starfleet?

Delete database accidentally by a bash, rescue please

Interest Rate Futures Question from Hull, 8e

Freedom of speech and where it applies

How can Trident be so inexpensive? Will it orbit Triton or just do a (slow) flyby?

Have I saved too much for retirement so far?



GreetingCard problem with Coordinates


Get Rectangle Count from Given List of Co-ordinatesRacetrack in Java“Tractor” Python implementationUsing Scanner.nextInt() whilst ignoring rest of lineKattis, Speed limit; read irregular inputHackerrank: KnightL on a ChessboardMars Rover Kata using TDD and SOLIDPython solution to Code Jam's 'Rounding Error'Counting ways to choose vertices that form a right triangleCode Vita: Chakravyuha













3












$begingroup$


This is a practice problem on Kattis



I have exceeded the time limit for the 5th out of 11 test case. Can anyone inspire me what could be done to optimize the code?



Problem Description




Quido plans to send a New Year greeting to his friend Hugo. He has
recently acquired access to an advanced high-precision plotter and he
is planning to print the greeting card on the plotter.



Here’s how the plotter operates. In step one, the plotter plots an
intricate pattern of n dots on the paper. In step two, the picture
in the greeting emerges when the plotter connects by a straight
segment each pair of dots that are exactly 2018 length units
apart.



The plotter uses a special holographic ink, which has a limited
supply. Quido wants to know the number of all plotted segments in the
picture to be sure that there is enough ink to complete the job.



Input



The first line of input contains a positive integer n specifying the
number of plotted points. The following n lines each contain a pair of
space-separated integer coordinates indicating one plotted point. Each
coordinate is non-negative and less than 2^31. There are at most
10^5 points, all of them are distinct.



In this problem, all coordinates and distances are expressed in
plotter length units, the length of the unit in the x-direction and in
the y-direction is the same.



Output



The output contains a single integer equal to the number of pairs of
points which are exactly 2018 length units apart.




Sample input



4
20180000 20180000
20180000 20182018
20182018 20180000
20182018 20182018


Output



4


Here is my code



import java.util.*;

class Coordinates {
int x;
int y;

public Coordinates(int x,int y) {
this.x=x;
this.y=y;
}

public double distanceWith(Coordinates z) {
return Math.hypot((x-z.x),(y-z.y));
}
}

class GreetingCard {
public static void main(String [] args) {
Scanner sc = new Scanner(System.in);
HashSet<Coordinates> set = new HashSet<>();
int count = sc.nextInt();
int total = 0;
for (int i=0;i<count;i++) {
int x = sc.nextInt();
int y = sc.nextInt();
Coordinates curr = new Coordinates(x,y);
if (i!=0) {
total+=findDistances(curr, set);
}
set.add(curr);
}
System.out.println(total);
}

public static int findDistances(Coordinates curr, HashSet<Coordinates> set) {
int total = 0;
for (Coordinates inside : set) {
if (inside.distanceWith(curr)==2018) {
total+=1;
}
}
return total;
}
}









share|improve this question









$endgroup$

















    3












    $begingroup$


    This is a practice problem on Kattis



    I have exceeded the time limit for the 5th out of 11 test case. Can anyone inspire me what could be done to optimize the code?



    Problem Description




    Quido plans to send a New Year greeting to his friend Hugo. He has
    recently acquired access to an advanced high-precision plotter and he
    is planning to print the greeting card on the plotter.



    Here’s how the plotter operates. In step one, the plotter plots an
    intricate pattern of n dots on the paper. In step two, the picture
    in the greeting emerges when the plotter connects by a straight
    segment each pair of dots that are exactly 2018 length units
    apart.



    The plotter uses a special holographic ink, which has a limited
    supply. Quido wants to know the number of all plotted segments in the
    picture to be sure that there is enough ink to complete the job.



    Input



    The first line of input contains a positive integer n specifying the
    number of plotted points. The following n lines each contain a pair of
    space-separated integer coordinates indicating one plotted point. Each
    coordinate is non-negative and less than 2^31. There are at most
    10^5 points, all of them are distinct.



    In this problem, all coordinates and distances are expressed in
    plotter length units, the length of the unit in the x-direction and in
    the y-direction is the same.



    Output



    The output contains a single integer equal to the number of pairs of
    points which are exactly 2018 length units apart.




    Sample input



    4
    20180000 20180000
    20180000 20182018
    20182018 20180000
    20182018 20182018


    Output



    4


    Here is my code



    import java.util.*;

    class Coordinates {
    int x;
    int y;

    public Coordinates(int x,int y) {
    this.x=x;
    this.y=y;
    }

    public double distanceWith(Coordinates z) {
    return Math.hypot((x-z.x),(y-z.y));
    }
    }

    class GreetingCard {
    public static void main(String [] args) {
    Scanner sc = new Scanner(System.in);
    HashSet<Coordinates> set = new HashSet<>();
    int count = sc.nextInt();
    int total = 0;
    for (int i=0;i<count;i++) {
    int x = sc.nextInt();
    int y = sc.nextInt();
    Coordinates curr = new Coordinates(x,y);
    if (i!=0) {
    total+=findDistances(curr, set);
    }
    set.add(curr);
    }
    System.out.println(total);
    }

    public static int findDistances(Coordinates curr, HashSet<Coordinates> set) {
    int total = 0;
    for (Coordinates inside : set) {
    if (inside.distanceWith(curr)==2018) {
    total+=1;
    }
    }
    return total;
    }
    }









    share|improve this question









    $endgroup$















      3












      3








      3


      1



      $begingroup$


      This is a practice problem on Kattis



      I have exceeded the time limit for the 5th out of 11 test case. Can anyone inspire me what could be done to optimize the code?



      Problem Description




      Quido plans to send a New Year greeting to his friend Hugo. He has
      recently acquired access to an advanced high-precision plotter and he
      is planning to print the greeting card on the plotter.



      Here’s how the plotter operates. In step one, the plotter plots an
      intricate pattern of n dots on the paper. In step two, the picture
      in the greeting emerges when the plotter connects by a straight
      segment each pair of dots that are exactly 2018 length units
      apart.



      The plotter uses a special holographic ink, which has a limited
      supply. Quido wants to know the number of all plotted segments in the
      picture to be sure that there is enough ink to complete the job.



      Input



      The first line of input contains a positive integer n specifying the
      number of plotted points. The following n lines each contain a pair of
      space-separated integer coordinates indicating one plotted point. Each
      coordinate is non-negative and less than 2^31. There are at most
      10^5 points, all of them are distinct.



      In this problem, all coordinates and distances are expressed in
      plotter length units, the length of the unit in the x-direction and in
      the y-direction is the same.



      Output



      The output contains a single integer equal to the number of pairs of
      points which are exactly 2018 length units apart.




      Sample input



      4
      20180000 20180000
      20180000 20182018
      20182018 20180000
      20182018 20182018


      Output



      4


      Here is my code



      import java.util.*;

      class Coordinates {
      int x;
      int y;

      public Coordinates(int x,int y) {
      this.x=x;
      this.y=y;
      }

      public double distanceWith(Coordinates z) {
      return Math.hypot((x-z.x),(y-z.y));
      }
      }

      class GreetingCard {
      public static void main(String [] args) {
      Scanner sc = new Scanner(System.in);
      HashSet<Coordinates> set = new HashSet<>();
      int count = sc.nextInt();
      int total = 0;
      for (int i=0;i<count;i++) {
      int x = sc.nextInt();
      int y = sc.nextInt();
      Coordinates curr = new Coordinates(x,y);
      if (i!=0) {
      total+=findDistances(curr, set);
      }
      set.add(curr);
      }
      System.out.println(total);
      }

      public static int findDistances(Coordinates curr, HashSet<Coordinates> set) {
      int total = 0;
      for (Coordinates inside : set) {
      if (inside.distanceWith(curr)==2018) {
      total+=1;
      }
      }
      return total;
      }
      }









      share|improve this question









      $endgroup$




      This is a practice problem on Kattis



      I have exceeded the time limit for the 5th out of 11 test case. Can anyone inspire me what could be done to optimize the code?



      Problem Description




      Quido plans to send a New Year greeting to his friend Hugo. He has
      recently acquired access to an advanced high-precision plotter and he
      is planning to print the greeting card on the plotter.



      Here’s how the plotter operates. In step one, the plotter plots an
      intricate pattern of n dots on the paper. In step two, the picture
      in the greeting emerges when the plotter connects by a straight
      segment each pair of dots that are exactly 2018 length units
      apart.



      The plotter uses a special holographic ink, which has a limited
      supply. Quido wants to know the number of all plotted segments in the
      picture to be sure that there is enough ink to complete the job.



      Input



      The first line of input contains a positive integer n specifying the
      number of plotted points. The following n lines each contain a pair of
      space-separated integer coordinates indicating one plotted point. Each
      coordinate is non-negative and less than 2^31. There are at most
      10^5 points, all of them are distinct.



      In this problem, all coordinates and distances are expressed in
      plotter length units, the length of the unit in the x-direction and in
      the y-direction is the same.



      Output



      The output contains a single integer equal to the number of pairs of
      points which are exactly 2018 length units apart.




      Sample input



      4
      20180000 20180000
      20180000 20182018
      20182018 20180000
      20182018 20182018


      Output



      4


      Here is my code



      import java.util.*;

      class Coordinates {
      int x;
      int y;

      public Coordinates(int x,int y) {
      this.x=x;
      this.y=y;
      }

      public double distanceWith(Coordinates z) {
      return Math.hypot((x-z.x),(y-z.y));
      }
      }

      class GreetingCard {
      public static void main(String [] args) {
      Scanner sc = new Scanner(System.in);
      HashSet<Coordinates> set = new HashSet<>();
      int count = sc.nextInt();
      int total = 0;
      for (int i=0;i<count;i++) {
      int x = sc.nextInt();
      int y = sc.nextInt();
      Coordinates curr = new Coordinates(x,y);
      if (i!=0) {
      total+=findDistances(curr, set);
      }
      set.add(curr);
      }
      System.out.println(total);
      }

      public static int findDistances(Coordinates curr, HashSet<Coordinates> set) {
      int total = 0;
      for (Coordinates inside : set) {
      if (inside.distanceWith(curr)==2018) {
      total+=1;
      }
      }
      return total;
      }
      }






      java programming-challenge time-limit-exceeded






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Mar 17 at 5:58









      Prashin JeevaganthPrashin Jeevaganth

      2175




      2175






















          1 Answer
          1






          active

          oldest

          votes


















          2












          $begingroup$

          Calculating the distance between each pair of points is expensive. Since the coordinates are all integers, you can first calculate which delta-x and delta-y can lead to the distance 2018 at all. Define a function candidates(point, set) that filters the possible candidates. To do this efficiently, group the points by their x coordinate. Then, for a given x, you only have to look at a few of these groups.



          Grouping the points improves performance because grouping has complexity around $mathcal O(n)$, where $n$ is the number of points.



          Afterwards, finding the candidate points is a simple lookup: for each delta in (-2018, -1680, -1118, 0, 1118, 1860, 2018) you need one lookup, which again sums up to $mathcal O(n)$.



          In summary, the number of comparisons will be much less than the $ncdot n$ from your current code.






          share|improve this answer











          $endgroup$













          • $begingroup$
            Strictly speaking, how would you know if a particular arithmetic operation is expensive, after all a comparison is still made even in the filtering process that you suggested, why would it make such a big difference?
            $endgroup$
            – Prashin Jeevaganth
            Mar 17 at 6:27










          • $begingroup$
            I expanded my answer a bit.
            $endgroup$
            – Roland Illig
            Mar 17 at 6:47











          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "196"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f215594%2fgreetingcard-problem-with-coordinates%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2












          $begingroup$

          Calculating the distance between each pair of points is expensive. Since the coordinates are all integers, you can first calculate which delta-x and delta-y can lead to the distance 2018 at all. Define a function candidates(point, set) that filters the possible candidates. To do this efficiently, group the points by their x coordinate. Then, for a given x, you only have to look at a few of these groups.



          Grouping the points improves performance because grouping has complexity around $mathcal O(n)$, where $n$ is the number of points.



          Afterwards, finding the candidate points is a simple lookup: for each delta in (-2018, -1680, -1118, 0, 1118, 1860, 2018) you need one lookup, which again sums up to $mathcal O(n)$.



          In summary, the number of comparisons will be much less than the $ncdot n$ from your current code.






          share|improve this answer











          $endgroup$













          • $begingroup$
            Strictly speaking, how would you know if a particular arithmetic operation is expensive, after all a comparison is still made even in the filtering process that you suggested, why would it make such a big difference?
            $endgroup$
            – Prashin Jeevaganth
            Mar 17 at 6:27










          • $begingroup$
            I expanded my answer a bit.
            $endgroup$
            – Roland Illig
            Mar 17 at 6:47
















          2












          $begingroup$

          Calculating the distance between each pair of points is expensive. Since the coordinates are all integers, you can first calculate which delta-x and delta-y can lead to the distance 2018 at all. Define a function candidates(point, set) that filters the possible candidates. To do this efficiently, group the points by their x coordinate. Then, for a given x, you only have to look at a few of these groups.



          Grouping the points improves performance because grouping has complexity around $mathcal O(n)$, where $n$ is the number of points.



          Afterwards, finding the candidate points is a simple lookup: for each delta in (-2018, -1680, -1118, 0, 1118, 1860, 2018) you need one lookup, which again sums up to $mathcal O(n)$.



          In summary, the number of comparisons will be much less than the $ncdot n$ from your current code.






          share|improve this answer











          $endgroup$













          • $begingroup$
            Strictly speaking, how would you know if a particular arithmetic operation is expensive, after all a comparison is still made even in the filtering process that you suggested, why would it make such a big difference?
            $endgroup$
            – Prashin Jeevaganth
            Mar 17 at 6:27










          • $begingroup$
            I expanded my answer a bit.
            $endgroup$
            – Roland Illig
            Mar 17 at 6:47














          2












          2








          2





          $begingroup$

          Calculating the distance between each pair of points is expensive. Since the coordinates are all integers, you can first calculate which delta-x and delta-y can lead to the distance 2018 at all. Define a function candidates(point, set) that filters the possible candidates. To do this efficiently, group the points by their x coordinate. Then, for a given x, you only have to look at a few of these groups.



          Grouping the points improves performance because grouping has complexity around $mathcal O(n)$, where $n$ is the number of points.



          Afterwards, finding the candidate points is a simple lookup: for each delta in (-2018, -1680, -1118, 0, 1118, 1860, 2018) you need one lookup, which again sums up to $mathcal O(n)$.



          In summary, the number of comparisons will be much less than the $ncdot n$ from your current code.






          share|improve this answer











          $endgroup$



          Calculating the distance between each pair of points is expensive. Since the coordinates are all integers, you can first calculate which delta-x and delta-y can lead to the distance 2018 at all. Define a function candidates(point, set) that filters the possible candidates. To do this efficiently, group the points by their x coordinate. Then, for a given x, you only have to look at a few of these groups.



          Grouping the points improves performance because grouping has complexity around $mathcal O(n)$, where $n$ is the number of points.



          Afterwards, finding the candidate points is a simple lookup: for each delta in (-2018, -1680, -1118, 0, 1118, 1860, 2018) you need one lookup, which again sums up to $mathcal O(n)$.



          In summary, the number of comparisons will be much less than the $ncdot n$ from your current code.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Mar 17 at 6:46

























          answered Mar 17 at 6:25









          Roland IlligRoland Illig

          11.4k11845




          11.4k11845












          • $begingroup$
            Strictly speaking, how would you know if a particular arithmetic operation is expensive, after all a comparison is still made even in the filtering process that you suggested, why would it make such a big difference?
            $endgroup$
            – Prashin Jeevaganth
            Mar 17 at 6:27










          • $begingroup$
            I expanded my answer a bit.
            $endgroup$
            – Roland Illig
            Mar 17 at 6:47


















          • $begingroup$
            Strictly speaking, how would you know if a particular arithmetic operation is expensive, after all a comparison is still made even in the filtering process that you suggested, why would it make such a big difference?
            $endgroup$
            – Prashin Jeevaganth
            Mar 17 at 6:27










          • $begingroup$
            I expanded my answer a bit.
            $endgroup$
            – Roland Illig
            Mar 17 at 6:47
















          $begingroup$
          Strictly speaking, how would you know if a particular arithmetic operation is expensive, after all a comparison is still made even in the filtering process that you suggested, why would it make such a big difference?
          $endgroup$
          – Prashin Jeevaganth
          Mar 17 at 6:27




          $begingroup$
          Strictly speaking, how would you know if a particular arithmetic operation is expensive, after all a comparison is still made even in the filtering process that you suggested, why would it make such a big difference?
          $endgroup$
          – Prashin Jeevaganth
          Mar 17 at 6:27












          $begingroup$
          I expanded my answer a bit.
          $endgroup$
          – Roland Illig
          Mar 17 at 6:47




          $begingroup$
          I expanded my answer a bit.
          $endgroup$
          – Roland Illig
          Mar 17 at 6:47


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f215594%2fgreetingcard-problem-with-coordinates%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          is 'sed' thread safeWhat should someone know about using Python scripts in the shell?Nexenta bash script uses...

          How do i solve the “ No module named 'mlxtend' ” issue on Jupyter?

          Pilgersdorf Inhaltsverzeichnis Geografie | Geschichte | Bevölkerungsentwicklung | Politik | Kultur...