2015/06
This commit is contained in:
105
2015/06/Cargo.lock
generated
Normal file
105
2015/06/Cargo.lock
generated
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
[root]
|
||||||
|
name = "06"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aho-corasick"
|
||||||
|
version = "0.5.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "kernel32-sys"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lazy_static"
|
||||||
|
version = "0.1.16"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libc"
|
||||||
|
version = "0.2.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memchr"
|
||||||
|
version = "0.1.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex"
|
||||||
|
version = "0.1.80"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex-syntax"
|
||||||
|
version = "0.3.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thread-id"
|
||||||
|
version = "2.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thread_local"
|
||||||
|
version = "0.2.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "utf8-ranges"
|
||||||
|
version = "0.1.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi"
|
||||||
|
version = "0.2.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-build"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[metadata]
|
||||||
|
"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
|
||||||
|
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
|
||||||
|
"checksum lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "cf186d1a8aa5f5bee5fd662bc9c1b949e0259e1bcc379d1f006847b0080c7417"
|
||||||
|
"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
|
||||||
|
"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
|
||||||
|
"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
|
||||||
|
"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
|
||||||
|
"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
|
||||||
|
"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
|
||||||
|
"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
|
||||||
|
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
|
||||||
|
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
|
||||||
8
2015/06/Cargo.toml
Normal file
8
2015/06/Cargo.toml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "06"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["logaritmisk <anders.e.olsson@gmail.com>"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
lazy_static = "0.1"
|
||||||
|
regex = "0.1"
|
||||||
300
2015/06/input.txt
Normal file
300
2015/06/input.txt
Normal file
@@ -0,0 +1,300 @@
|
|||||||
|
turn on 887,9 through 959,629
|
||||||
|
turn on 454,398 through 844,448
|
||||||
|
turn off 539,243 through 559,965
|
||||||
|
turn off 370,819 through 676,868
|
||||||
|
turn off 145,40 through 370,997
|
||||||
|
turn off 301,3 through 808,453
|
||||||
|
turn on 351,678 through 951,908
|
||||||
|
toggle 720,196 through 897,994
|
||||||
|
toggle 831,394 through 904,860
|
||||||
|
toggle 753,664 through 970,926
|
||||||
|
turn off 150,300 through 213,740
|
||||||
|
turn on 141,242 through 932,871
|
||||||
|
toggle 294,259 through 474,326
|
||||||
|
toggle 678,333 through 752,957
|
||||||
|
toggle 393,804 through 510,976
|
||||||
|
turn off 6,964 through 411,976
|
||||||
|
turn off 33,572 through 978,590
|
||||||
|
turn on 579,693 through 650,978
|
||||||
|
turn on 150,20 through 652,719
|
||||||
|
turn off 782,143 through 808,802
|
||||||
|
turn off 240,377 through 761,468
|
||||||
|
turn off 899,828 through 958,967
|
||||||
|
turn on 613,565 through 952,659
|
||||||
|
turn on 295,36 through 964,978
|
||||||
|
toggle 846,296 through 969,528
|
||||||
|
turn off 211,254 through 529,491
|
||||||
|
turn off 231,594 through 406,794
|
||||||
|
turn off 169,791 through 758,942
|
||||||
|
turn on 955,440 through 980,477
|
||||||
|
toggle 944,498 through 995,928
|
||||||
|
turn on 519,391 through 605,718
|
||||||
|
toggle 521,303 through 617,366
|
||||||
|
turn off 524,349 through 694,791
|
||||||
|
toggle 391,87 through 499,792
|
||||||
|
toggle 562,527 through 668,935
|
||||||
|
turn off 68,358 through 857,453
|
||||||
|
toggle 815,811 through 889,828
|
||||||
|
turn off 666,61 through 768,87
|
||||||
|
turn on 27,501 through 921,952
|
||||||
|
turn on 953,102 through 983,471
|
||||||
|
turn on 277,552 through 451,723
|
||||||
|
turn off 64,253 through 655,960
|
||||||
|
turn on 47,485 through 734,977
|
||||||
|
turn off 59,119 through 699,734
|
||||||
|
toggle 407,898 through 493,955
|
||||||
|
toggle 912,966 through 949,991
|
||||||
|
turn on 479,990 through 895,990
|
||||||
|
toggle 390,589 through 869,766
|
||||||
|
toggle 593,903 through 926,943
|
||||||
|
toggle 358,439 through 870,528
|
||||||
|
turn off 649,410 through 652,875
|
||||||
|
turn on 629,834 through 712,895
|
||||||
|
toggle 254,555 through 770,901
|
||||||
|
toggle 641,832 through 947,850
|
||||||
|
turn on 268,448 through 743,777
|
||||||
|
turn off 512,123 through 625,874
|
||||||
|
turn off 498,262 through 930,811
|
||||||
|
turn off 835,158 through 886,242
|
||||||
|
toggle 546,310 through 607,773
|
||||||
|
turn on 501,505 through 896,909
|
||||||
|
turn off 666,796 through 817,924
|
||||||
|
toggle 987,789 through 993,809
|
||||||
|
toggle 745,8 through 860,693
|
||||||
|
toggle 181,983 through 731,988
|
||||||
|
turn on 826,174 through 924,883
|
||||||
|
turn on 239,228 through 843,993
|
||||||
|
turn on 205,613 through 891,667
|
||||||
|
toggle 867,873 through 984,896
|
||||||
|
turn on 628,251 through 677,681
|
||||||
|
toggle 276,956 through 631,964
|
||||||
|
turn on 78,358 through 974,713
|
||||||
|
turn on 521,360 through 773,597
|
||||||
|
turn off 963,52 through 979,502
|
||||||
|
turn on 117,151 through 934,622
|
||||||
|
toggle 237,91 through 528,164
|
||||||
|
turn on 944,269 through 975,453
|
||||||
|
toggle 979,460 through 988,964
|
||||||
|
turn off 440,254 through 681,507
|
||||||
|
toggle 347,100 through 896,785
|
||||||
|
turn off 329,592 through 369,985
|
||||||
|
turn on 931,960 through 979,985
|
||||||
|
toggle 703,3 through 776,36
|
||||||
|
toggle 798,120 through 908,550
|
||||||
|
turn off 186,605 through 914,709
|
||||||
|
turn off 921,725 through 979,956
|
||||||
|
toggle 167,34 through 735,249
|
||||||
|
turn on 726,781 through 987,936
|
||||||
|
toggle 720,336 through 847,756
|
||||||
|
turn on 171,630 through 656,769
|
||||||
|
turn off 417,276 through 751,500
|
||||||
|
toggle 559,485 through 584,534
|
||||||
|
turn on 568,629 through 690,873
|
||||||
|
toggle 248,712 through 277,988
|
||||||
|
toggle 345,594 through 812,723
|
||||||
|
turn off 800,108 through 834,618
|
||||||
|
turn off 967,439 through 986,869
|
||||||
|
turn on 842,209 through 955,529
|
||||||
|
turn on 132,653 through 357,696
|
||||||
|
turn on 817,38 through 973,662
|
||||||
|
turn off 569,816 through 721,861
|
||||||
|
turn on 568,429 through 945,724
|
||||||
|
turn on 77,458 through 844,685
|
||||||
|
turn off 138,78 through 498,851
|
||||||
|
turn on 136,21 through 252,986
|
||||||
|
turn off 2,460 through 863,472
|
||||||
|
turn on 172,81 through 839,332
|
||||||
|
turn on 123,216 through 703,384
|
||||||
|
turn off 879,644 through 944,887
|
||||||
|
toggle 227,491 through 504,793
|
||||||
|
toggle 580,418 through 741,479
|
||||||
|
toggle 65,276 through 414,299
|
||||||
|
toggle 482,486 through 838,931
|
||||||
|
turn off 557,768 through 950,927
|
||||||
|
turn off 615,617 through 955,864
|
||||||
|
turn on 859,886 through 923,919
|
||||||
|
turn on 391,330 through 499,971
|
||||||
|
toggle 521,835 through 613,847
|
||||||
|
turn on 822,787 through 989,847
|
||||||
|
turn on 192,142 through 357,846
|
||||||
|
turn off 564,945 through 985,945
|
||||||
|
turn off 479,361 through 703,799
|
||||||
|
toggle 56,481 through 489,978
|
||||||
|
turn off 632,991 through 774,998
|
||||||
|
toggle 723,526 through 945,792
|
||||||
|
turn on 344,149 through 441,640
|
||||||
|
toggle 568,927 through 624,952
|
||||||
|
turn on 621,784 through 970,788
|
||||||
|
toggle 665,783 through 795,981
|
||||||
|
toggle 386,610 through 817,730
|
||||||
|
toggle 440,399 through 734,417
|
||||||
|
toggle 939,201 through 978,803
|
||||||
|
turn off 395,883 through 554,929
|
||||||
|
turn on 340,309 through 637,561
|
||||||
|
turn off 875,147 through 946,481
|
||||||
|
turn off 945,837 through 957,922
|
||||||
|
turn off 429,982 through 691,991
|
||||||
|
toggle 227,137 through 439,822
|
||||||
|
toggle 4,848 through 7,932
|
||||||
|
turn off 545,146 through 756,943
|
||||||
|
turn on 763,863 through 937,994
|
||||||
|
turn on 232,94 through 404,502
|
||||||
|
turn off 742,254 through 930,512
|
||||||
|
turn on 91,931 through 101,942
|
||||||
|
toggle 585,106 through 651,425
|
||||||
|
turn on 506,700 through 567,960
|
||||||
|
turn off 548,44 through 718,352
|
||||||
|
turn off 194,827 through 673,859
|
||||||
|
turn off 6,645 through 509,764
|
||||||
|
turn off 13,230 through 821,361
|
||||||
|
turn on 734,629 through 919,631
|
||||||
|
toggle 788,552 through 957,972
|
||||||
|
toggle 244,747 through 849,773
|
||||||
|
turn off 162,553 through 276,887
|
||||||
|
turn off 569,577 through 587,604
|
||||||
|
turn off 799,482 through 854,956
|
||||||
|
turn on 744,535 through 909,802
|
||||||
|
toggle 330,641 through 396,986
|
||||||
|
turn off 927,458 through 966,564
|
||||||
|
toggle 984,486 through 986,913
|
||||||
|
toggle 519,682 through 632,708
|
||||||
|
turn on 984,977 through 989,986
|
||||||
|
toggle 766,423 through 934,495
|
||||||
|
turn on 17,509 through 947,718
|
||||||
|
turn on 413,783 through 631,903
|
||||||
|
turn on 482,370 through 493,688
|
||||||
|
turn on 433,859 through 628,938
|
||||||
|
turn off 769,549 through 945,810
|
||||||
|
turn on 178,853 through 539,941
|
||||||
|
turn off 203,251 through 692,433
|
||||||
|
turn off 525,638 through 955,794
|
||||||
|
turn on 169,70 through 764,939
|
||||||
|
toggle 59,352 through 896,404
|
||||||
|
toggle 143,245 through 707,320
|
||||||
|
turn off 103,35 through 160,949
|
||||||
|
toggle 496,24 through 669,507
|
||||||
|
turn off 581,847 through 847,903
|
||||||
|
turn on 689,153 through 733,562
|
||||||
|
turn on 821,487 through 839,699
|
||||||
|
turn on 837,627 through 978,723
|
||||||
|
toggle 96,748 through 973,753
|
||||||
|
toggle 99,818 through 609,995
|
||||||
|
turn on 731,193 through 756,509
|
||||||
|
turn off 622,55 through 813,365
|
||||||
|
turn on 456,490 through 576,548
|
||||||
|
turn on 48,421 through 163,674
|
||||||
|
turn off 853,861 through 924,964
|
||||||
|
turn off 59,963 through 556,987
|
||||||
|
turn on 458,710 through 688,847
|
||||||
|
toggle 12,484 through 878,562
|
||||||
|
turn off 241,964 through 799,983
|
||||||
|
turn off 434,299 through 845,772
|
||||||
|
toggle 896,725 through 956,847
|
||||||
|
turn on 740,289 through 784,345
|
||||||
|
turn off 395,840 through 822,845
|
||||||
|
turn on 955,224 through 996,953
|
||||||
|
turn off 710,186 through 957,722
|
||||||
|
turn off 485,949 through 869,985
|
||||||
|
turn on 848,209 through 975,376
|
||||||
|
toggle 221,241 through 906,384
|
||||||
|
turn on 588,49 through 927,496
|
||||||
|
turn on 273,332 through 735,725
|
||||||
|
turn on 505,962 through 895,962
|
||||||
|
toggle 820,112 through 923,143
|
||||||
|
turn on 919,792 through 978,982
|
||||||
|
toggle 489,461 through 910,737
|
||||||
|
turn off 202,642 through 638,940
|
||||||
|
turn off 708,953 through 970,960
|
||||||
|
toggle 437,291 through 546,381
|
||||||
|
turn on 409,358 through 837,479
|
||||||
|
turn off 756,279 through 870,943
|
||||||
|
turn off 154,657 through 375,703
|
||||||
|
turn off 524,622 through 995,779
|
||||||
|
toggle 514,221 through 651,850
|
||||||
|
toggle 808,464 through 886,646
|
||||||
|
toggle 483,537 through 739,840
|
||||||
|
toggle 654,769 through 831,825
|
||||||
|
turn off 326,37 through 631,69
|
||||||
|
turn off 590,570 through 926,656
|
||||||
|
turn off 881,913 through 911,998
|
||||||
|
turn on 996,102 through 998,616
|
||||||
|
turn off 677,503 through 828,563
|
||||||
|
turn on 860,251 through 877,441
|
||||||
|
turn off 964,100 through 982,377
|
||||||
|
toggle 888,403 through 961,597
|
||||||
|
turn off 632,240 through 938,968
|
||||||
|
toggle 731,176 through 932,413
|
||||||
|
turn on 5,498 through 203,835
|
||||||
|
turn on 819,352 through 929,855
|
||||||
|
toggle 393,813 through 832,816
|
||||||
|
toggle 725,689 through 967,888
|
||||||
|
turn on 968,950 through 969,983
|
||||||
|
turn off 152,628 through 582,896
|
||||||
|
turn off 165,844 through 459,935
|
||||||
|
turn off 882,741 through 974,786
|
||||||
|
turn off 283,179 through 731,899
|
||||||
|
toggle 197,366 through 682,445
|
||||||
|
turn on 106,309 through 120,813
|
||||||
|
toggle 950,387 through 967,782
|
||||||
|
turn off 274,603 through 383,759
|
||||||
|
turn off 155,665 through 284,787
|
||||||
|
toggle 551,871 through 860,962
|
||||||
|
turn off 30,826 through 598,892
|
||||||
|
toggle 76,552 through 977,888
|
||||||
|
turn on 938,180 through 994,997
|
||||||
|
toggle 62,381 through 993,656
|
||||||
|
toggle 625,861 through 921,941
|
||||||
|
turn on 685,311 through 872,521
|
||||||
|
turn on 124,934 through 530,962
|
||||||
|
turn on 606,379 through 961,867
|
||||||
|
turn off 792,735 through 946,783
|
||||||
|
turn on 417,480 through 860,598
|
||||||
|
toggle 178,91 through 481,887
|
||||||
|
turn off 23,935 through 833,962
|
||||||
|
toggle 317,14 through 793,425
|
||||||
|
turn on 986,89 through 999,613
|
||||||
|
turn off 359,201 through 560,554
|
||||||
|
turn off 729,494 through 942,626
|
||||||
|
turn on 204,143 through 876,610
|
||||||
|
toggle 474,97 through 636,542
|
||||||
|
turn off 902,924 through 976,973
|
||||||
|
turn off 389,442 through 824,638
|
||||||
|
turn off 622,863 through 798,863
|
||||||
|
turn on 840,622 through 978,920
|
||||||
|
toggle 567,374 through 925,439
|
||||||
|
turn off 643,319 through 935,662
|
||||||
|
toggle 185,42 through 294,810
|
||||||
|
turn on 47,124 through 598,880
|
||||||
|
toggle 828,303 through 979,770
|
||||||
|
turn off 174,272 through 280,311
|
||||||
|
turn off 540,50 through 880,212
|
||||||
|
turn on 141,994 through 221,998
|
||||||
|
turn on 476,695 through 483,901
|
||||||
|
turn on 960,216 through 972,502
|
||||||
|
toggle 752,335 through 957,733
|
||||||
|
turn off 419,713 through 537,998
|
||||||
|
toggle 772,846 through 994,888
|
||||||
|
turn on 881,159 through 902,312
|
||||||
|
turn off 537,651 through 641,816
|
||||||
|
toggle 561,947 through 638,965
|
||||||
|
turn on 368,458 through 437,612
|
||||||
|
turn on 290,149 through 705,919
|
||||||
|
turn on 711,918 through 974,945
|
||||||
|
toggle 916,242 through 926,786
|
||||||
|
toggle 522,272 through 773,314
|
||||||
|
turn on 432,897 through 440,954
|
||||||
|
turn off 132,169 through 775,380
|
||||||
|
toggle 52,205 through 693,747
|
||||||
|
toggle 926,309 through 976,669
|
||||||
|
turn off 838,342 through 938,444
|
||||||
|
turn on 144,431 through 260,951
|
||||||
|
toggle 780,318 through 975,495
|
||||||
|
turn off 185,412 through 796,541
|
||||||
|
turn on 879,548 through 892,860
|
||||||
|
turn on 294,132 through 460,338
|
||||||
|
turn on 823,500 through 899,529
|
||||||
|
turn off 225,603 through 483,920
|
||||||
|
toggle 717,493 through 930,875
|
||||||
|
toggle 534,948 through 599,968
|
||||||
|
turn on 522,730 through 968,950
|
||||||
|
turn off 102,229 through 674,529
|
||||||
202
2015/06/src/main.rs
Normal file
202
2015/06/src/main.rs
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
#[macro_use] extern crate lazy_static;
|
||||||
|
extern crate regex;
|
||||||
|
|
||||||
|
use std::io::{self, BufRead};
|
||||||
|
use std::str::FromStr;
|
||||||
|
use std::cmp;
|
||||||
|
|
||||||
|
use regex::Regex;
|
||||||
|
|
||||||
|
|
||||||
|
macro_rules! coords {
|
||||||
|
($caps:expr) => {{
|
||||||
|
(
|
||||||
|
(
|
||||||
|
$caps.at(1).unwrap().parse::<usize>().unwrap(),
|
||||||
|
$caps.at(2).unwrap().parse::<usize>().unwrap()
|
||||||
|
),
|
||||||
|
(
|
||||||
|
$caps.at(3).unwrap().parse::<usize>().unwrap(),
|
||||||
|
$caps.at(4).unwrap().parse::<usize>().unwrap()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type Coords = ((usize, usize), (usize, usize));
|
||||||
|
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Clone, Copy)]
|
||||||
|
pub enum Instruction {
|
||||||
|
On(Coords),
|
||||||
|
Off(Coords),
|
||||||
|
Toggle(Coords)
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FromStr for Instruction {
|
||||||
|
type Err = ();
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Instruction, ()> {
|
||||||
|
lazy_static! {
|
||||||
|
static ref ON: Regex = Regex::new(r"turn on (\d+),(\d+) through (\d+),(\d+)").unwrap();
|
||||||
|
static ref OFF: Regex = Regex::new(r"turn off (\d+),(\d+) through (\d+),(\d+)").unwrap();
|
||||||
|
static ref TOGGLE: Regex = Regex::new(r"toggle (\d+),(\d+) through (\d+),(\d+)").unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(caps) = ON.captures(s) {
|
||||||
|
return Ok(Instruction::On(coords!(caps)));
|
||||||
|
}
|
||||||
|
else if let Some(caps) = OFF.captures(s) {
|
||||||
|
return Ok(Instruction::Off(coords!(caps)));
|
||||||
|
}
|
||||||
|
else if let Some(caps) = TOGGLE.captures(s) {
|
||||||
|
return Ok(Instruction::Toggle(coords!(caps)));
|
||||||
|
}
|
||||||
|
|
||||||
|
Err(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub struct Grid {
|
||||||
|
grid: Vec<Vec<i32>>
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Grid {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Grid {
|
||||||
|
grid: vec![vec![0; 1000]; 1000]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn process_lit(&mut self, instruction: Instruction) {
|
||||||
|
match instruction {
|
||||||
|
Instruction::On(coords) => self.update(coords, |_| 1),
|
||||||
|
Instruction::Off(coords) => self.update(coords, |_| 0),
|
||||||
|
Instruction::Toggle(coords) => self.update(coords, |x| if x > 0 { 0 } else { 1 }),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn count_lit(&self) -> usize {
|
||||||
|
self.grid.iter()
|
||||||
|
.map(|row| row.iter().filter(|x| **x > 0).count())
|
||||||
|
.sum()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn process_brightness(&mut self, instruction: Instruction) {
|
||||||
|
match instruction {
|
||||||
|
Instruction::On(coords) => self.update(coords, |x| x + 1),
|
||||||
|
Instruction::Off(coords) => self.update(coords, |x| cmp::max(x - 1, 0)),
|
||||||
|
Instruction::Toggle(coords) => self.update(coords, |x| x + 2),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn count_brightness(&self) -> i32 {
|
||||||
|
self.grid.iter()
|
||||||
|
.map(|row| {
|
||||||
|
let sum: i32 = row.iter().sum();
|
||||||
|
|
||||||
|
sum
|
||||||
|
})
|
||||||
|
.sum()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update<F>(&mut self, coords: Coords, func: F)
|
||||||
|
where F: Fn(i32) -> i32 {
|
||||||
|
|
||||||
|
let ((x1, y1), (x2, y2)) = coords;
|
||||||
|
|
||||||
|
for y in y1..y2 + 1 {
|
||||||
|
for x in x1..x2 + 1 {
|
||||||
|
self.grid[y][x] = func(self.grid[y][x]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let stdin = io::stdin();
|
||||||
|
|
||||||
|
let instructions = stdin.lock().lines()
|
||||||
|
.filter_map(|x| x.ok())
|
||||||
|
.filter_map(|x| x.parse::<Instruction>().ok());
|
||||||
|
|
||||||
|
let mut grid_1 = Grid::new();
|
||||||
|
let mut grid_2 = Grid::new();
|
||||||
|
|
||||||
|
for instruction in instructions {
|
||||||
|
grid_1.process_lit(instruction);
|
||||||
|
grid_2.process_brightness(instruction);
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("count={}", grid_1.count_lit());
|
||||||
|
println!("count={}", grid_2.count_brightness());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_on_instructions() {
|
||||||
|
use super::Instruction::On;
|
||||||
|
|
||||||
|
assert_eq!(On(((887,9), (959, 629))), "turn on 887,9 through 959,629".parse::<Instruction>().unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_off_instructions() {
|
||||||
|
use super::Instruction::Off;
|
||||||
|
|
||||||
|
assert_eq!(Off(((539,243), (559, 965))), "turn off 539,243 through 559,965".parse::<Instruction>().unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_toggle_instructions() {
|
||||||
|
use super::Instruction::Toggle;
|
||||||
|
|
||||||
|
assert_eq!(Toggle(((720, 196), (897, 994))), "toggle 720,196 through 897,994".parse::<Instruction>().unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn grid_empty() {
|
||||||
|
let grid = Grid::new();
|
||||||
|
|
||||||
|
assert_eq!(0, grid.count_lit());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn example_01() {
|
||||||
|
let mut grid = Grid::new();
|
||||||
|
|
||||||
|
let instruction = "turn on 0,0 through 999,999".parse::<Instruction>().unwrap();
|
||||||
|
|
||||||
|
grid.process_lit(instruction);
|
||||||
|
|
||||||
|
assert_eq!(1_000_000, grid.count_lit());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn example_02() {
|
||||||
|
let mut grid = Grid::new();
|
||||||
|
|
||||||
|
let instruction = "turn on 0,0 through 999,0".parse::<Instruction>().unwrap();
|
||||||
|
|
||||||
|
grid.process_lit(instruction);
|
||||||
|
|
||||||
|
assert_eq!(1_000, grid.count_lit());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn example_04() {
|
||||||
|
let mut grid = Grid::new();
|
||||||
|
|
||||||
|
let instruction = "toggle 0,0 through 999,999".parse::<Instruction>().unwrap();
|
||||||
|
|
||||||
|
grid.process_brightness(instruction);
|
||||||
|
|
||||||
|
assert_eq!(2_000_000, grid.count_brightness());
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user