Author: Nicholas Prado <nmprado@nzen.ws>
Date: Sat Dec 4 05:24:18 UTC 2021
Parent: 406692140fa6c7e4fdd7674bc8a4118db9e3030d
Log message:
feat 21 03.1 running total, calc binary
1: diff --git a/src/java/y2021/Exercise210301.java b/src/java/y2021/Exercise210301.java
2: new file mode 100644
3: index 0000000..73a6496
4: --- /dev/null
5: +++ b/src/java/y2021/Exercise210301.java
6: @@ -0,0 +1,105 @@
7: +
8: +import java.io.IOException;
9: +import java.nio.file.*;
10: +import java.util.*;
11: +
12: +public class Exercise210301
13: +{
14: +
15: + public static void main(
16: + String args[]
17: + ) {
18: + final String here = "e210301.m ";
19: + if ( args.length < 1 )
20: + {
21: + throw new RuntimeException( here +"add a filename argument" );
22: + }
23: + String userSaysFile = args[ 0 ];
24: + List<String> fileLines = new LinkedList<>();
25: + try
26: + {
27: + Path where = Paths.get( userSaysFile );
28: + fileLines = Files.readAllLines( where );
29: + }
30: + catch ( IOException | InvalidPathException ie )
31: + {
32: + System.err.println( here +"couldn't read file "+ userSaysFile +" because "+ ie );
33: + return;
34: + }
35: + /*
36: + - interpretation of spec -
37: + gamma is the more common bit, epsilon is the less common bit
38: + put these in a bit set and multiply the resulting binary number
39: + */
40: + Exercise210301.interpretDiagnostic( fileLines );
41: + }
42: +
43: +
44: + private static void interpretDiagnostic(
45: + List<String> fileLines
46: + ) {
47: + final int oneInd = 0, nilInd = oneInd +1;
48: + int[][] bitCounts = new int[ 2 ][ fileLines.get( 0 ).length() ];
49: + for ( int initInd = 0; initInd < bitCounts[ oneInd ].length; initInd++ )
50: + {
51: + bitCounts[ oneInd ][ initInd ] = 0;
52: + bitCounts[ nilInd ][ initInd ] = 0;
53: + }
54: +
55: + // sum bits
56: + for ( String line : fileLines )
57: + {
58: + if ( line.isEmpty() )
59: + continue;
60: + for ( int charInd = 0; charInd < line.length(); charInd++ )
61: + {
62: + if ( line.charAt( charInd ) == '1' )
63: + bitCounts[ oneInd ][ charInd ] += 1;
64: + else // == 0
65: + bitCounts[ nilInd ][ charInd ] += 1;
66: + }
67: + }
68: +
69: + // determine gamma and epsilon
70: + long gamma = 0L, epsilon = 0L, multiplier = 1;
71: + for ( int bitInd = bitCounts[ oneInd ].length -1; bitInd >= 0; bitInd-- )
72: + {
73: + if ( bitCounts[ oneInd ][ bitInd ] > bitCounts[ nilInd ][ bitInd ] )
74: + gamma += multiplier;
75: + else
76: + epsilon += multiplier;
77: + multiplier *= 2;
78: + }
79: +
80: + System.out.println( "\tg"+ gamma +" e"+ epsilon +" t"+ gamma * epsilon );
81: + }
82: +
83: +
84: +}
85: +
86: +
87: +
88: +
89: +
90: +
91: +
92: +
93: +
94: +
95: +
96: +
97: +
98: +
99: +
100: +
101: +
102: +
103: +
104: +
105: +
106: +
107: +
108: +
109: +
110: +
111: +
112: diff --git a/src/res/y2021/21_03_example.txt b/src/res/y2021/21_03_example.txt
113: new file mode 100644
114: index 0000000..665fd57
115: --- /dev/null
116: +++ b/src/res/y2021/21_03_example.txt
117: @@ -0,0 +1,12 @@
118: +00100
119: +11110
120: +10110
121: +10111
122: +10101
123: +01111
124: +00111
125: +11100
126: +10000
127: +11001
128: +00010
129: +01010
130: \ No newline at end of file
131: diff --git a/src/res/y2021/21_03_input.txt b/src/res/y2021/21_03_input.txt
132: new file mode 100644
133: index 0000000..4c5a9e7
134: --- /dev/null
135: +++ b/src/res/y2021/21_03_input.txt
136: @@ -0,0 +1,1000 @@
137: +010011001001
138: +110101011110
139: +111111000101
140: +100111111001
141: +000000011111
142: +111100100111
143: +011111100000
144: +001001011100
145: +101100111011
146: +010001010100
147: +111011001010
148: +010001100011
149: +110110011011
150: +011011000001
151: +001100101100
152: +001000101100
153: +100000001010
154: +001111110000
155: +100101000000
156: +010000100000
157: +010100110000
158: +110000111101
159: +000001011010
160: +000011011001
161: +011000101110
162: +100011100101
163: +110010010100
164: +001110110101
165: +100011000000
166: +110100111100
167: +100100001111
168: +010110011001
169: +000001111101
170: +100001000010
171: +110010101110
172: +000101001100
173: +100100010010
174: +111111101000
175: +001010111001
176: +100101000001
177: +001101101110
178: +101100011010
179: +100100011100
180: +111100000111
181: +101011000100
182: +110000101010
183: +101100111010
184: +101100010101
185: +001011111101
186: +011010000110
187: +001101000011
188: +110001001110
189: +011010101111
190: +001111111011
191: +001100100001
192: +111010110001
193: +011011111100
194: +001011111001
195: +111110111110
196: +011111001011
197: +110110011101
198: +111110011011
199: +101101010010
200: +110111011110
201: +111011110100
202: +111110001011
203: +110100000010
204: +000011111001
205: +100001001111
206: +101110101010
207: +000111111011
208: +011110110001
209: +000011110110
210: +011101001011
211: +010011001110
212: +101110011110
213: +110101010011
214: +111010100011
215: +010101011001
216: +011011010101
217: +000010110100
218: +010011001000
219: +110000010010
220: +101111111001
221: +000100111011
222: +011101010101
223: +100011101111
224: +001010110100
225: +101101000110
226: +011100111011
227: +000100010111
228: +010111100000
229: +100100111110
230: +110110001111
231: +010010010111
232: +001000001110
233: +001110000101
234: +001111101100
235: +101100111110
236: +111011010111
237: +110110111000
238: +000111110001
239: +111001101001
240: +011111001000
241: +001110100011
242: +111100100010
243: +010111101000
244: +111100110101
245: +111100111010
246: +010100110110
247: +100101111100
248: +101000011000
249: +011011111111
250: +010000111100
251: +101111000000
252: +100001011000
253: +110010010110
254: +111000011011
255: +010100110111
256: +100100110011
257: +000010011101
258: +010001100111
259: +011000110011
260: +100101001101
261: +110111011011
262: +000100001000
263: +011111100101
264: +110110111100
265: +100010010100
266: +110110110111
267: +111000111011
268: +101101111000
269: +000000110110
270: +101111111010
271: +000110000001
272: +011111000110
273: +110010100111
274: +111010101111
275: +101011000010
276: +011001010111
277: +010100111110
278: +110001111000
279: +110101101111
280: +011001000110
281: +111000111111
282: +010100100111
283: +100001100001
284: +110101011010
285: +000110111000
286: +101101001010
287: +010110100110
288: +111101101010
289: +110100011111
290: +101010010000
291: +001100001001
292: +001000000101
293: +111000010001
294: +100100101100
295: +001111100011
296: +110110010000
297: +011010111010
298: +011001110110
299: +000000100111
300: +011110111100
301: +011101000101
302: +011000111010
303: +110110100011
304: +101110101000
305: +111001111001
306: +010001000001
307: +111000111100
308: +001011101011
309: +110111111111
310: +010111011101
311: +110010001010
312: +011111000100
313: +011001100110
314: +011100000010
315: +000101100010
316: +000111111010
317: +000000010101
318: +010011110110
319: +000111111101
320: +101101000010
321: +101111010001
322: +011110001101
323: +100000000111
324: +110111111110
325: +000010011110
326: +111000010010
327: +110011110011
328: +101101101011
329: +011011101110
330: +101011011000
331: +000101101001
332: +010110100011
333: +011001100111
334: +011101000011
335: +001110010110
336: +001001010010
337: +111110101001
338: +001111001001
339: +010101001111
340: +100111100001
341: +011100010101
342: +100001110011
343: +010001110001
344: +101011010101
345: +000100000110
346: +100101110001
347: +100101110010
348: +111011011001
349: +100110101101
350: +101100110001
351: +101111100101
352: +001010000000
353: +011000100011
354: +010010001111
355: +011100011101
356: +001100110010
357: +000001011111
358: +101111000011
359: +111000111110
360: +011111100100
361: +100110000000
362: +011110110100
363: +001100101011
364: +110010101010
365: +010011100100
366: +011000010100
367: +001101100101
368: +101010101000
369: +011110011010
370: +010010001100
371: +010100010001
372: +010001011011
373: +110010011001
374: +010111000101
375: +111011010110
376: +111010111100
377: +011111101000
378: +100110010100
379: +010101011011
380: +010111001011
381: +011110010011
382: +011000011110
383: +100001000111
384: +000011111101
385: +111100101001
386: +000000100011
387: +110011100100
388: +101111100001
389: +010011110111
390: +101000001011
391: +001101111001
392: +100111000011
393: +000001000100
394: +100100010000
395: +000010010100
396: +000111111001
397: +000100100010
398: +011011011111
399: +010110011110
400: +001101010011
401: +110111101001
402: +111011101111
403: +100110000100
404: +001101110111
405: +010101101110
406: +011010100011
407: +010010100101
408: +101110110110
409: +111000001011
410: +010001101000
411: +111101100110
412: +100111010001
413: +100010011010
414: +101111001000
415: +011000100000
416: +111000010101
417: +100101011001
418: +011011110011
419: +110011001010
420: +000110010111
421: +101000010011
422: +100100111100
423: +001111000001
424: +001110101101
425: +100111100011
426: +011001011101
427: +111000000000
428: +101001010011
429: +000000111101
430: +000011000000
431: +001011000100
432: +011111111011
433: +000111101111
434: +101100011000
435: +111011000001
436: +101000000111
437: +111110000100
438: +101001110100
439: +010111000001
440: +010010101001
441: +110011001111
442: +100010000010
443: +001001001010
444: +100110010110
445: +101100110010
446: +111000111010
447: +101110011111
448: +110111111001
449: +011010110011
450: +111010100010
451: +110000011000
452: +011000101011
453: +001001000001
454: +000100110010
455: +111100000000
456: +001010100101
457: +101011010110
458: +110001010100
459: +101111010000
460: +000110000000
461: +111110011000
462: +110011110111
463: +011010111001
464: +001100110110
465: +111111111101
466: +001010010001
467: +101001111000
468: +000100110101
469: +000100111111
470: +100000110111
471: +001011100001
472: +001010111000
473: +100010101100
474: +110110000111
475: +100101010010
476: +101001001010
477: +110000011101
478: +111010010101
479: +001011011000
480: +101101101001
481: +010101111011
482: +101010011100
483: +000010000011
484: +001110110110
485: +111100001111
486: +011000000001
487: +000000111010
488: +000110011110
489: +010100110010
490: +000111010000
491: +110111110111
492: +110000000101
493: +011111111111
494: +010101000011
495: +110000101000
496: +000001110001
497: +010001010010
498: +100100010110
499: +000100101110
500: +100011011000
501: +000110010001
502: +100000001001
503: +011010010001
504: +010111101011
505: +101101101100
506: +001101100001
507: +010101111101
508: +001010101110
509: +001110001001
510: +100101110110
511: +001000110011
512: +010001011110
513: +100110011001
514: +010100101110
515: +101101111011
516: +001110110011
517: +000111001111
518: +100100110110
519: +101000111101
520: +100000111100
521: +111000101100
522: +000010010011
523: +001100001101
524: +111101011011
525: +001100101010
526: +001000010001
527: +011001010010
528: +111011101011
529: +010010001101
530: +000100100011
531: +111110001111
532: +110010001111
533: +010001100010
534: +101101110001
535: +101100110011
536: +110111111011
537: +011011010100
538: +011101100101
539: +111111000100
540: +101111001001
541: +010000000100
542: +011001111110
543: +110101111100
544: +111111100001
545: +111011000100
546: +100110100001
547: +101001110000
548: +001011010010
549: +011010001000
550: +110010001110
551: +000101111001
552: +010100100110
553: +011100110100
554: +000011111000
555: +100100000111
556: +110111001000
557: +111100001110
558: +001010101100
559: +010111111011
560: +111010100100
561: +101000011101
562: +110111100110
563: +111100110100
564: +000010011010
565: +000110101111
566: +001101010001
567: +010010000111
568: +011000100001
569: +110111100100
570: +010011100101
571: +011001001011
572: +101101010100
573: +010000010001
574: +001001110001
575: +100010000110
576: +111101111011
577: +011110100101
578: +000101001000
579: +111110011100
580: +000001101110
581: +111101000001
582: +100111000100
583: +011110100011
584: +110000101011
585: +000010011111
586: +000101011001
587: +101100111001
588: +011010000111
589: +000010001011
590: +010001111110
591: +000010111110
592: +101001111110
593: +000110001101
594: +001100101001
595: +000101111011
596: +110000100110
597: +110001000011
598: +000001111100
599: +010100111010
600: +011001000001
601: +110111000010
602: +110011101010
603: +001101101000
604: +100110100011
605: +000010101010
606: +101101111010
607: +111111100111
608: +010101000000
609: +011010011110
610: +011110100100
611: +100000110000
612: +011111011100
613: +011000001110
614: +000010000010
615: +101011010010
616: +010101110000
617: +110001000000
618: +011111111100
619: +101110110010
620: +111111011001
621: +100000110110
622: +111010100111
623: +000001100101
624: +101010010111
625: +010000110110
626: +001000010111
627: +101000100000
628: +100101000011
629: +111100011011
630: +010110001101
631: +101010100110
632: +101111111101
633: +100000111001
634: +011100001000
635: +110111011000
636: +100011101101
637: +101101110011
638: +000010101100
639: +000011000001
640: +011110110110
641: +001100011110
642: +010100111111
643: +011111101011
644: +000011110100
645: +001000100111
646: +010000000101
647: +111001111000
648: +111001010001
649: +001100000001
650: +110110111010
651: +101000011010
652: +010100111001
653: +000100111100
654: +110000100011
655: +100000101011
656: +001001001110
657: +101110111101
658: +110101001110
659: +101110110100
660: +001111110101
661: +100000010101
662: +110000011010
663: +111101100011
664: +101001100100
665: +100010100001
666: +011001010000
667: +111001110000
668: +101000100111
669: +100111011110
670: +000000101111
671: +101000110000
672: +110100001111
673: +001101101010
674: +010011001101
675: +000110011101
676: +101011110000
677: +100010011110
678: +101010100011
679: +000110111011
680: +000101110110
681: +001000000011
682: +011011111010
683: +101011101111
684: +000011010101
685: +010001011101
686: +001010011100
687: +011111111000
688: +111011100111
689: +010111010001
690: +010111101001
691: +101000110100
692: +000001010000
693: +010001000101
694: +000010111101
695: +010101101111
696: +010100001010
697: +100010011101
698: +011111011001
699: +111010001001
700: +000110011011
701: +000001001000
702: +100011011111
703: +110001011000
704: +001101011000
705: +000010001101
706: +100100101111
707: +110101111011
708: +000010010110
709: +001110011010
710: +100110101000
711: +100101101100
712: +110011101101
713: +000011011011
714: +110110010110
715: +001111011110
716: +100111010100
717: +011001000000
718: +011011100001
719: +101100111000
720: +010001000011
721: +010110010110
722: +101010110100
723: +101011100100
724: +110001110101
725: +110110001100
726: +000100011011
727: +110100010000
728: +101010110001
729: +110010111000
730: +110011100101
731: +010000100100
732: +101100000011
733: +111101111101
734: +000100001100
735: +000000101011
736: +101101100000
737: +000111000110
738: +010100001000
739: +011110100001
740: +101101110010
741: +110010001101
742: +011100001001
743: +001100111111
744: +000011011010
745: +001110011110
746: +000010011000
747: +111001100010
748: +110100010001
749: +100001000100
750: +000110100000
751: +111011110111
752: +001011110000
753: +000001100010
754: +001000110001
755: +110001000010
756: +010100000011
757: +010110001111
758: +100111001001
759: +011100011011
760: +011101101111
761: +110000101100
762: +101111011111
763: +101111000110
764: +111001101011
765: +011011101111
766: +010110010101
767: +100001001100
768: +011101110011
769: +000001100001
770: +001000110111
771: +011000110001
772: +111000000111
773: +000100101001
774: +101100101101
775: +000100010110
776: +110010101001
777: +100110011100
778: +000111010011
779: +110100000100
780: +101011001110
781: +010011110001
782: +010110110100
783: +111111001000
784: +010100101111
785: +101111101000
786: +011110101000
787: +001011111000
788: +111110010111
789: +101101010000
790: +111111010100
791: +100111010011
792: +011101010011
793: +100000111110
794: +100010111111
795: +011011100010
796: +111000011101
797: +010100001101
798: +010100001011
799: +001111101001
800: +011001111100
801: +111101000111
802: +000100000000
803: +110101111001
804: +111010011111
805: +010010011101
806: +001101101011
807: +110111101111
808: +001000111001
809: +100010110000
810: +000000000101
811: +101001000001
812: +001110001101
813: +110111001101
814: +111010101110
815: +101001000110
816: +000011100011
817: +010101001101
818: +000111000001
819: +001011011101
820: +111100011101
821: +111101000110
822: +101101001011
823: +101110010101
824: +110100111000
825: +000010101101
826: +000110000110
827: +100001110001
828: +011010010000
829: +110000011111
830: +101011011110
831: +000010001111
832: +100001100101
833: +111010000001
834: +010010001011
835: +011111110100
836: +000001010010
837: +110010010111
838: +011000001000
839: +011101010100
840: +111110111101
841: +111100010100
842: +001101111000
843: +011110000001
844: +111011111001
845: +111011011011
846: +001010010011
847: +011011001110
848: +101101111111
849: +001101011001
850: +010111001000
851: +101110001011
852: +111101100111
853: +001101110010
854: +100001100110
855: +010100010100
856: +110010111011
857: +110011110110
858: +010110011101
859: +101101011001
860: +001111110011
861: +100000001100
862: +110010000000
863: +001011001100
864: +001111111100
865: +110010100101
866: +100000101100
867: +011000101101
868: +000101000010
869: +100100110001
870: +010111111110
871: +101111110100
872: +100001101011
873: +111010100001
874: +100111101010
875: +100110110000
876: +000101011000
877: +100011110011
878: +110100101101
879: +010011011011
880: +011010000001
881: +010000100001
882: +001101111110
883: +110000000010
884: +011010000000
885: +100110111001
886: +101011000011
887: +100101010101
888: +001100110111
889: +001111011001
890: +110000110100
891: +111101000000
892: +110101010100
893: +011100110111
894: +001100100000
895: +111110010110
896: +101010111010
897: +110100011010
898: +110010010010
899: +101000101101
900: +111110010010
901: +100111001000
902: +110000101110
903: +100001101110
904: +100011010110
905: +000101000001
906: +000010110111
907: +000110000100
908: +011101110101
909: +111100011010
910: +000000010100
911: +111100011000
912: +110110101011
913: +001100010101
914: +000010010010
915: +010100110001
916: +001001010110
917: +100110000011
918: +110100100001
919: +000111110010
920: +011000011011
921: +111101001000
922: +001101110101
923: +001101110110
924: +010101101010
925: +110111000011
926: +011110000010
927: +011010011011
928: +111100110001
929: +010001001000
930: +000101100110
931: +010001110111
932: +010000101000
933: +000000100000
934: +100011001011
935: +100001111110
936: +100011111101
937: +101101001110
938: +101110110011
939: +100000011111
940: +001101010111
941: +111101100000
942: +011010001111
943: +101001010010
944: +100010100000
945: +011000100111
946: +101100100000
947: +011011000011
948: +001101001011
949: +001010001011
950: +110100000001
951: +111110001000
952: +101000010101
953: +100011000010
954: +010110101000
955: +011101011111
956: +000110001000
957: +101100000111
958: +110100101001
959: +101001101001
960: +010111000011
961: +011101000001
962: +101011001000
963: +110101001101
964: +010010100110
965: +111001110011
966: +010111010010
967: +010011101100
968: +001110111100
969: +010111011110
970: +000010001100
971: +111000001001
972: +001100101110
973: +111001100011
974: +010000011001
975: +111010111111
976: +010011111111
977: +011100100110
978: +001001101111
979: +001000111110
980: +010101111000
981: +011011001011
982: +101110001100
983: +010100010010
984: +000001011011
985: +000001100100
986: +000000010011
987: +000001110011
988: +010101001000
989: +110110100001
990: +001101101101
991: +011010001110
992: +101011100110
993: +110001100101
994: +110100100110
995: +101010110000
996: +110100110101
997: +011101000100
998: +101110001010
999: +001100110101
1000: +000100011110
1001: +101110111001
1002: +011111101010
1003: +010110001010
1004: +110111110010
1005: +001000101110
1006: +100011001100
1007: +010011010101
1008: +100101001001
1009: +111011001110
1010: +101100000100
1011: +000010111100
1012: +111000101111
1013: +010001001100
1014: +010011110100
1015: +010010110000
1016: +001111101110
1017: +111110110111
1018: +101010000010
1019: +010001101101
1020: +111001000000
1021: +100011001010
1022: +100000111111
1023: +110000001101
1024: +000000111110
1025: +010011100111
1026: +010110110010
1027: +010110010000
1028: +011010001001
1029: +101000110101
1030: +111110001010
1031: +100101001010
1032: +011000001001
1033: +011100010111
1034: +111010111000
1035: +011011001100
1036: +001010000100
1037: +011100001110
1038: +001001110010
1039: +110001000110
1040: +100100010111
1041: +101110001101
1042: +000100001001
1043: +001001011111
1044: +100111100100
1045: +100001100011
1046: +000011011110
1047: +101011111110
1048: +111000011000
1049: +000100001010
1050: +011111010111
1051: +011001010100
1052: +011101110111
1053: +001100000110
1054: +100011011101
1055: +011010111111
1056: +010110100111
1057: +011000111001
1058: +000100111010
1059: +011001001110
1060: +111010001000
1061: +110011000101
1062: +110001101010
1063: +001101100111
1064: +101011101010
1065: +000001001010
1066: +110110010100
1067: +100000000001
1068: +000011011101
1069: +010011101110
1070: +101001100110
1071: +111110011001
1072: +110010100000
1073: +100011000100
1074: +111111000001
1075: +010000100011
1076: +000100010010
1077: +010111000010
1078: +011111101001
1079: +101101100100
1080: +011011000101
1081: +111110010000
1082: +001000000000
1083: +011000001011
1084: +111111110110
1085: +011010110110
1086: +000001111110
1087: +011101001000
1088: +110101010000
1089: +110001010000
1090: +101000100001
1091: +111100001001
1092: +000000000110
1093: +100000011101
1094: +101001011011
1095: +000001001100
1096: +110000010110
1097: +110000001011
1098: +000101101101
1099: +001011000111
1100: +100110011111
1101: +011111011101
1102: +110010101111
1103: +000000000001
1104: +000101110001
1105: +100011000001
1106: +100101010011
1107: +100011010111
1108: +001101100000
1109: +001100111110
1110: +100101000111
1111: +100011110111
1112: +100000110011
1113: +111010000101
1114: +010101110110
1115: +101010001011
1116: +011001100100
1117: +111101110011
1118: +110011000001
1119: +111011101100
1120: +110010011010
1121: +111100010011
1122: +001011011001
1123: +000000000000
1124: +001000001101
1125: +001110010001
1126: +000011010100
1127: +100001010101
1128: +101010001000
1129: +110100011011
1130: +011100111000
1131: +111111111001
1132: +100101001110
1133: +100011100011
1134: +101000101000
1135: +010101110101
1136: +011100011100