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