Author: Nicholas Prado <nmprado@nzen.ws>
Date: Fri Dec 4 04:07:53 UTC 2020
Parent: ca42cf8d3069c13756a8e4dc16409e4a120fb582
Log message:
feat 20 03 iterates over the original strings
I invested in extracting the slope section because a) I misread
the prompt and thought we had to iterate over all of them (though
this was before I sat to type) and b) noticed a hint that we would
need to iterate over different slopes.
I am ambivalent that this was still managable today. Hopefully I'm
out tomorrow.
1: diff --git a/src/java/Exercise200301.java b/src/java/Exercise200301.java
2: new file mode 100644
3: index 0000000..f0a02e3
4: --- /dev/null
5: +++ b/src/java/Exercise200301.java
6: @@ -0,0 +1,113 @@
7: +
8: +import java.awt.Point;
9: +import java.io.IOException;
10: +import java.nio.file.Files;
11: +import java.nio.file.InvalidPathException;
12: +import java.nio.file.Path;
13: +import java.nio.file.Paths;
14: +import java.util.HashSet;
15: +import java.util.LinkedList;
16: +import java.util.List;
17: +import java.util.Map;
18: +import java.util.Set;
19: +import java.util.TreeMap;
20: +
21: +public class Exercise200301
22: +{
23: + private static final char tree = '#', ground = '.';
24: +
25: + public static void main( String args[] )
26: + {
27: + final String here = "e20011.m ";
28: + if ( args.length < 1 )
29: + {
30: + throw new RuntimeException( here +"add a filename argument" );
31: + }
32: + String userSaysFile = args[ 0 ];
33: + List<String> fileLines = new LinkedList<>();
34: + try
35: + {
36: + Path where = Paths.get( userSaysFile );
37: + fileLines = Files.readAllLines( where );
38: + }
39: + catch ( IOException | InvalidPathException ie )
40: + {
41: + System.err.println( here +"couldn't read file "+ userSaysFile +" because "+ ie );
42: + return;
43: + }
44: + /*
45: + - interpretation of spec -
46: + */
47: + Point slope = new Point( 3, 1 );
48: + int validCount = treesInPath( fileLines, slope );
49: + System.out.println( here +"input has "+ validCount +" valid trees" );
50: + }
51: +
52: +
53: + private static int treesInPath(
54: + List<String> map,
55: + Point slope
56: + ) {
57: + final String here = "e20031.m ";
58: + int trees = 0, times = 500;
59: + for ( Point ind = new Point( 0, 0 );
60: + ind.y < map.size() && times > 0;
61: + ind = nextPosition( map, ind, slope ) )
62: + {
63: + char collideWith = map.get( ind.y ).charAt( ind.x );
64: + if ( collideWith == tree )
65: + {
66: + trees += 1;
67: + System.out.println( here +"tree at "+ ind );
68: + }
69: + times--;
70: + }
71: +if ( times == 0 )
72: + System.out.println( here +"quit by count, " );
73: + return trees;
74: + }
75: +
76: +
77: + private static Point nextPosition(
78: + List<String> map,
79: + Point ind,
80: + Point slope
81: + ) {
82: + int nextY = ind.y + slope.y;
83: + int nextX = ind.x + slope.x;
84: + if ( nextX >= map.get( 0 ).length() )
85: + {
86: + nextX = nextX - map.get( 0 ).length();
87: + }
88: + ind.setLocation( nextX, nextY );
89: + return ind;
90: + }
91: +
92: +}
93: +
94: +
95: +
96: +
97: +
98: +
99: +
100: +
101: +
102: +
103: +
104: +
105: +
106: +
107: +
108: +
109: +
110: +
111: +
112: +
113: +
114: +
115: +
116: +
117: +
118: +
119: +
120: diff --git a/src/java/Exercise200302.java b/src/java/Exercise200302.java
121: new file mode 100644
122: index 0000000..1b66c53
123: --- /dev/null
124: +++ b/src/java/Exercise200302.java
125: @@ -0,0 +1,122 @@
126: +
127: +import java.awt.Point;
128: +import java.io.IOException;
129: +import java.nio.file.Files;
130: +import java.nio.file.InvalidPathException;
131: +import java.nio.file.Path;
132: +import java.nio.file.Paths;
133: +import java.util.HashSet;
134: +import java.util.LinkedList;
135: +import java.util.List;
136: +import java.util.Map;
137: +import java.util.Set;
138: +import java.util.TreeMap;
139: +
140: +public class Exercise200302
141: +{
142: + private static final char tree = '#', ground = '.';
143: +
144: + public static void main( String args[] )
145: + {
146: + final String here = "e20011.m ";
147: + if ( args.length < 1 )
148: + {
149: + throw new RuntimeException( here +"add a filename argument" );
150: + }
151: + String userSaysFile = args[ 0 ];
152: + List<String> fileLines = new LinkedList<>();
153: + try
154: + {
155: + Path where = Paths.get( userSaysFile );
156: + fileLines = Files.readAllLines( where );
157: + }
158: + catch ( IOException | InvalidPathException ie )
159: + {
160: + System.err.println( here +"couldn't read file "+ userSaysFile +" because "+ ie );
161: + return;
162: + }
163: + /*
164: + - interpretation of spec -
165: + */
166: + List<Point> directions = new LinkedList<>();
167: + directions.add( new Point( 1, 1 ) );
168: + directions.add( new Point( 3, 1 ) );
169: + directions.add( new Point( 5, 1 ) );
170: + directions.add( new Point( 7, 1 ) );
171: + directions.add( new Point( 1, 2 ) );
172: + int validCount = 1;
173: + for ( Point slope : directions )
174: + {
175: + validCount *= treesInPath( fileLines, slope );
176: + }
177: + System.out.println( here +"input has "+ validCount +" valid trees" );
178: + }
179: +
180: +
181: + private static int treesInPath(
182: + List<String> map,
183: + Point slope
184: + ) {
185: + final String here = "e20031.m ";
186: + int trees = 0, times = 500;
187: + for ( Point ind = new Point( 0, 0 );
188: + ind.y < map.size() && times > 0;
189: + ind = nextPosition( map, ind, slope ) )
190: + {
191: + char collideWith = map.get( ind.y ).charAt( ind.x );
192: + if ( collideWith == tree )
193: + {
194: + trees += 1;
195: + System.out.println( here +"tree at "+ ind );
196: + }
197: + times--;
198: + }
199: +if ( times == 0 )
200: + System.out.println( here +"quit by count, " );
201: + return trees;
202: + }
203: +
204: +
205: + private static Point nextPosition(
206: + List<String> map,
207: + Point ind,
208: + Point slope
209: + ) {
210: + int nextY = ind.y + slope.y;
211: + int nextX = ind.x + slope.x;
212: + if ( nextX >= map.get( 0 ).length() )
213: + {
214: + nextX = nextX - map.get( 0 ).length();
215: + }
216: + ind.setLocation( nextX, nextY );
217: + return ind;
218: + }
219: +
220: +}
221: +
222: +
223: +
224: +
225: +
226: +
227: +
228: +
229: +
230: +
231: +
232: +
233: +
234: +
235: +
236: +
237: +
238: +
239: +
240: +
241: +
242: +
243: +
244: +
245: +
246: +
247: +
248: diff --git a/src/res/20_03_example.txt b/src/res/20_03_example.txt
249: new file mode 100644
250: index 0000000..8f551de
251: --- /dev/null
252: +++ b/src/res/20_03_example.txt
253: @@ -0,0 +1,11 @@
254: +..##.......
255: +#...#...#..
256: +.#....#..#.
257: +..#.#...#.#
258: +.#...##..#.
259: +..#.##.....
260: +.#.#.#....#
261: +.#........#
262: +#.##...#...
263: +#...##....#
264: +.#..#...#.#
265: \ No newline at end of file
266: diff --git a/src/res/20_03_input.txt b/src/res/20_03_input.txt
267: new file mode 100644
268: index 0000000..1c7e862
269: --- /dev/null
270: +++ b/src/res/20_03_input.txt
271: @@ -0,0 +1,323 @@
272: +.........###......#...#.......#
273: +.#.#...........#..#..#.........
274: +#.......#.................#....
275: +.........#.#.........#......###
276: +.....#......##...##............
277: +...##...#......#.....#.....##..
278: +#.#..#....#...#....#......#....
279: +........##.....#.....#.#.......
280: +......#.....#......#...##.#....
281: +...####...#.......##.....#.#...
282: +.........#....#......##........
283: +..##...........###.#...........
284: +.....#............#............
285: +#.#..#..##........#.....#..#...
286: +.....................#....##..#
287: +...........##.....###...#.#.#..
288: +..#......#...........#.........
289: +.##.##...#...#......##.#.......
290: +......#..#......#.#.#..#.#.....
291: +........#.#..#..........#...#.#
292: +...........##...........#....#.
293: +...........#...##.#............
294: +.......#...........#...........
295: +.......#......#..#...#....#..#.
296: +..#.....#.#....#.#......#...#.#
297: +.#..........###..#....#........
298: +........##..#..#...#..#....#..#
299: +#..........#...#..#.#........#.
300: +..#.#........##.##....##.#.....
301: +#.##....#...#.......#.#..#....#
302: +......##...#.#.#.#.....#....#..
303: +..........#..............#.....
304: +....................###.#......
305: +#.....#...#...#.#.......#....#.
306: +.......#..#...................#
307: +........##.##........#......#..
308: +...#...##.#...#...........#....
309: +..#.........#...#....##......#.
310: +......#..............#..#..#.#.
311: +.....##...#...#...##....#......
312: +#.#....#...#......##.....#...##
313: +.#...#.#..................#....
314: +#.##.....#......#..........#...
315: +..#..#.......#.................
316: +..#.....#.........#........#...
317: +.......#...##.##.#..#..##.#..#.
318: +#.............#.........#.#....
319: +..#..##..........#..#..##.#.#..
320: +.#......#.......#...#.....##.#.
321: +.....#......#...#...........###
322: +..........#.........#.....#....
323: +.....#..........#.......##...#.
324: +......#..#..#..............#...
325: +.#.####..#...##...#.#..........
326: +..#....#.......#........#.....#
327: +....#.##.....#..#.....#.#.#..#.
328: +.......#..#..##.......#........
329: +.#.....#...........#.....#.....
330: +........#..........##..##.#....
331: +.#.....#........#.....#..#.....
332: +..#..........#...#......##..#..
333: +.#............#.........#....#.
334: +........#..###.......#.....###.
335: +##.#...#.#..#..#..#.#.##...#...
336: +.#....#...#..#......##.........
337: +.............##.....##.........
338: +.....##.#..###.#....#...#...#.#
339: +#........#...#......#...#.##...
340: +#....#......#.....###.##.#.....
341: +.....#..#.#.##....#..##.....##.
342: +....#...#...#..........##......
343: +..........#......#...#.....##..
344: +.....##....##.#.............#.#
345: +#.........#.##.............#..#
346: +.....#.........##.#...#.#.#....
347: +..........#..#......#..#.....#.
348: +....#....#....#....#.......###.
349: +....#...#..##....#..##..#...##.
350: +.###......#...........###......
351: +#..................####.#....#.
352: +#....#.#.....#.#....#..#.......
353: +...#......#....##......#..#..#.
354: +#.#...#.##.....#.#.......##..#.
355: +.........##.................#..
356: +#..##.#....#.#.............#...
357: +....................####.#.#..#
358: +.......#..#...#..#..#.....#...#
359: +.....#.#.#........#....#...##..
360: +......#..#....#......#..##.....
361: +............#......##.#....#..#
362: +...#..........#..#...........#.
363: +..........#.............###....
364: +....##.#.#......#.#..#....##..#
365: +..#..........#........#......#.
366: +..#...........####......##..#.#
367: +...##......##...#..#.##........
368: +.....#...#.....##.....###..##..
369: +.#.##.....#....##....#.........
370: +#....##..#.....#.#......#.#....
371: +..#.......#...#....#...#.#.....
372: +...........#.........#.........
373: +..#..#....##..#....#....#.....#
374: +.......#..#....##....#.........
375: +#.........#...........##....##.
376: +#........#.#...............##..
377: +#...##.#...............#.......
378: +#....#..#......#..#.###...##..#
379: +..#.........#.#......#.....#..#
380: +......#...........##........##.
381: +.#.........#................#..
382: +#...#...............#...#....#.
383: +.#.#......##.........#.#.......
384: +..........#....................
385: +.#.....#..#...#.#.#.......#...#
386: +..#..........#.................
387: +.#.#.....#.#......#...#.....##.
388: +.....#.#..##...##..#..###...#..
389: +......#......#.#......#.##.....
390: +#.#......#...#.......#....#....
391: +..........#....#.#..#.....##...
392: +#...........#.#....#.##....#.#.
393: +#.#....#..#.........###....#...
394: +..............#..##.......#....
395: +.......................#.##.#..
396: +##...............##....#..#.#..
397: +.#.#..#.##...#.............#...
398: +...#...........#............#..
399: +..#......#........##....#.#.##.
400: +.#.#..#........#....#....#....#
401: +.#.....#.##....#.....#..#...#..
402: +......#...#..........#..###....
403: +..#.#.......#........#........#
404: +.......##.####..........#......
405: +.#.#..#......##..#.........#..#
406: +..#...##.#.......#...#.##...#.#
407: +#.#..........#..#.#.#..........
408: +.....#......#............#.....
409: +........###...#.......#........
410: +.....#.##....#....#............
411: +...#.#....##.....#.....#.......
412: +..#.............#......#.......
413: +.#....#...#....##..#......#....
414: +..#.....#.#............#.......
415: +......#........##.........#...#
416: +.......#........#..#.#.#...##.#
417: +#....#...#..#.......#....##....
418: +#...##.#.#.....#.......#.......
419: +.....#........#.#.....#...##...
420: +..#....#..##......#.#.....#...#
421: +....#.....#......#.....#.......
422: +#.#....#......#...##...........
423: +..#.......#...#...............#
424: +........#........#.............
425: +#.#.#......#...#..#..........#.
426: +.##...#.........#........#..#..
427: +#.#.#...#.#.......#.....#...#..
428: +...#..............#..........#.
429: +#.#...#.###.............#......
430: +................#.....###.##.#.
431: +.......#..........#....#..#....
432: +......##....#..#..##...........
433: +...#...#.....######.......#....
434: +..##.....##.#...#.........#.#.#
435: +.......#...#..#.#.#...........#
436: +........###.............#...#.#
437: +#.....#.........#.............#
438: +..#...#.....#..................
439: +.....#....#.....#......#.#....#
440: +...#....#........##...#.......#
441: +...##.#...#.....#..............
442: +..#.##....##..#.........#......
443: +.....#..#.#....#...#......#.#..
444: +...........##..##...#..#..###..
445: +#...........#.........####....#
446: +.#...........#...........###...
447: +........#................#.....
448: +.....#....#............#....#.#
449: +...#...#.......#...............
450: +#.....##.#.......#.#...........
451: +#.......#.#.#.#..#...#.........
452: +....####.#...#.#......#.....##.
453: +...##...#.....#.#......#..#....
454: +..........#..#....#......###...
455: +...................#....##...#.
456: +....#......#........#...##..#..
457: +##...#.........#.#......#......
458: +#........#...#....#......#.....
459: +#..#.......#...............##..
460: +......##......#...........##.#.
461: +......#..#....#....#.##........
462: +..#....#..#.#.###....#.........
463: +.#......#..#..............#....
464: +.#..........#...#..#.#...#.....
465: +....#......#..#......#....#....
466: +...##.....#............####..#.
467: +......#.#...#....#..#...#..#.#.
468: +......##.......................
469: +#.##........#...........####..#
470: +.....#......#.......#.#....#...
471: +#.......#....#.....#....#...##.
472: +.....#..##.#...........#..#...#
473: +...........#.##.#.#...#.#..#...
474: +..#.......#.#....#..#..........
475: +...#.......##..#.............#.
476: +....#..#....#....#...#....#....
477: +#......#.#...##..........#..#..
478: +..#.#.......#.........#......#.
479: +#...............#.............#
480: +....##..#......................
481: +.##....#............#......#...
482: +.......#....#..##......##......
483: +#..##.....#..#..........#......
484: +...#.........#.......#..##.....
485: +....#.##.....#.#...#...#.....#.
486: +##...........#.#..#...#.#......
487: +....#.............##...#.#..#..
488: +...#....#......................
489: +#..#...##.#.......#.##..#.###..
490: +...##.#.#...##........##...#...
491: +......##..#..#.....#..#.#..#...
492: +#.......##...............##.#..
493: +.##......#..#....#...##..#..#.#
494: +##.........##..#...#.....##....
495: +...#..........#...#..##.#......
496: +..##.#........#...#..........##
497: +.......................##.#....
498: +....#...#...#..###.#.......#.##
499: +....#....#.#..........#.##.....
500: +..#..........##...#....#.......
501: +.....#.....#.....#..#.........#
502: +..##..##..#..#....#..#.......##
503: +.............#............##...
504: +....#.#.#.......###.........#..
505: +...##.#..........#.#...#.#.....
506: +.#........#..#.#.#..#..........
507: +...##...#.....##.......#..#..#.
508: +...#......#..#.......##.#.#....
509: +.........#.........##........#.
510: +.........##..................##
511: +....##.....#................#..
512: +....#..................##...#.#
513: +.........#..............#......
514: +...#......#..#..#....#..#...##.
515: +.#.##......##...#.#......#.#...
516: +...#.#...###....#...#.#..#....#
517: +....#..#.......#.....#..##.#.#.
518: +#.#.#..#.......#####.#..##..#..
519: +#..........#.....#..#.#..#.....
520: +.#......#...#..#.#..#..#.......
521: +...#....##...#..........#.##.#.
522: +#.##..#...#..................#.
523: +......#.###..#..#..#.......#...
524: +...#....#...#..#............###
525: +#.........#........#.......#...
526: +...#..#.................#....##
527: +...#.#.............##......#...
528: +##....#.##.............##......
529: +#............#..#..#.....#.....
530: +....#........#...#.....#.#...##
531: +..#.##..#.....................#
532: +#.#........#...#..#...#.#......
533: +...#..#...........##.....#.....
534: +......#.#....#..##...#.....#...
535: +......#......#.###..##.........
536: +....#.......#...##.##.....#....
537: +#.....##....#........#..##.....
538: +.#..#..#..#..#.#...#...#.......
539: +.......##...#......#.........#.
540: +.#..##....#.....#...........##.
541: +.......##....#.#........#......
542: +..#.#.#....#...................
543: +.#...#.......#...#.#......#....
544: +..##.##..##...........###......
545: +#...#......#.......#...........
546: +#....##.#.......#.........#....
547: +.............##.#.#..#...#...#.
548: +..##.##...........#.........##.
549: +#.#...#..........#.#....#....##
550: +.....#.....#..##..#............
551: +#.........#.........#.#...##..#
552: +...#.#.....#.........###..#....
553: +..#.#.##.#...................#.
554: +......####....#.......#.......#
555: +.........#..#..#....#..##......
556: +....#..........#...##........#.
557: +..........#..#....#.....#....#.
558: +.#.#.................#....#....
559: +.......#......#.....#...##.....
560: +....#..............#...........
561: +###...........##.#...........#.
562: +...####.......#...#....#.#...#.
563: +..##.#................#........
564: +...#..#....#.....#.....##..#...
565: +##.#....#....##..........#.#..#
566: +...#....#.....#................
567: +..#...#....#..#..#.##.##..#....
568: +....#....#.##.....#...#......#.
569: +......#................#..#..#.
570: +...##..#...#....#.#.....#..#...
571: +#...#..............#.#.....#.#.
572: +....#.........#.##...#.#....#..
573: +..................#..##.#......
574: +.#.....#.....#.............#..#
575: +..........####....###..##...#..
576: +......#........#...#......##..#
577: +#......#.#..........#....#.#...
578: +###................#.#....#....
579: +#..#.##.#.............#..#.....
580: +.....#............#.....##.....
581: +....#.....#....#.........#.....
582: +#..#...........###.#....#......
583: +..#............##...#........##
584: +..#....#..#....#.....#.......#.
585: +..#..#.#.#.##.#..#...#.....#...
586: +..........#..#.................
587: +...#.#......#..##........#.....
588: +...............#...............
589: +#.......#.......#....#.........
590: +#...........#....#.............
591: +....#..#..........#....#..##...
592: +.........#.#.#.........#......#
593: +.....#...##.....#.#.......#...#
594: +.........#....#...#.......#....