7 changed files with 1692 additions and 12 deletions
File diff suppressed because it is too large
@ -0,0 +1,300 @@ |
|||
turn off 660,55 through 986,197 |
|||
turn off 341,304 through 638,850 |
|||
turn off 199,133 through 461,193 |
|||
toggle 322,558 through 977,958 |
|||
toggle 537,781 through 687,941 |
|||
turn on 226,196 through 599,390 |
|||
turn on 240,129 through 703,297 |
|||
turn on 317,329 through 451,798 |
|||
turn on 957,736 through 977,890 |
|||
turn on 263,530 through 559,664 |
|||
turn on 158,270 through 243,802 |
|||
toggle 223,39 through 454,511 |
|||
toggle 544,218 through 979,872 |
|||
turn on 313,306 through 363,621 |
|||
toggle 173,401 through 496,407 |
|||
toggle 333,60 through 748,159 |
|||
turn off 87,577 through 484,608 |
|||
turn on 809,648 through 826,999 |
|||
toggle 352,432 through 628,550 |
|||
turn off 197,408 through 579,569 |
|||
turn off 1,629 through 802,633 |
|||
turn off 61,44 through 567,111 |
|||
toggle 880,25 through 903,973 |
|||
turn on 347,123 through 864,746 |
|||
toggle 728,877 through 996,975 |
|||
turn on 121,895 through 349,906 |
|||
turn on 888,547 through 931,628 |
|||
toggle 398,782 through 834,882 |
|||
turn on 966,850 through 989,953 |
|||
turn off 891,543 through 914,991 |
|||
toggle 908,77 through 916,117 |
|||
turn on 576,900 through 943,934 |
|||
turn off 580,170 through 963,206 |
|||
turn on 184,638 through 192,944 |
|||
toggle 940,147 through 978,730 |
|||
turn off 854,56 through 965,591 |
|||
toggle 717,172 through 947,995 |
|||
toggle 426,987 through 705,998 |
|||
turn on 987,157 through 992,278 |
|||
toggle 995,774 through 997,784 |
|||
turn off 796,96 through 845,182 |
|||
turn off 451,87 through 711,655 |
|||
turn off 380,93 through 968,676 |
|||
turn on 263,468 through 343,534 |
|||
turn on 917,936 through 928,959 |
|||
toggle 478,7 through 573,148 |
|||
turn off 428,339 through 603,624 |
|||
turn off 400,880 through 914,953 |
|||
toggle 679,428 through 752,779 |
|||
turn off 697,981 through 709,986 |
|||
toggle 482,566 through 505,725 |
|||
turn off 956,368 through 993,516 |
|||
toggle 735,823 through 783,883 |
|||
turn off 48,487 through 892,496 |
|||
turn off 116,680 through 564,819 |
|||
turn on 633,865 through 729,930 |
|||
turn off 314,618 through 571,922 |
|||
toggle 138,166 through 936,266 |
|||
turn on 444,732 through 664,960 |
|||
turn off 109,337 through 972,497 |
|||
turn off 51,432 through 77,996 |
|||
turn off 259,297 through 366,744 |
|||
toggle 801,130 through 917,544 |
|||
toggle 767,982 through 847,996 |
|||
turn on 216,507 through 863,885 |
|||
turn off 61,441 through 465,731 |
|||
turn on 849,970 through 944,987 |
|||
toggle 845,76 through 852,951 |
|||
toggle 732,615 through 851,936 |
|||
toggle 251,128 through 454,778 |
|||
turn on 324,429 through 352,539 |
|||
toggle 52,450 through 932,863 |
|||
turn off 449,379 through 789,490 |
|||
turn on 317,319 through 936,449 |
|||
toggle 887,670 through 957,838 |
|||
toggle 671,613 through 856,664 |
|||
turn off 186,648 through 985,991 |
|||
turn off 471,689 through 731,717 |
|||
toggle 91,331 through 750,758 |
|||
toggle 201,73 through 956,524 |
|||
toggle 82,614 through 520,686 |
|||
toggle 84,287 through 467,734 |
|||
turn off 132,367 through 208,838 |
|||
toggle 558,684 through 663,920 |
|||
turn on 237,952 through 265,997 |
|||
turn on 694,713 through 714,754 |
|||
turn on 632,523 through 862,827 |
|||
turn on 918,780 through 948,916 |
|||
turn on 349,586 through 663,976 |
|||
toggle 231,29 through 257,589 |
|||
toggle 886,428 through 902,993 |
|||
turn on 106,353 through 236,374 |
|||
turn on 734,577 through 759,684 |
|||
turn off 347,843 through 696,912 |
|||
turn on 286,699 through 964,883 |
|||
turn on 605,875 through 960,987 |
|||
turn off 328,286 through 869,461 |
|||
turn off 472,569 through 980,848 |
|||
toggle 673,573 through 702,884 |
|||
turn off 398,284 through 738,332 |
|||
turn on 158,50 through 284,411 |
|||
turn off 390,284 through 585,663 |
|||
turn on 156,579 through 646,581 |
|||
turn on 875,493 through 989,980 |
|||
toggle 486,391 through 924,539 |
|||
turn on 236,722 through 272,964 |
|||
toggle 228,282 through 470,581 |
|||
toggle 584,389 through 750,761 |
|||
turn off 899,516 through 900,925 |
|||
turn on 105,229 through 822,846 |
|||
turn off 253,77 through 371,877 |
|||
turn on 826,987 through 906,992 |
|||
turn off 13,152 through 615,931 |
|||
turn on 835,320 through 942,399 |
|||
turn on 463,504 through 536,720 |
|||
toggle 746,942 through 786,998 |
|||
turn off 867,333 through 965,403 |
|||
turn on 591,477 through 743,692 |
|||
turn off 403,437 through 508,908 |
|||
turn on 26,723 through 368,814 |
|||
turn on 409,485 through 799,809 |
|||
turn on 115,630 through 704,705 |
|||
turn off 228,183 through 317,220 |
|||
toggle 300,649 through 382,842 |
|||
turn off 495,365 through 745,562 |
|||
turn on 698,346 through 744,873 |
|||
turn on 822,932 through 951,934 |
|||
toggle 805,30 through 925,421 |
|||
toggle 441,152 through 653,274 |
|||
toggle 160,81 through 257,587 |
|||
turn off 350,781 through 532,917 |
|||
toggle 40,583 through 348,636 |
|||
turn on 280,306 through 483,395 |
|||
toggle 392,936 through 880,955 |
|||
toggle 496,591 through 851,934 |
|||
turn off 780,887 through 946,994 |
|||
turn off 205,735 through 281,863 |
|||
toggle 100,876 through 937,915 |
|||
turn on 392,393 through 702,878 |
|||
turn on 956,374 through 976,636 |
|||
toggle 478,262 through 894,775 |
|||
turn off 279,65 through 451,677 |
|||
turn on 397,541 through 809,847 |
|||
turn on 444,291 through 451,586 |
|||
toggle 721,408 through 861,598 |
|||
turn on 275,365 through 609,382 |
|||
turn on 736,24 through 839,72 |
|||
turn off 86,492 through 582,712 |
|||
turn on 676,676 through 709,703 |
|||
turn off 105,710 through 374,817 |
|||
toggle 328,748 through 845,757 |
|||
toggle 335,79 through 394,326 |
|||
toggle 193,157 through 633,885 |
|||
turn on 227,48 through 769,743 |
|||
toggle 148,333 through 614,568 |
|||
toggle 22,30 through 436,263 |
|||
toggle 547,447 through 688,969 |
|||
toggle 576,621 through 987,740 |
|||
turn on 711,334 through 799,515 |
|||
turn on 541,448 through 654,951 |
|||
toggle 792,199 through 798,990 |
|||
turn on 89,956 through 609,960 |
|||
toggle 724,433 through 929,630 |
|||
toggle 144,895 through 201,916 |
|||
toggle 226,730 through 632,871 |
|||
turn off 760,819 through 828,974 |
|||
toggle 887,180 through 940,310 |
|||
toggle 222,327 through 805,590 |
|||
turn off 630,824 through 885,963 |
|||
turn on 940,740 through 954,946 |
|||
turn on 193,373 through 779,515 |
|||
toggle 304,955 through 469,975 |
|||
turn off 405,480 through 546,960 |
|||
turn on 662,123 through 690,669 |
|||
turn off 615,238 through 750,714 |
|||
turn on 423,220 through 930,353 |
|||
turn on 329,769 through 358,970 |
|||
toggle 590,151 through 704,722 |
|||
turn off 884,539 through 894,671 |
|||
toggle 449,241 through 984,549 |
|||
toggle 449,260 through 496,464 |
|||
turn off 306,448 through 602,924 |
|||
turn on 286,805 through 555,901 |
|||
toggle 722,177 through 922,298 |
|||
toggle 491,554 through 723,753 |
|||
turn on 80,849 through 174,996 |
|||
turn off 296,561 through 530,856 |
|||
toggle 653,10 through 972,284 |
|||
toggle 529,236 through 672,614 |
|||
toggle 791,598 through 989,695 |
|||
turn on 19,45 through 575,757 |
|||
toggle 111,55 through 880,871 |
|||
turn off 197,897 through 943,982 |
|||
turn on 912,336 through 977,605 |
|||
toggle 101,221 through 537,450 |
|||
turn on 101,104 through 969,447 |
|||
toggle 71,527 through 587,717 |
|||
toggle 336,445 through 593,889 |
|||
toggle 214,179 through 575,699 |
|||
turn on 86,313 through 96,674 |
|||
toggle 566,427 through 906,888 |
|||
turn off 641,597 through 850,845 |
|||
turn on 606,524 through 883,704 |
|||
turn on 835,775 through 867,887 |
|||
toggle 547,301 through 897,515 |
|||
toggle 289,930 through 413,979 |
|||
turn on 361,122 through 457,226 |
|||
turn on 162,187 through 374,746 |
|||
turn on 348,461 through 454,675 |
|||
turn off 966,532 through 985,537 |
|||
turn on 172,354 through 630,606 |
|||
turn off 501,880 through 680,993 |
|||
turn off 8,70 through 566,592 |
|||
toggle 433,73 through 690,651 |
|||
toggle 840,798 through 902,971 |
|||
toggle 822,204 through 893,760 |
|||
turn off 453,496 through 649,795 |
|||
turn off 969,549 through 990,942 |
|||
turn off 789,28 through 930,267 |
|||
toggle 880,98 through 932,434 |
|||
toggle 568,674 through 669,753 |
|||
turn on 686,228 through 903,271 |
|||
turn on 263,995 through 478,999 |
|||
toggle 534,675 through 687,955 |
|||
turn off 342,434 through 592,986 |
|||
toggle 404,768 through 677,867 |
|||
toggle 126,723 through 978,987 |
|||
toggle 749,675 through 978,959 |
|||
turn off 445,330 through 446,885 |
|||
turn off 463,205 through 924,815 |
|||
turn off 417,430 through 915,472 |
|||
turn on 544,990 through 912,999 |
|||
turn off 201,255 through 834,789 |
|||
turn off 261,142 through 537,862 |
|||
turn off 562,934 through 832,984 |
|||
turn off 459,978 through 691,980 |
|||
turn off 73,911 through 971,972 |
|||
turn on 560,448 through 723,810 |
|||
turn on 204,630 through 217,854 |
|||
turn off 91,259 through 611,607 |
|||
turn on 877,32 through 978,815 |
|||
turn off 950,438 through 974,746 |
|||
toggle 426,30 through 609,917 |
|||
toggle 696,37 through 859,201 |
|||
toggle 242,417 through 682,572 |
|||
turn off 388,401 through 979,528 |
|||
turn off 79,345 through 848,685 |
|||
turn off 98,91 through 800,434 |
|||
toggle 650,700 through 972,843 |
|||
turn off 530,450 through 538,926 |
|||
turn on 428,559 through 962,909 |
|||
turn on 78,138 through 92,940 |
|||
toggle 194,117 through 867,157 |
|||
toggle 785,355 through 860,617 |
|||
turn off 379,441 through 935,708 |
|||
turn off 605,133 through 644,911 |
|||
toggle 10,963 through 484,975 |
|||
turn off 359,988 through 525,991 |
|||
turn off 509,138 through 787,411 |
|||
toggle 556,467 through 562,773 |
|||
turn on 119,486 through 246,900 |
|||
turn on 445,561 through 794,673 |
|||
turn off 598,681 through 978,921 |
|||
turn off 974,230 through 995,641 |
|||
turn off 760,75 through 800,275 |
|||
toggle 441,215 through 528,680 |
|||
turn off 701,636 through 928,877 |
|||
turn on 165,753 through 202,780 |
|||
toggle 501,412 through 998,516 |
|||
toggle 161,105 through 657,395 |
|||
turn on 113,340 through 472,972 |
|||
toggle 384,994 through 663,999 |
|||
turn on 969,994 through 983,997 |
|||
turn on 519,600 through 750,615 |
|||
turn off 363,899 through 948,935 |
|||
turn on 271,845 through 454,882 |
|||
turn off 376,528 through 779,640 |
|||
toggle 767,98 through 854,853 |
|||
toggle 107,322 through 378,688 |
|||
turn off 235,899 through 818,932 |
|||
turn on 445,611 through 532,705 |
|||
toggle 629,387 through 814,577 |
|||
toggle 112,414 through 387,421 |
|||
toggle 319,184 through 382,203 |
|||
turn on 627,796 through 973,940 |
|||
toggle 602,45 through 763,151 |
|||
turn off 441,375 through 974,545 |
|||
toggle 871,952 through 989,998 |
|||
turn on 717,272 through 850,817 |
|||
toggle 475,711 through 921,882 |
|||
toggle 66,191 through 757,481 |
|||
turn off 50,197 through 733,656 |
|||
toggle 83,575 through 915,728 |
|||
turn on 777,812 through 837,912 |
|||
turn on 20,984 through 571,994 |
|||
turn off 446,432 through 458,648 |
|||
turn on 715,871 through 722,890 |
|||
toggle 424,675 through 740,862 |
|||
toggle 580,592 through 671,900 |
|||
toggle 296,687 through 906,775 |
|||
@ -0,0 +1,77 @@ |
|||
pub struct Data { |
|||
base: Vec<String>, |
|||
} |
|||
|
|||
impl Data { |
|||
pub fn new() -> Data { |
|||
Data { |
|||
base: Vec::new(), |
|||
} |
|||
} |
|||
|
|||
pub fn parse(&mut self, input: String) { |
|||
for s in input.split_whitespace() { |
|||
self.base.push(String::from(s)); |
|||
} |
|||
} |
|||
|
|||
|
|||
pub fn nice(&mut self) -> i32 { |
|||
let mut nice = 0; |
|||
for s in self.base.clone().into_iter() { |
|||
let mut vowels = 0; |
|||
let mut double = 0; |
|||
let mut bad = 0; |
|||
for (i,c) in s.clone().chars().enumerate() { |
|||
match c { |
|||
'a'|'e'|'i'|'o'|'u' => { |
|||
vowels +=1; |
|||
} |
|||
'b'|'d'|'q'|'y' => { |
|||
if i > 0 && s.chars().nth(i-1).unwrap() == ((c as u8) - 1) as char { |
|||
bad += 1; |
|||
} |
|||
} |
|||
_ => () |
|||
} |
|||
if i > 0 && s.chars().nth(i-1).unwrap() == c { |
|||
double += 1; |
|||
} |
|||
} |
|||
if vowels >= 3 && double > 0 && bad == 0 { |
|||
nice += 1; |
|||
} |
|||
} |
|||
nice |
|||
} |
|||
|
|||
pub fn nice2(&mut self) -> i32 { |
|||
let mut nice = 0; |
|||
for s in self.base.clone().into_iter() { |
|||
let mut pair = 0; |
|||
let mut between = 0; |
|||
for (i,c) in s.clone().chars().enumerate() { |
|||
if i > 1 && s.chars().nth(i-2).unwrap() == c { |
|||
between += 1; |
|||
} |
|||
if i > 2 { |
|||
let c0 = s.chars().nth(i-1).unwrap(); |
|||
let mut ispair = false; |
|||
for j in 1 .. i-1 { |
|||
if s.chars().nth(j-1).unwrap() == c0 && s.chars().nth(j).unwrap() == c { |
|||
ispair = true; |
|||
} |
|||
} |
|||
if ispair { |
|||
pair += 1; |
|||
} |
|||
} |
|||
} |
|||
if pair > 0 && between > 0 { |
|||
nice += 1; |
|||
} |
|||
} |
|||
nice |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,142 @@ |
|||
const DEBUG : bool = false; |
|||
enum Mode { |
|||
On, |
|||
Off, |
|||
Toggle, |
|||
} |
|||
|
|||
struct Point { |
|||
x: u32, |
|||
y: u32, |
|||
} |
|||
|
|||
impl Point { |
|||
pub fn new() -> Point { |
|||
Point { |
|||
x: 0, |
|||
y: 0, |
|||
} |
|||
} |
|||
} |
|||
|
|||
struct Set { |
|||
start: Point, |
|||
end: Point, |
|||
mode: Mode, |
|||
} |
|||
|
|||
impl Set { |
|||
pub fn new() -> Set { |
|||
Set { |
|||
start: Point::new(), |
|||
end: Point::new(), |
|||
mode: Mode::Off, |
|||
} |
|||
} |
|||
} |
|||
|
|||
pub struct Data { |
|||
base: Vec<Set>, |
|||
} |
|||
|
|||
impl Data { |
|||
pub fn new() -> Data { |
|||
Data { |
|||
base: Vec::new(), |
|||
} |
|||
} |
|||
|
|||
pub fn parse(&mut self, input: String) { |
|||
for s in input.split("\n").into_iter() { |
|||
let mut line : Vec<&str> = s.split_whitespace().collect::<Vec<&str>>(); |
|||
if line.len() > 0 { |
|||
let mut newset = Set::new(); |
|||
let mut curstr = line.remove(0); |
|||
if curstr == "turn" { |
|||
curstr = line.remove(0); |
|||
if curstr == "on" { |
|||
newset.mode = Mode::On; |
|||
} else if curstr == "off" { |
|||
newset.mode = Mode::Off; |
|||
} |
|||
} else if curstr == "toggle" { |
|||
newset.mode = Mode::Toggle; |
|||
} |
|||
let mut coord = line.remove(0).split(",").collect::<Vec<&str>>(); |
|||
match coord[0].parse::<u32>() { |
|||
Ok(val) => newset.start.x = val, |
|||
Err(_) => () |
|||
} |
|||
match coord[1].parse::<u32>() { |
|||
Ok(val) => newset.start.y = val, |
|||
Err(_) => () |
|||
} |
|||
|
|||
if line.remove(0) == "through" { |
|||
coord = line.remove(0).split(",").collect::<Vec<&str>>(); |
|||
match coord[0].parse::<u32>() { |
|||
Ok(val) => newset.end.x = val, |
|||
Err(_) => () |
|||
} |
|||
match coord[1].parse::<u32>() { |
|||
Ok(val) => newset.end.y = val, |
|||
Err(_) => () |
|||
} |
|||
} |
|||
if DEBUG { |
|||
println!("new Set: {} {}, {} {}", newset.start.x, newset.start.y, newset.end.x, newset.end.y); |
|||
} |
|||
self.base.push(newset); |
|||
|
|||
} |
|||
} |
|||
} |
|||
|
|||
pub fn fire(&mut self) -> u32 { |
|||
let mut lights = vec![false; 1000000]; |
|||
let mut res = 0; |
|||
for line in &self.base { |
|||
for i in line.start.x .. line.end.x+1 { |
|||
for j in line.start.y .. line.end.y+1 { |
|||
match line.mode { |
|||
Mode::On => lights[(1000*i + j) as usize] = true, |
|||
Mode::Off => lights[(1000*i + j) as usize] = false, |
|||
Mode::Toggle => lights[(1000*i + j) as usize] = !lights[(1000*i + j) as usize], |
|||
_ => (), |
|||
} |
|||
} |
|||
} |
|||
} |
|||
for i in lights { |
|||
if i { |
|||
res += 1; |
|||
} |
|||
} |
|||
res |
|||
} |
|||
|
|||
pub fn fire2(&mut self) -> u32 { |
|||
let mut lights:Vec<u32> = vec![0; 1000000]; |
|||
let mut res = 0; |
|||
for line in &self.base { |
|||
for i in line.start.x .. line.end.x+1 { |
|||
for j in line.start.y .. line.end.y+1 { |
|||
match line.mode { |
|||
Mode::On => lights[(1000*i + j) as usize] += 1, |
|||
Mode::Off => { |
|||
if lights[(1000*i + j) as usize] > 0 { |
|||
lights[(1000*i + j) as usize] -= 1; |
|||
} |
|||
}, |
|||
Mode::Toggle => lights[(1000*i + j) as usize] += 2, |
|||
_ => (), |
|||
} |
|||
} |
|||
} |
|||
} |
|||
for i in lights { |
|||
res += i; |
|||
} |
|||
res |
|||
} |
|||
} |
|||
Loading…
Reference in new issue