From 293348441811e26b4b885d57608f796b72974bda Mon Sep 17 00:00:00 2001 From: Christian Segundo Date: Sun, 8 Dec 2024 11:21:53 +0100 Subject: add day 6 & 7 --- 6-input.txt | 130 ++++++++++ 6.pl | 96 +++++++ 7-input.txt | 850 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 7.pl | 114 ++++++++ 4 files changed, 1190 insertions(+) create mode 100644 6-input.txt create mode 100644 6.pl create mode 100644 7-input.txt create mode 100644 7.pl diff --git a/6-input.txt b/6-input.txt new file mode 100644 index 0000000..b8fd00b --- /dev/null +++ b/6-input.txt @@ -0,0 +1,130 @@ +.....#......................................................#...................#.........................................#..#.... +.......................#.......#...............................................#.................#...#.......#..............#..... +.........#.................................................................#.....................##............................... +.....#..#.............#.......................#..#....#............#.............................................#................ +............#................##............................................#.##..................#.................#.....#...#.... +....................................................................#..#.................#.....#................#....#.....#...... +.#.........##.................##................#..............................................#.................................. +...................#..................#.......#......#......................#..#...................#.........#...............#.#.. +.......................#.#.........#...............#....................#........#.............#.................................. +......#...........#........................................#........#.........#...............#.#.........#....................... +...#...........................................................#...........#............................#......................... +...........#............................#.#........#...#........#........................................................#........ +.........#................................................#...#..#........#............#................#......................... +..#.....................................................................#...............#.........#....#.......#.................. +.......................#....#..#............#.........#.............#...................##....................................#... +..................#...................................................................#.....................#...................#. +............................#..........................#.....#...........##....................................................... +........................#.............................#...............#..............................#.........................#.. +.....................#..........#...#.....#....#..............#...........................................#...............#.#..... +...................................#.................................#......#..................#.................................. +.#.....#.......##......#..................#...............................................#.........................#.........#... +.................#...............#..............................#............................................#......#............. +...#.........#................#...#....................#......................#.#......#.............#............................ +.............#..........##....#...#................#.............#.............#............................................#..... +.....#............................................................................................................#............... +........................#..........................##........#........................................#........#.................. +..........................#.....##.#.............#.........#..............................#..............................#........ +..............#.....................#...............................................#..................................#.......... +...#................................................#.........#.....................#..........................................#.. +.##..............#..........#......................................................................#.........#........#.........#. +...##.#.....#........#..........................#.............................#..........#.#..#................................... +..................................#...#......#......#................#..#.....................................#...#............... +.........................................................................................#..................#......#.............. +.................#....................#..#....#..............................#........##...#.......#...............#.............. +...#.................#................#..................................#..................##....##.....#............#........... +..........#...#....................##......................#.....#...........#......#......#.............##....#...#........#.#... +............................#......#.........#..............................................................#........#............ +.........................................#.........................................................#...............#.............# +.....#..........#..#........#................................................................................##......#............ +.#................#.....................................................................................#.....#................... +..............#........#..................................#..............................##....................................... +........................#.....................#..............................#..................#.............................#.## +#...........................................................#..##........#........................................................ +..............#...............#.........#...........^.....................................................#...#.........##..#..... +......................................................#.......................................#..............#...............#.... +...#....#..................#....#.......................#.#..........#.......#.................#................................#. +#.........................................................................................................#....................... +..........................#......................................................................#.............#.................. +................#...............................................................#........#........................................ +..........#............#...............#.#........................................................................................ +....#.....#............#.....##.........#......##.................#.......#................#...............................#...#.. +................................................................................#...#.......................................#..... +.#........................................#.................................................................#.#................... +.......#....#...................................................................................#...........#..#.............#.... +...#...#...............................................................................................................#.......... +..#....................................#......#.................#.........................................................#....... +...........................................#......#.........#.##........##..#.........#..........................#....##.#....#... +.........................#...............#............................................................................#........... +................................................#................#..................#..#...........#.......................#.....# +..........................................................#..........#........................................#................... +..................#...................#................##.........#...........................#................................... +............................#.................................................................#...........#.#..................... +................#.......................#.........................................................................#....#.......... +#..........#..............#.#............................................................................................#........ +..........................................................................................#.......#.........................#....# +...........................................#.......#................................................................#...#......... +..#...................#........................................#..............#.......................#........................... +.......................#..............................#...........................#......#......................#........#........ +.....#................................................................................#....#...................................... +..#..................................#.........#....#............#....#..............#.............#......#.........#......#....#. +.......##.................................................................................................#.#....#................ +............................................#.....#...................#...........#.........#..................................... +...............#.........................................#.............................#.........................#............#... +..............................................##..................................................#........................#...... +..................................................................................................#.................#............# +......................#.......................#.........#......................................................................#.. +..#...........................#...........................................................................#.....#........#........ +..........#....................#...........................##................................................................#.... +.........#........#...........................................#........##......................................................... +....#.............................#....................#.................#..........................#........................#.... +.......................................#...#....#...............................................#................................. +............#............................................#..............................#..........#......#....................... +.#..............................#...........#........#...............................#.#......#..................................# +#................#..#............................................................................................................. +................................#................#............#....#.#..................##.....................#...............#.# +#....##................#...........#....#..#..........#.....................#..........................#.....................#.... +............................................................................................#..................................... +.......................#................................................##..................................#..................... +....#.....#..#................................................................................................##.................. +..........................#......#...#...#..........#...#................#.................................................#...... +............................#....#.#.......#..........#............................................#.............................. +......#...........#......................#..#..................................................................................... +.........................................#...................................................##...............#............#...##. +...................................#.#............................................................................................ +......................#........##..................................................#.............................................. +...................#......................................................#......#.............................#...........#...... +......#................#................................................................................#..................#...... +..#.........................#.....#..............#.........#...................#.......................................#.......... +..................#..............................................#......#.#....................................................... +...........#.....................................................................#.......................#........................ +.......#.........###.....................#........................................................................................ +...............#...#..........#........................#....................#......#............#..................#.............. +.............#.......#.............#....................................................#.....................................#... +.............................................................................#.#...............................#..#............... +.........##..........#..#.#.................................................................................#................#.... +.#..................#.....................................#...................#.#..............#...........................#...... +........#.....#...........................#..........................#.............................#...............#.............. +#.........#.#.......................................................................................................#............. +..#...................................................................#............#...#.........#................................ +..................#......#........#...........#......................#........#..#.......................................#...#..#. +.......................................................#.............#...........#............................#............#...... +..............................................#....................................................................#.............. +.............#....................#.......................#.............#..........#.........#.............#....#.......#.....#... +...#...................#...............#........#.............#.................#..........#........#................#............ +...........#...............#.....................#.................................................#...#.....#.....#.............. +....#......................................#......#..............................#...........#.....#..................#........... +#.........#...................#.........#............#............#..............#..........#...........#...#.#..##............... +...........................................................#..................#......#..................#...............#......... +...........#.......................#.........................................................#.......#..............#..........#.. +.................................#.....#.....#..............................#..........#..............#............#.............. +...............#.......................................................................##.........#...........................#... +....#...............#.........#.#...........#.......#.#..#....#................................................................... +.........#.............................................#.......................................................#..........##...... +......................................#...............#.......#..#..#.#...................#....................#.#................ +.................#..................................................................#..........................#.....#......#.#... +..#...........#..................#..............#.....#......#.................#..............##.......#...#.......#.......#...... +......................................#.....................#..........#............................................##.#.......... +#......#................#........................................................#....#....##..................#.................# +............##..............##..........#........##.....................................#..........#.............................. +.#.##............#.................#...................#....#...#...............................................#................. diff --git a/6.pl b/6.pl new file mode 100644 index 0000000..6705a67 --- /dev/null +++ b/6.pl @@ -0,0 +1,96 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +my @original_grid; +my @grid; +my @pos = (0,0); +my @start_pos = (0,0); +my %seen_positions; + +open(my $fh, "6-input.txt") or die; +while (<$fh>) { chomp; push @original_grid, [split //]; } +close($fh); + +@grid = map { [@$_] } @original_grid; +for (my $i=0; $i= 0 and ($grid[$pos[0]-1][$pos[1]] eq '.' or $grid[$pos[0]-1][$pos[1]] eq 'X')) { + $grid[$pos[0]][$pos[1]] = 'X'; + $pos[0]--; + $grid[$pos[0]][$pos[1]] = '^'; + } + else { $grid[$pos[0]][$pos[1]] = '>'; } + } elsif ($direction eq '>') { + if ($pos[1]+1 >= scalar @{$grid[$pos[0]]}) { $grid[$pos[0]][$pos[1]] = 'X'; } + elsif ($pos[1]+1 < scalar @{$grid[$pos[0]]} and ($grid[$pos[0]][$pos[1]+1] eq '.' or $grid[$pos[0]][$pos[1]+1] eq 'X')) { + $grid[$pos[0]][$pos[1]] = 'X'; + $pos[1]++; + $grid[$pos[0]][$pos[1]] = '>'; + } + else { $grid[$pos[0]][$pos[1]] = 'V'; } + } elsif ($direction eq 'V') { + if ($pos[0]+1 >= scalar @grid) { $grid[$pos[0]][$pos[1]] = 'X'; } + elsif ($pos[0]+1 < scalar @grid and ($grid[$pos[0]+1][$pos[1]] eq '.' or $grid[$pos[0]+1][$pos[1]] eq 'X')) { + $grid[$pos[0]][$pos[1]] = 'X'; + $pos[0]++; + $grid[$pos[0]][$pos[1]] = 'V'; + } + else { $grid[$pos[0]][$pos[1]] = '<'; } + } elsif ($direction eq '<') { + if ($pos[1]-1 < 0) { $grid[$pos[0]][$pos[1]] = 'X'; } + elsif ($pos[1]-1 >= 0 and ($grid[$pos[0]][$pos[1]-1] eq '.' or $grid[$pos[0]][$pos[1]-1] eq 'X')) { + $grid[$pos[0]][$pos[1]] = 'X'; + $pos[1]--; + $grid[$pos[0]][$pos[1]] = '<'; + } + else { $grid[$pos[0]][$pos[1]] = '^'; } + } else { return 0; } + return 1; +} + +while (tick(\@pos, \@grid)) { $seen_positions{"$pos[0],$pos[1]"} = 1; } +my $pone = 0; +foreach(@grid) { foreach (@$_) { $pone++ if $_ eq 'X'; } } +print "puzzle 1: ", $pone, "\n"; + +my $loops = 0; +for (my $i=0; $i) { + chomp; + $_ =~ /^(\d+):\s(.*)$/; + push @results, $1; + push @numberss, [split /\s/, $2]; +} +close($fh); + +my $ffffffffffffff = -1; +foreach my $result (@results) { + $ffffffffffffff++; + my $numbers = $numberss[$ffffffffffffff]; + my @possible_operations_part_one = combinations(['+', '*'], scalar @$numbers-1); + my @possible_operations_part_two = combinations(['+', '*', '|'], scalar @$numbers-1); + + my @op_list_base; + foreach (0..scalar @$numbers-1) { + if ($_ == 0) { $op_list_base[$_] = $numbers->[$_]; } + else { $op_list_base[$_+$_] = $numbers->[$_]; } + } + + my @to_calculate_part_one; + foreach my $operation_symbol (@possible_operations_part_one) { + my @op_list = @op_list_base; + my $symbol_idx = 0; + foreach (0..scalar @op_list-1) { + if (not defined $op_list[$_]) { + $op_list[$_] = $operation_symbol->[$symbol_idx]; + $symbol_idx++; + } + } + push @to_calculate_part_one, \@op_list; + } + + my @to_calculate_part_two; + foreach my $operation_symbol (@possible_operations_part_two) { + my @op_list = @op_list_base; + my $symbol_idx = 0; + foreach (0..scalar @op_list-1) { + if (not defined $op_list[$_]) { + $op_list[$_] = $operation_symbol->[$symbol_idx]; + $symbol_idx++; + } + } + # print Dumper(\@op_list); + push @to_calculate_part_two, \@op_list; + } + + foreach (0..scalar@to_calculate_part_one-1) { + if (calculate($to_calculate_part_one[$_]) == $result) { + $result_sum=$result_sum+$result; + print "puzzle 1: $result ok\n"; + last; + } + } + + foreach (0..scalar@to_calculate_part_two-1) { + if (calculate($to_calculate_part_two[$_]) == $result) { + $result_sum_part_two=$result_sum_part_two+$result; + print "puzzle 2: $result ok\n"; + last; + } + } +} + +print "puzzle 1: $result_sum\n"; +print "puzzle 2: $result_sum_part_two\n"; + +sub calculate { + my $expression = shift; + my @local_expression = @$expression; + + while (scalar @local_expression > 1) { + for(my $o=1; $o <= scalar @local_expression-2; $o=$o+2) { + my $r = 0; + if ($local_expression[$o] eq '*') { $r = $local_expression[$o-1] * $local_expression[$o+1]; } + elsif ($local_expression[$o] eq '+') { $r = $local_expression[$o-1] + $local_expression[$o+1]; } + elsif ($local_expression[$o] eq '|') { $r = $local_expression[$o-1] . $local_expression[$o+1]; } + else { die; } + $local_expression[$o-1] = $r; + splice @local_expression,$o,2; + last; + } + } + return $local_expression[0]; +} + +sub combinations { + my ($symbols, $len) = @_; + my @result = (); + my $s_len = scalar @$symbols; + for my $i (0..$s_len**$len - 1) { + my $num = $i; + my @combination; + for my $position (1..$len) { + unshift @combination, $symbols->[$num % $s_len]; + $num = int($num/$s_len); + } + push @result, \@combination; + } + return @result; +} -- cgit v1.2.3