Calendrier de l'avent 🎄 (mais sans chocolats)

c’est plus malin que mon modulo, je vais corriger :wink:

quand c’est pas clair, en gĂ©nĂ©ral ca n’a pas d’importance
je suis sur que les puzzle gĂ©nĂ©rĂ©s n’ont jamais d’arbre en 0,0

sinon je suis fier de mon code, que je trouve trÚs élégant
en revanche adventofcode me dit que la rĂ©ponse n’est pas bonne :man_facepalming:

mais est-ce si important que le code soit juste s’il est Ă©lĂ©gant ? (vous avez 2h)

1 « J'aime »

Dans le cas oĂč l’offset de la pente est de plus de 2 fois la largeur du motif, tu aurais une erreur d’accĂšs dans le tableau. Le modulo est plus sĂ»r !

3 « J'aime »

Day 3 groovy, aprĂšs un poil de refactor suite Ă  la phase 2

Summary
    File f = new File("../../resources/day3Input.txt")
    def lines = f.readLines()

    void phase1(){        
        println  "Phase 1: Answer is " + findNbOfTreesOnPath(3,1)
    }

    void phase2(){       
        println  "Phase 2: Answer is " + findNbOfTreesOnPath(1,1) * findNbOfTreesOnPath(3,1) * findNbOfTreesOnPath(5,1) * findNbOfTreesOnPath(7,1) * findNbOfTreesOnPath(1,2)
    }

    private Long findNbOfTreesOnPath(Integer stepsToTheRight, Integer stepsDown) {
        Long numberOfTreesEncountered = 0
        Integer startingPointForNextRow = 0
        Integer currentLineNumber = 0

        lines.forEach() { line ->
            if (currentLineNumber%stepsDown == 0){
                if (line.getAt(startingPointForNextRow) == '#') {
                    numberOfTreesEncountered++
                }
                startingPointForNextRow = (startingPointForNextRow + stepsToTheRight) % line.size()
            }
            currentLineNumber++
        }
        return numberOfTreesEncountered
    }

Voici mon code en Elixir (j’ai jetĂ© ma premiĂšre tentative Ă  la poubelle et tout réécrit avec des Stream.cycle() qui sont une sorte de gĂ©nĂ©rateurs infinis de nombre Ă  partir d’une liste)

Part1

https://github.com/cblavier/advent/blob/master/lib/2020/day03/part1.ex

Part2

https://github.com/cblavier/advent/blob/master/lib/2020/day03/part2.ex

Au fait je viens de créer un leaderboard geekzone. Pour le rejoindre :

:trophy:

2 « J'aime »

Cool, aprĂšs, je peux le faire que le soir :confused:

En php, avec dessin du parcours et des arbres rencontrés

part1
$timestart = microtime(true);
$toboggan = file("input3");
if ($toboggan === false) die("erreur de lecture");

//compteur d'arbres 
$arbres = 0;

//coords
$x = 0;
$y = 0;

//mouvement
$right = 3;
$down = 1;

//mod
$xmax = strlen($toboggan[0])-2;

while ($y<count($toboggan)) 
{
	if (substr($toboggan[$y], $x, 1) == '.') $m = 'O';
	else $m = 'X';
	echo substr($toboggan[$y], 0, $x) . $m . substr($toboggan[$y], $x+1) . "<br>"; 
	$x += $right;
	if ($x>$xmax) $x = $x-$xmax-1;
	$y += $down;
	if ($y<count($toboggan) && substr($toboggan[$y], $x, 1) != '.') $arbres++;
}

echo "arbres: $arbres";
$timeend = microtime(true);
echo "<hr>temps : " . number_format($timeend-$timestart, 4);

Part2, j’ai aussi fait une fonction slope ($right, $down)

C’est assez marrant comme reprĂ©sentation. Voici avec slope (1, 2).

O...#...............#.#..###.##
.O..###......#....#.#...#.##..#
..O..#..#......#..#..##..#...#.
...O........###...#............
....O...#.........##..#.#...##.
.#...O.#.#......#....#..#..#..#
#.....O..#..##...###....##.....
##.....O.#..#.........#...#....
..##....O......#.#.#.#.....#.#.
#.#..#...O#.....#.....##...#..#
......###.O...#...#........###.
.......#...X....##...#.........
#.#...#...#.O..#...#.#......#..
.#.........#.O.#......##.#...#.
.#.....###....X##..##.#..##.#..
#...##....#....O..#.....##.##..
##.#........###.O.........###.#
.................O#..#.........
.#.#.......#..##..O.....#..##.#
...#......#....#...O##.#..#....
...#.##...##........O......#..#
#....#..........#....O......#.#
.....#..##..........#.O###.....
#.............#...#....O..##...
.#..#.......#..##...#...X......
##...#.#.#...........#...O#....
.....#.......#.......#.#.#O....
#...#..#.#....###....##...#O#.#
###..##..#......#.....#.....O.#
.....#..#....#...#.#...#...#.O.
#.#..#....#..#.....#.#...#.#..O
X.........#..#..#.........##..#
.O...###...#..#...##.#..#......
..O....#.##.#.##...#.#.......##
##.X........#.....##.....#.....
....X..##..#..#....#..#.#......
.##..O.....#.#.#.#..........#.#
.#....X....#.#.#.#....#..#.....
.....#.O...##..#....##.........
........O........#....#.......#
...#.#..#O.##..##....#.....#...
.......#..X..#.#..#.....#......
.##........O#.#...........#....
.....#.#....X...#............#.
#......##...#O..#............#.
.............#O......#.#.......
....#...##.#...O##..#.....#.#..
.####.#..#..#.#.O.#.#.#....#...
.........#....##.O#..#.........
....#..##.#....#.#O.#...##.....
..........#.......#O##..#.##..#
....##.#.......#....O..........
#.#..#.#....#.#......O..###...#
...#....##........##..O#...#...
#....#.##...#.#..#....#O....#..
...........#.......#....O.#..#.
.#.##.#.#.............#..O.##..
.#.#........#.#...#..#....O...#
..##..##....#.#............X...
.#...#..#..#.#.....#.....#..O.#
...#.#........#.#.###...#....O#
..#....###.##.#..#..#....#...#O
O....#......###...#.#...##.....
.O.#..###.....#....#.#...#.....
..O#..####.###........#.....#..
...O#....##..##..##.......###..
.#.#O....#.#.#..........#..#..#
.....O..#......#.##....##...#.#
......O....#...............#...
.......O..####..##.##.#....#...
.#.#....O.###.....#....#.......
...#.....O......#......##...###
.#.#......X..##.#..#..#.#...#.#
..#.###.#..X...#.##..#.##......
.#..##.#..#.X.#...##..#.#......
.##.###..##..O..#.##..#........
##....#...#...O.......#........
.......#.......X#.#..#....#.#..
..........#....#O.#..#....#....
........##.###...O.....#.#.#...
......#........#..O...#.....#..
.#..#...#..........O.##.##..#..
.##.#.#....#........O......#..#
#............##..##..O......##.
........#.....#..#....O....#.##
.#.#.....#.#..#..##....X....#..
.#....#.#.......#..#..#.O.###..
#....#..#...#.....#......O#.##.
###....#.#......#....#.#..O##..
.#.................#.......X#.#
.....##.#..............##..#O..
..#...#.#.#.......##.#.....#.O.
#.....#...##....##..##........X
X..#.....#....#...##......#....
.O....#...............#.....#..
..O........##......#...#.......
...O..##..###.......#....#.##..
....O#.........#........##.....
.#.#.O.##................#.....
.#....O...........#...###....#.
.......X....##...............#.
......#.X....#...#..#..........
##....#..O##.....#..#.###.#....
.##.#.....O.....##.........#.#.
#..##......X##........#...#....
.....#.#..#.O...#.......#..##..
.#.#...###...O..###............
.......#......O...........#...#
....#..#.......O....#.#........
.......#....#...O..#....#......
.........###.#..#O.............
....##..#.......#.X...#.#..#.#.
........##..#......O.#.........
.........#.#..####..X...#.##.##
..#...#...#....#.#...O#.....#.#
.##.....#....#.......#O#..#.##.
...#.........####......O..##..#
.........#....#..#.#....O....#.
....#......#..#.#...#....O#....
.#....#............#....##X#...
...#...##...#.#....#.......O...
.....#.....#.#....#.........X..
.#..#.##..#......#..........#X.
..#.............#.......#.#...O
X#...##...#.#....#..#..........
.O..#.#......##.#......#...#.#.
..O#.#.........................
...X#.#...##..#.#.##.#...#.##..
.#..O............#..#...#......
...#.O...#...####....##....#..#
.....#X.##..#..#.........##....
..##.#.O..####..#...........#..
...#...#O.....#..#.#....#......
.........X...##...........#....
...#......O...#.###..##...#.##.
....#..#.#.O...##...#.#.#.#....
.##.........O#.#.#.....#.....#.
.#...#.....##X..#......#.....#.
#....#....#...O#....#..#.##....
##.###..#...##.O.....#.#.......
..##.#.#....#...X.....##.......
###......#.##....X.#..##.......
.......#.#....#...O.##......#..
....#.#....#..#.#..O##.........
.#.....#.....#.##...O#.##..#..#
..#...........#....#.O.....##..
..#..#..........#...##O...#....
.##...##..........#.#..X...#...
............#.......#..#O....##
#.#......#.#...#.....#...O.....
.#..#.#.#.##...#..#.#.....O...#
#..##.##.#.##.......#......O#..
....#..##....##..##......#..X#.
......#...#...###..#.........O.
..##.#.....#.#..#......#.#....O
X..#.#..#.....#.#..#..##..#.#..
.O.#..##....#..#.#....#.###.#..
##O..........#......##.##.....#
#..O..#........................
....X.#..#..............#......
.###.O..#..#.#.####.........#..
......O...#................#.## 

T’en fais pas, c’est un marathon pas un sprint :slight_smile:
Dans qq jours le classement se fera sur le nombre d’étoiles (car tout le monde ne parviendra pas Ă  faire tous les quizz) et le temps sera juste la pour dĂ©partager les rares Ă©galitĂ©s

Ah ben clairement, vu mon niveau de chie (et le fait que je dĂ©couvre python), ça va probablement vite s’arrĂȘter :slight_smile:

La seule autre fois oĂč j’ai essayĂ©, en 2018, j’ai coincĂ© au jour 6, ça devenait dĂ©jĂ  trop chaud pour moi (sauf Ă  y passer des heures :sweat_smile:)

J’ai rejoins le board :slight_smile:
Et j’ai pousser mes codes adventofcode2020/Program.cs at main · jeromefirlej/adventofcode2020 · GitHub
Pas de prise de tĂȘte au quasi plus court

hop, 2* aussi pour moi aujourd’hui :

mon code en python
slope = []
f = open("Z:\donnees\developpement\Python\AdventOfCode\day3.txt", "r")
for line in f:
    slope.append(list(line.rstrip("\n")))
f.close()

def calculateCollision(shiftX, shiftY, slope):
    currentPositionX = 0
    currentPositionY = 0
    finishLine = len(slope)
    slopeWidth = len(slope[0])
    collision = 0

    while(currentPositionX < finishLine):
        if slope[currentPositionX][currentPositionY] == '#':
            collision += 1
        currentPositionX += shiftX
        currentPositionY = (currentPositionY + shiftY) % slopeWidth
    return(collision)

print("Star 1 : nb of collision = ", calculateCollision(1, 3, slope))
print("Star 2 : nb of collision = ", calculateCollision(1, 1, slope) * calculateCollision(1, 3, slope) * calculateCollision(1, 5, slope) * calculateCollision(1, 7, slope) * calculateCollision(2, 1, slope))

Et le resultat :

Star 1 : nb of collision =  257
Star 2 : nb of collision =  1744787392
[Finished in 0.074s]

@silicium : trĂšs sympa comme representation :slight_smile: j’ai hesitĂ© Ă  le faire aussi :slight_smile:

T’as merdouillĂ© dans des coordonnĂ©es :smiley: ou alors les rĂ©sultats peuvent ĂȘtre differents en fonction des gens ?

on a tous des donnĂ©es diffĂ©rentes en entrĂ©e, c’est pour ca :slight_smile:

RAaaaaaaaaaaaah putain je cherchais mon erreur, y’en avait pas !

3 « J'aime »

T’en veux pas. Sur 28 etudiants de 1ere annĂ©e ce matin, j’ai eu plusieurs fois la question « pourquoi j’ai pas le mĂȘme rĂ©sultat » :smiley:

Hello :wave:
Bon courage pour le challenge du jour :slight_smile:

Je viens de lire l’énoncĂ© du Day4 et je propose une rĂšgle : PAS DE LIB EXTERNE.

Je dis ça car il existe dans l’univers Symfony un component servant Ă  valider des donnĂ©es, suffit de dĂ©crire les rĂšgles de validation et il fait le job tout seul
 Ça serait clairement cheatĂ© pour cet exercice donc je propose comme rĂšgle de faire le code en langage le plus natif possible.