Le lexpage c'est comme une mini-jupe : assez court pour attirer l'attention mais assez long pour couvrir l'essentiel    —  GDI

Discussions

advent of code

Sysson 1403 Spammeur
Salut à tous,

J'imagine que nombre d'entre vous avez déjà entendu parler de adventofcode.com/ , est-ce que vous participez? Perso je le fais en go et ai complété les 4 premiers jours sans rencontrer de réelle difficulté.

J'essaie aussi d'implémenter une solution en Funge-98 pour le fun (github.com/catseye/Funge…), mais n'ai pas encore terminé le 3ème jour comme ça. Je m'arrêterais de le faire lorsque ça deviendra vraiment trop complexe mais j'ai bon espoir de pouvoir terminer ce jour là^^


Ce message a été modifié 1 fois. Dernière modification : 4 décembre 2021 à 15:19 par Sysson.

Guybrush 8350 Bob
Ah je ne connaissais pas. J'aime bien le concept :-)

Si j'ai un peu de temps et de motivation, je pourrai bien m'y mettre tiens
Sysson 1403 Spammeur
Je me suis dis que je pouvais publier mes solutions, si certains veulent voir ou comparer : git.adyxax.org/adyxax/ad…

J'ai un peu de retard et dois faire le jour 6, mais je viens de lire le 7 et ça va se compliquer!
Guybrush 8350 Bob
Syssonmais je viens de lire le 7 et ça va se compliquer!
Je viens de lire en diagonale, mais ça semble pas si "compliqué" ou alors j'ai zappé un truc :-D Même une approche brute-force (en supposant un nombre limité de positions de départ) semble jouable, non ? Intuitivement, je dirai que calculer le median des positions devrait être suffisant pour définir la position idéale minimisant le fuel nécessaire :)
Sysson 1403 Spammeur
Oui tu as raison, c'est intuitif en plus^^ Ta lecture en diagonale est supérieure à la mienne^^
Guybrush 8350 Bob
SyssonOui tu as raison, c'est intuitif en plus^^ Ta lecture en diagonale est supérieure à la mienne^^
Pour le 6, j'ai lu en diagonale également, et naïvement, je ferai une simulation de la population (parce que ça va plus vite à coder que de réfléchir mathématiquement à la croissance de la population) mais je suis sûr qu'il existe une solution mathématique "one-line".

Tiens, d'ailleurs, si tu as quelques notions de base en Python, le package "sympy" (calcul symbolique en Python) peut t'intéresser pour résoudre ce genre de cas rapidement : www.sympy.org/en/index.h…
Dans mes souvenirs, le site propose un outil en ligne pour évaluer directement le code/équation :-) C'est un peu de la triche, mais une fois que le problème est modélisé mathématiquement, ce genre d'outils aide vraiment :-D


Ce message a été modifié 1 fois. Dernière modification : 8 décembre 2021 à 09:07 par Guybrush.

Sysson 1403 Spammeur
Je viens de finir le jour 6. J'ai simulé les population de chaque age mais pas les individus, et ça se fait bien.

En fait si tu commences maintenant t'auras fini les 7 premiers jours en à peine une heure, les premiers jours étaient vraiment faciles. Mais ça reste un bon exercice que d'implémenter ça typiquement pour moi qui ne suis pas dev : Je lis l'énoncé du premier jour et je me dis facile, mais ensuite tu dois jouer avec le language et ses api : comment lire l'entrée standard, comment parser. C'est facile en théorie et chaque chose tu la retrouve vite, mais pratiquer est important.
Guybrush 8350 Bob
Je suis un Pythonista, lire les entrées standards, c'est faire in = input() :-D Mais j'aime vraiment l'idée que tu t'es fixée de le faire dans un langage tel que Funge-98 ;-)
Guybrush 8350 Bob
SyssonOui tu as raison, c'est intuitif en plus^^ Ta lecture en diagonale est supérieure à la mienne^^
Par contre, ça ne marche pas pour la seconde partie du puzzle :-D (J'ai juste lu l'énoncé)


[Edit: J'assiste, à distance, à une conférence/workshop, ça laisse du temps pour faire "autre chose" :-D Du coup, j'ai fait le brute force pour la seconde partie du puzzle 7 (par contre, j'ai pas pu utiliser la balise [code] car ça ne passe pas avec [.spoiler], du coup je mets des "_" en début de ligne pour indiquer l'indentation :-):


def cost(x, y):
__ n = abs(x-y)
__ return n * (n + 1) / 2

def evaluate(pos, t):
__ return sum((cost(x, t) for x in pos))

print(min(*[(evaluate(pos, t), t) for t in range(min(*pos), max(*pos))]))



[Edit bis : et pour ceux qui ne veulent pas s'embêter à mettre un environnement Python en local, il y a des solutions en ligne, notamment replit.com/languages/pyt…
Il y en aura davantage car il existe un "interpréteur Python" qui convertit le code vers WebAssembly (on peut déjà exécuter des notebooks notamment avec ça, y compris ceux utilisant des librairies majeures comme pandas, etc. qui ne sont pourtant pas en "pure python"]


Ce message a été modifié 3 fois. Dernière modification : 8 décembre 2021 à 15:36 par Guybrush.

Sysson 1403 Spammeur
Pour la seconde partie du jour 7 c'est une moyenne et plus une médiane qu'il fallait faire, mais comme c'est sur des entiers je tombais sur la mauvaise valeur cause de l’arrondi. J'ai résolu en bruteforçant à calculer le minimum de fuel entre la position moyenne et la position moyenne+1. Je n'ai pas trouvé le bon algo pour avoir la bonne valeur. J'ai essayé de m'en sortir en testant regardant le résultat de la division entière mais sans succès.

C'est cool ces puzzles, ils restent assez simples pour que je continue en Funge. Les jours où il faut stocker beaucoup de data seront les pires pour moi dans ce challenge, on verra si je les saute ou pas.

Répondre

Vous devez être inscrit et identifié.