Advertisement
Guest User

aocwires2

a guest
Dec 4th, 2019
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.75 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.HashMap;
  3. import java.util.Scanner;
  4.  
  5. public class AOC {
  6.  
  7. static class Node{
  8. int x, y, d;
  9. }
  10.  
  11. static String rightWire = "R1003,U476,L876,U147,R127,D10,R857,U199,R986,U311,R536,D930,R276,U589,L515,D163,L660,U69,R181,D596,L37,D359,R69,D50,L876,D867,L958,U201,R91,D127,R385,U646,L779,D309,L577,U535,R665,D669,L640,D50,L841,D32,R278,U302,L529,U679,R225,U697,R94,D205,L749,U110,L132,U664,R122,U476,R596,U399,R145,U995,R821,U80,L853,U461,L775,U57,R726,U299,L706,U500,R520,U608,L349,D636,L352,U617,R790,U947,L377,D995,R37,U445,L706,D133,R519,D194,L473,U330,L788,D599,L466,D100,L23,D68,R412,U566,R43,U333,L159,D18,L671,U135,R682,D222,R651,U138,R904,U546,R871,U264,R133,U19,R413,D235,R830,D376,R530,U18,L476,D120,L190,D252,R105,D874,L544,D705,R351,U527,L30,U283,L971,U199,L736,U36,R868,D297,L581,D888,L786,D865,R732,U394,L786,U838,L648,U434,L962,D862,R897,U116,L661,D848,L829,U930,L171,U959,R416,D855,L13,U941,R122,D678,R909,U536,R206,U39,L222,D501,L133,U360,R703,D928,R603,U793,L601,D935,R482,U444,L23,U331,L427,D349,L949,U147,L253,U757,R242,D307,R182,D371,L174,U518,L447,D851,R661,U432,R334,D240,R937,U625,L49,D105,R727,U504,L520,D126,R331,U176,L81,D168,L158,U774,L314,U623,R39,U743,R162,D646,R583,U523,R899,D419,L635,U958,R426,U482,L513,D624,L37,U669,L611,U167,L904,U163,L831,U222,L320,U561,R126,D7,L330,D313,R698,D473,R163,U527,R161,U823,L409,D734,L507,U277,L821,D341,R587,U902,R857,U386,R858,D522,R780,D754,L973,U1,R806,D439,R141,D621,R983,D546,R899,U566,L443,D147,R558,D820,R181,U351,R625,U60,R521,U225,R757,U673,L267,D624,L306,U531,L202,U854,L138,D725,R364,D813,L787,U183,R98,D899,R945,D363,L797";
  12. static String leftWire = "L993,D9,L41,D892,L493,D174,R20,D927,R263,D65,R476,D884,R60,D313,R175,U4,L957,U514,R821,U330,L973,U876,L856,D15,L988,U443,R205,D662,R753,U74,R270,D232,R56,D409,R2,U257,R198,U644,L435,U16,L914,D584,L909,D222,R919,U649,R77,U213,R949,D272,R893,U717,L939,U310,R637,D912,L347,D755,L895,D305,R460,D214,L826,D847,R680,U821,L688,U472,R721,U2,L755,D84,L716,U466,L833,U12,L410,D453,L462,D782,R59,U491,L235,D827,L924,U964,R443,D544,L904,D383,R259,D12,L538,D194,R945,U356,L85,D362,R672,D741,L556,U696,L994,U576,L201,D912,L282,D328,R322,D277,L269,U799,R150,U584,L479,U69,R313,U628,R114,D870,R660,D929,R964,U412,L790,U948,R949,D955,L555,U478,R967,D850,R569,D705,R30,U434,L948,U711,L507,D729,L256,U740,L60,D127,L95,U93,R260,D74,L267,D637,L658,U831,R882,D798,L173,U835,R960,D583,R411,U967,L515,U302,L456,D322,R963,U788,L516,U845,L131,U741,L246,D215,R233,U621,R420,D679,L8,D962,R514,U51,L891,U705,L699,U909,R408,D664,R324,U846,R503,U769,R32,D495,R154,U403,R145,U581,L708,D315,R556,U582,R363,U495,L722,U210,R718,U927,R994,D136,R744,U107,R316,D222,R796,U755,L69,D877,R661,D378,L215,D105,R333,D780,R335,D691,L263,U603,L582,U95,L140,D651,R414,D420,L497,U106,L470,D826,R706,D166,R500,D258,L225,U310,L866,U720,R247,D500,L340,U726,R296,U16,R227,U839,R537,U125,R700,U372,L310,D444,R214,D121,R151,U351,L767,D815,R537,U392,L595,U178,L961,D366,L216,U392,R645,U195,R231,D734,L441,D680,L226,D212,L142,U131,L427,D159,L538,D270,R553,D841,R115,U346,R673,D421,L403,D320,L296,U831,L655,U690,L105,U474,L687";
  13.  
  14. public static void main(String[] args)
  15. {
  16.  
  17. ArrayList<Node> matches = new ArrayList<Node>();
  18. ArrayList<Node> matches2 = new ArrayList<Node>();
  19.  
  20. HashMap<String, Node> grid = new HashMap<String, Node>();
  21.  
  22. Scanner s = new Scanner(leftWire).useDelimiter(",");
  23.  
  24. int totaldist=0;int x=0,y=0;
  25. while(s.hasNext())
  26. {
  27. String temp = s.next();
  28. int dist = getDist(temp);
  29. if(temp.charAt(0)=='R')
  30. {
  31. for(int i=0;i<dist;i++)
  32. {
  33. Node n = new Node();
  34. n.x=x+i; n.y=y;
  35. n.d=totaldist+i;
  36. if(!grid.containsKey(""+n.x+"," + n.y))
  37. grid.put(""+n.x+","+n.y, n);
  38. }
  39. x=x+getDist(temp);
  40. }
  41. if(temp.charAt(0)=='L')
  42. {
  43. for(int i=0;i<dist;i++)
  44. {
  45. Node n = new Node();
  46. n.x=x-i; n.y=y;
  47. n.d=totaldist+i;
  48. if(!grid.containsKey(""+n.x+"," + n.y))
  49. grid.put(""+n.x+","+n.y, n);
  50. }
  51. x=x-getDist(temp);
  52. }
  53. if(temp.charAt(0)=='U')
  54. {
  55. for(int i=0;i<dist;i++)
  56. {
  57. Node n = new Node();
  58. n.x=x; n.y=y+i;
  59. n.d=totaldist+i;
  60. if(!grid.containsKey(""+n.x+"," + n.y))
  61. grid.put(""+n.x+","+n.y, n);
  62. }
  63. y=y+getDist(temp);
  64. }
  65. if(temp.charAt(0)=='D')
  66. {
  67. for(int i=0;i<dist;i++)
  68. {
  69. Node n = new Node();
  70. n.x=x; n.y=y-i;
  71. n.d=totaldist+i;
  72. if(!grid.containsKey(""+n.x+"," + n.y))
  73. grid.put(""+n.x+","+n.y, n);
  74. }
  75. y=y-getDist(temp);
  76. }
  77. totaldist+=dist;
  78.  
  79. }
  80. s.close();
  81. Scanner v = new Scanner(rightWire).useDelimiter(",");
  82. grid.remove(""+0+","+0);
  83. totaldist=0;
  84. x=0; y=0;
  85. while(v.hasNext())
  86. {
  87. String temp = v.next();
  88. int dist = getDist(temp);
  89. if(temp.charAt(0)=='R')
  90. {
  91. for(int i=0;i<dist;i++)
  92. {
  93. Node n = new Node();
  94. n.x=x+i; n.y=y; //might get doubles here, shouldn't matter
  95. n.d=totaldist+i;
  96.  
  97. if(grid.containsKey(""+n.x+"," +n.y))
  98. {
  99.  
  100. matches.add(n);
  101. matches2.add(grid.get(""+n.x+"," + n.y));
  102. }
  103. }
  104. x=x+getDist(temp);
  105.  
  106. }
  107. if(temp.charAt(0)=='L')
  108. {
  109. for(int i=0;i<dist;i++)
  110. {
  111. Node n = new Node();
  112. n.x=x-i; n.y=y;
  113. n.d=totaldist+i;
  114.  
  115. if(grid.containsKey(""+n.x+"," +n.y))
  116. {
  117. matches.add(n);
  118. matches2.add(grid.get(""+n.x+"," + n.y));
  119. }
  120. }
  121. x=x-getDist(temp);
  122. }
  123. if(temp.charAt(0)=='U')
  124. {
  125. for(int i=0;i<dist;i++)
  126. {
  127. Node n = new Node();
  128. n.x=x; n.y=y+i;
  129. n.d=totaldist+i;
  130. if(grid.containsKey(""+n.x+"," +n.y))
  131. {
  132. matches.add(n);
  133. matches2.add(grid.get(""+n.x+"," + n.y));
  134. }
  135. }
  136. y=y+getDist(temp);
  137. }
  138. if(temp.charAt(0)=='D')
  139. {
  140. for(int i=0;i<dist;i++)
  141. {
  142. Node n = new Node();
  143. n.x=x; n.y=y-i;
  144. n.d=totaldist+i;
  145. if(grid.containsKey(""+n.x+"," +n.y))
  146. {
  147. matches.add(n);
  148. matches2.add(grid.get(""+n.x+"," + n.y));
  149. }
  150. }
  151. y=y-getDist(temp);
  152. }
  153. totaldist+=dist;
  154. }
  155.  
  156. int closest = Math.abs(matches.get(0).x) + Math.abs(matches.get(0).y);
  157.  
  158. for(Node n:matches)
  159. {
  160. int i = Math.abs(n.x) + Math.abs(n.y);
  161. if(i<closest)
  162. closest=i;
  163. }
  164. System.out.println("Closest: " + closest);
  165.  
  166. int shortest=matches.get(0).d + matches2.get(0).d;
  167. for(int i=0;i<matches.size();i++)
  168. {
  169. int d = matches.get(i).d + matches2.get(i).d;
  170. if(d<shortest)
  171. shortest=d;
  172. }
  173. System.out.println("Shortest found: " + shortest);
  174.  
  175. v.close();
  176.  
  177. }
  178.  
  179. static int getDist(String s)
  180. {
  181. String f= new String();
  182. for(int i=0;i<s.length();i++)
  183. {
  184. String tt = ""+s.charAt(i);
  185. if(tt.matches("\\d+"))
  186. {
  187. f=f+tt;
  188. }
  189. }
  190. return new Integer(f);
  191. }
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement